Свои команды: от подстановки до условия
Команда бота — это текст, который он скажет в чат. В текст можно вставлять подстановки (ник зрителя, название стрима, случайное число) и блоки — условия, счёт, выбор. Ниже всё, что понимает бот, с примерами.
Где заводить команды
На сайте: панель управления → «Команды канала» → «Добавить команду». Там же настраиваются права, кулдаун, алиасы и автоповтор, а текст проверяется на лету.
Из чата — модератору канала:
!создать !обнял ${user} обнял ${arg1}
Подстановки
Подстановка — это ${…} в тексте команды. Бот заменяет её на значение в тот момент, когда отвечает.
| ${notag} | без тега Бот не обратится к тому, кто вызвал команду. |
| ${user} | ник зрителя Имя того, к кому обращена команда: вызвавшего либо указанного после команды. |
| ${randomchatter} | случайный зритель Случайный ник из чата. Twitch: боту нужна модерка. Kick: не поддерживается. |
| ${title} | название стрима Текущее название трансляции. |
| ${game} | категория Текущая категория трансляции. |
| ${arg1} | 1-е слово Первое слово после команды. |
| ${arg2} | 2-е слово Второе слово после команды. |
| ${arg3} | 3-е слово Третье слово после команды. |
| ${args} | все слова Всё, что написано после команды. |
| ${rand 1 100} | случайное число Случайное число от первого до второго включительно. |
| ${arg1:кто-нибудь} | слово или запасное Первое слово после команды, а если его нет — то, что написано после двоеточия. Работает и с ${arg2}, ${arg3}, ${args}, ${user}. |
Блоки
Блок — это {слово …} в тексте команды. Блоки считаются до того, как подставляются значения, и умеют то, чего подстановка не умеет: выбирать, считать и сравнивать.
| {if} | если Разный ответ по условию. Можно {elif} и {else}, закрывается {end}. |
| {math} | счёт Сложение, вычитание, умножение, деление и остаток. Степени нет. |
| {pick} | выбор Один вариант из перечисленных через черту. |
| {countdown} | сколько осталось Сколько времени до даты: ДД.ММ или ДД.ММ.ГГГГ, можно с часами. |
| {countup} | сколько прошло Сколько времени прошло с даты. |
| {upper} | ЗАГЛАВНЫМИ Текст заглавными буквами. |
| {lower} | строчными Текст строчными буквами. |
| {len} | длина Сколько знаков в тексте. |
| {urlencode} | для ссылки Текст, пригодный для подстановки в адрес. |
{if} обязательно закрывается {end}; между ними может быть сколько угодно {elif} и один {else}. Остальные блоки закрываются сами.
Что можно написать в условии
Внутри {if} и {math} разрешены числа, текст в кавычках, подстановки, круглые скобки и вот эти действия:
| == != | равно и не равно; регистр букв не важен |
| < > <= >= | больше, меньше — числа как числа, текст по алфавиту |
| contains | содержит ли текст слева текст справа |
| starts ends | начинается с … и заканчивается на … |
| and or not | и, или, не |
| + - * / % | сложить, вычесть, умножить, разделить, остаток |
Готовые примеры
Обнять — а без аргумента переспросить:
{if ${arg1} == ""}кого обнимать-то?{else}${user} обнял ${arg1}{end}
То же самое короче, через умолчание:
${arg1:кого-нибудь} получает пирожок
Сколько осталось до даты:
До Нового года {countdown 01.01}
Два кубика:
выпало {math ${rand 1 6} + ${rand 1 6}}
Случайный выбор:
${user}, сегодня ты {pick кот|пёс|бобр}
Несколько веток подряд:
{if ${args} contains "спасибо"}и тебе!{elif ${args} == ""}чего молчишь?{else}не понял{end}
Если бот отвечает скобками
Значит текст не разобрался — чаще всего забыт {end}. Редактор на сайте проверяет текст при вводе, показывает, что не так и на каком знаке, и не даёт сохранить сломанное — не стирая написанное.
Из чата такой текст тоже не примут: !создать и !ред ответят, что в тексте ошибка.