Roll Robot

@rollrobot

Кубики для настольных ролевых игр в любом чате — D&D, Pathfinder, World of Darkness, Shadowrun, Fate, Call of Cthulhu.

Открыть в Telegram

Как начать

Открой @rollrobot, нажми «Запустить», отправь /roll 2d6+3. В ответ придёт разобранное выражение и сумма.

Играешь в компании — добавь бота в чат. Он отвечает на сообщение, которое его вызвало, поэтому бросать могут сразу несколько человек и каждый ответ остаётся при своём вопросе. Без права отправлять сообщения бот молчит.

Если добавить бота нельзя, есть инлайн-режим: напиши @rollrobot 2d6+3 и нажми на результат. Ни добавлять, ни выдавать права не нужно — бросок уйдёт твоим собственным сообщением.

Команды

Пять команд, одинаковых в личных чатах и группах. /roll и /full принимают нотацию; отправь любую из них без аргументов — бросится обычный d20.

/roll /r

Сумма и приведённое выражение — чтобы видеть, что именно бот прочитал.

/roll 2d6+3
2d6 + 3 = 13

/full /f

Тот же бросок с разбором по кубикам. Отброшенные зачёркнуты, натуральный максимум или минимум помечен стрелкой; в пуле с подсчётом успехи жирным, провалы подчёркнуты.

/full 4d6kh3
4d6kh3 = 14 [6↑, 5, 3, 1↓]
/full 4d10>=6f1
4d10>=6f1 = 2 successes, 1 failure [10↑, 7, 3, 1↓]

/random

Только d100 и ничего больше — когда нужно просто число из ста. То же самое, что /roll d100.

/roll d100
1d100 = 73

/ask /a

Ответ «да или нет» для мелочей, ради которых не стоит бросать, — есть ли на двери ловушка, торгуется ли купец, будет ли ночью дождь. Всё после команды — вопрос, он цитируется над ответом.

  • Кавычки не нужны. Знаки препинания, апострофы и нотация внутри вопроса ничего не ломают.
  • Голая /ask тоже работает: вопроса нет, только ответ — для того, что и так сказано вслух за столом.
  • Ответ — это d2, то есть честная монетка и ничего больше.
  • Yes и No остаются английскими во всех локалях: язык интерфейса плохо угадывает язык чата.
/ask Открываем дверь?
Открываем дверь?
Yes ✅
/ask
No ❌

/help

Справка по нотации одним сообщением, со ссылками на песочницу и справочник. Эта страница вкратце, не выходя из Telegram. /start выводит то же самое.

Бета-возможности

Работает, но ещё не устоялось: всё в этом разделе может измениться или вовсе исчезнуть из бота в следующем обновлении. Пять команд выше — нет.

/pick /p

Выбирает один вариант из твоего списка — случайная встреча, кто первым в дозор, какая дверь. Один кубик по списку; весов нет, пока не задашь их сам.

  • Минимум два варианта, максимум сто.
  • Хватит запятой — Прокрасться, Договориться. | и ; делают то же самое, а перенос строки старше обоих, поэтому вставленная таблица делится по строкам.
  • Работает только первый найденный разделитель, в таком порядке: перенос строки, затем | или ;, затем запятая, затем просто пробелы. Ставь |, если внутри варианта есть запятая, — Верёвка, 15 м | Факел делится на два, а не на три.
  • Повтори вариант, чтобы дать ему вес: каждая копия занимает в списке отдельное место.
  • Название в кавычках в конце подписывает выбор, а не становится ещё одним вариантом.
/pick Патруль гоблинов | Пустая комната | Сокровищница
Пустая комната
/pick Прокрасться, Договориться, Устроить засаду
Договориться

Особые возможности

Для обычного броска ничего из этого не нужно. Это для тех, кто пользуется ботом каждую сессию и хочет печатать поменьше.

Названия в кавычках

Название в двойных кавычках в конце броска цитируется над результатом, чтобы чат из одних голых чисел оставался читаемым. Работает одинаково в /roll, /full и /pick, а типографские кавычки, которые подставляет телефонная клавиатура, принимаются наравне с прямыми.

Кавычки обязательны. Парсер принимает так много, что слово без кавычек не отличить от нотации сколь-нибудь надёжно: 2d20kh1+7 Восприятие читается как нотация и падает, а 2d20kh1+7 "Восприятие" бросается и берёт название.

/roll 2d20kh1+7 "Восприятие"
Восприятие
2d20kh1 + 7 = 26

Запись через пробелы

Два или три числа через пробел читаются как бросок: /roll 4 6 — это 4d6, а /roll 1 20 -3 — это 1d20-3. Третье число — модификатор, знак у него свой.

/roll 1 20 -3
1d20 - 3 = 11

Голые числа

Одно число — это кубик: /roll 20 бросает d20.

/roll 20
1d20 = 12

Кириллические буквы кубиков

к и д сводятся к d до разбора, поэтому 2к6 бросает 2d6. Русская, украинская и белорусская запись работают одинаково, а латинскую k в kh и kl это не трогает.

/roll 2к6
2d6 = 8

Персидские цифры

۲۰ бросает d20. Арабо-индийские и персидские цифры сводятся к ASCII до разбора; в названии в кавычках цифры остаются как есть.

/roll ۲۰
1d20 = 17

Инлайн-режим

Напиши @rollrobot и нотацию в любом чате, включая группы, которые о боте и не слышали. Над клавиатурой откроется список; нажми на результат, и он уйдёт твоим собственным сообщением.

@rollrobot 2d20kh1+7 предлагает один бросок под двумя заголовками — «Бросок» и «Разбор». Выбор меняет вид, а не кубики: переброса не будет.

Если после имени ничего нет, будут три заготовки: «Бросок» и «Разбор» на d20, «Наугад» на d100.

Вопрос добавляет результат «Вопрос»: он идёт первым, когда бросать нечего, и последним, когда есть. Явный разделитель между двумя не-нотациями — Патруль гоблинов | Пустая комната — ставит первым «Выбор». Одни пробелы здесь не считаются, в отличие от /pick, иначе каждый недописанный вопрос предлагал бы выбор под своим ответом. Инлайн-выбор несёт список прямо в сообщении: над ним нет команды, на которую можно ответить.

Результаты личные и не кешируются, поэтому каждый запрос бросает заново.

Нотация

То, что ты на самом деле печатаешь. Регистр не важен, пробелы не мешают, поэтому 2 D 20 KH 1 и 2d20kh1 — один и тот же бросок. Каждая группа ниже доведена до полезного предела; остальное лежит в справочнике, а песочница это запускает.

Кубики и арифметика

2d6Два шестигранных кубика.
d20Количество по умолчанию — один.
2d20+5Арифметика: + - * / и скобки.
(1d6+2)*3Скобки группируют всё, что в них положить.
(1d4)d6Вычисляемое количество: бросается 1d4, затем столько d6, сколько выпало.

Оставить и отбросить

4d6kh3Оставить три наибольших — характеристика.
2d20kh1Преимущество: больший из двух d20.
2d20kl1Помеха: меньший.
4d6dl1Отбросить наименьший; dh отбрасывает наибольший.
{1d8!, 1d6!}kh1Отбор по группе — каждый вложенный бросок идёт как один кубик.

Взрывающиеся кубики

d8!Максимум на кубике добавляет ещё один.
d8!!Составной взрыв: добавка складывается в тот же кубик.
d8!pПроникающий: каждый добавочный кубик получает −1.
5d10!=10Взрыв по порогу, а не по максимальной грани.

Перебросы и ограничения

2d6r<3Переброс значений меньше 3, сколько потребуется.
2d6ro<3Переброс один раз, остаётся второй результат.
4d6min2Поднять каждый кубик минимум до 2.
4d6max5Ограничить каждый кубик пятёркой.

Пулы успехов и проверки

12d6>=5Каждые 5 и 6 считаются успехом.
7d10>=6f1Подсчёт успехов, единицы вычитаются как провалы.
1d20+7 vs 15Проверка против сложности, ответ — степень успеха.

Другие кубики и функции

4dFКубики Fate: каждый даёт −1, 0 или +1.
d%Процентный кубик — тот же, что 1d100.
2d6+floor(1d4/2)Функции: floor, ceil, round, abs, min, max, sqrt, pow.

По игровым системам

Бросок, за которым первым тянется каждый стол, — готовый к копированию.

D&D 5e

Атака с преимуществом: два d20, оставить больший, прибавить бонус.

/full 2d20kh1+7
2d20kh1 + 7 = 26 [8, 19] + 7

Pathfinder 2e

Проверка против КС. Превысил на десять — критический успех, не добрал десяти — критический провал; натуральная 20 или 1 сдвигает результат на одну ступень.

/full 1d20+12 vs 20
1d20 + 12 vs 20 = Critical Success (natural 18) [18] + 12 vs 20

World of Darkness

Пул Storyteller: успех на 6 и выше, каждая единица снимает один успех.

/full 7d10>=6f1
7d10>=6f1 = 4 successes, 1 failure [8, 6, 2, 10↑, 1↓, 4, 7]

Shadowrun

Попадания на 5 и 6 по всему пулу.

/full 12d6>=5
12d6>=5 = 5 successes [5, 3, 6↑, 2, 4, 5, 1↓, 6↑, 3, 5, 2, 4]

Savage Worlds

Кубик черты и дикий кубик, оба взрывающиеся; засчитывается больший.

/full {1d8!, 1d6!}kh1
{1d8!, 1d6!}kh1 = 9 {[5], [6, 3]}

Fate

Четыре кубика Fudge плюс уровень навыка.

/full 4dF+2
4dF + 2 = 3 [1, 0, -1, 1] + 2

Call of Cthulhu

Процентный кубик: нужно выбросить не больше своего навыка.

/roll d%
1d100 = 37

Ограничения

Один бросок ограничен 100 кубиками и 100 итерациями взрывов или перебросов. Попросишь больше — бот так и скажет вместо броска: эти пределы и удерживают ответ внутри лимита Telegram в 4096 символов.

Разбор, который всё равно вылезает за 3500 символов, заменяется компактным ответом — большой пул отвечает суммой, а не молчанием.

/pick принимает не больше 100 вариантов. Список длиннее отклоняется, а не обрезается: оставить первую сотню — значит тихо сместить каждый выбор к началу списка, сохранив видимость работы.

Название в кавычках обрезается до 100 символов, вопрос к /ask — до 300.

Частые вопросы

Обязательно ли добавлять бота в группу?

Нет. Напиши @rollrobot и нотацию в любом чате и выбери результат — он уйдёт твоим сообщением, а бот никуда не вступит. Добавлять стоит, только если за столом бросают часто: команду печатать короче.

Читает ли бот мои сообщения?

Он реагирует только на обращённое к нему: команды со слеша и инлайн-запросы, начинающиеся с @rollrobot. Обычная переписка игнорируется — для неё просто нет обработчика.

Хранится ли что-нибудь?

Нет. Ничего из отправленного не сохраняется: ни текст вопроса, ни варианты в списке выбора, ни название в кавычках, ни один результат. Записывается только форма броска — 2d6, 4d6kh3 и команда, из которой он пришёл, — а ID пользователя Telegram сводится к хешу с солью, чтобы считать повторные обращения, не опознавая аккаунт. Этот набор данных доступен только на запись; он нужен, чтобы видеть, какую нотацию стоит поддерживать, и обратно в переписку его не развернуть.

Броски честные?

Каждый бросок берётся из генератора roll-parser заново, с новым зерном. Ничего не считается заранее, и ни один результат не переходит из броска в бросок.

Можно ли назвать бросок?

Возьми название в кавычки в конце — оно появится над результатом: /roll 2d20kh1+7 "Восприятие". С /pick работает так же.

Почему 4d6d1 — ошибка?

Голая d после пула неоднозначна: отбросить один кубик или бросить столько кубиков снова? Пиши 4d6dl1, чтобы отбросить наименьший, или (4d6)d1 для вложенных кубиков.

Нотацию не приняли. Что дальше?

Бот повторит отправленное и подставит ^ под ту часть, которую не смог прочитать, — обычно правка видна прямо в ответе. Неудобные случаи быстрее разобрать в песочнице, ссылка на неё внизу страницы.

На каком языке говорит бот?

Меню команд, инлайн-заголовки и справка по нотации следуют языку интерфейса Telegram: английский, испанский, португальский, немецкий, русский, украинский, белорусский и персидский; всё остальное откатывается к английскому. Результаты — это нотация, они читаются одинаково везде. Yes и No намеренно остаются английскими: язык интерфейса плохо угадывает язык чата, в котором ты пишешь.