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

Обирає один варіант зі списку, який ти даєш, — випадкова зустріч, хто вартує першим, які двері. Один кубик по варіантах, без ваг, якщо не задаси їх сам.

  • Щонайменше два варіанти, щонайбільше сто.
  • Вистачить коми — Прокрастися, Домовитися. | і ; роблять те саме, а новий рядок старший за обидва, тож вставлена таблиця ділиться по рядках.
  • Береться лише перший наявний роздільник, у такому порядку: новий рядок, далі | або ;, далі кома, далі просто пробіли. Постав |, коли у варіанті є кома, — Мотузка, 50 футів | Смолоскип дає два варіанти, а не три.
  • Повтори варіант, щоб дати йому вагу: кожна копія займає окреме місце у списку.
  • Назва в лапках у кінці підписує вибір, а не стає ще одним варіантом.
/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Опустити кожен кубик щонайбільше до 5.

Пули успіхів і перевірки

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, команда, з якої він прийшов, — а ідентифікатор користувача Telegram зводиться до соленого хешу, щоб рахувати повторні звернення, не впізнаючи акаунт. Цей набір даних лише для запису; він існує, щоб показати, яку нотацію варто підтримувати, і його не можна повернути назад у розмову.

Чи чесні кидки?

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

Чи можна назвати кидок?

Візьми назву в лапки в кінці — і вона з’явиться над результатом: /roll 2d20kh1+7 "Сприйняття". Для /pick це теж працює.

Чому 4d6d1 — помилка?

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

Мою нотацію відхилено. Що тепер?

Бот повторює надіслане й ставить ^ під частиною, якої не зміг прочитати, тож виправлення зазвичай видно просто у відповіді. Складніші випадки швидше з’ясувати в пісочниці — посилання внизу сторінки.

Якою мовою говорить бот?

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