Свои команды

Встроенные команды написаны в коде и не переписываются. Всё остальное — ваше: откройте Панель → Команды и нажмите Создать команду.

Как создать

Команде нужны две вещи — триггер и ответ.

ПолеЧто делает
ТриггерЧто пишет зритель, например !discord
АлиасыДругие написания того же самого
ОтветТекст, который отправит бот
ДоступВсе, подписчики, VIP, модераторы или список ников
ТаймерПовторять ответ автоматически раз в N минут

Если не поставить префикс, будет добавлен !. Префиксы $ и ~ сохраняются как есть, поэтому $hug так и останется $hug.

Переменные

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

Формы записи равнозначны: $(user), {user} и ${user} — одно и то же. @{user} отличается: он добавляет @ перед именем, то есть получается готовое упоминание.

Кто и что написал

ПеременнаяВо что превращается
$(user)Логин того, кто вызвал команду
@{user}Упоминание того, кто вызвал команду
$(channel)Логин канала
@{channel}Упоминание канала
$(args)Весь текст после команды
$(1), $(2)Первое и второе слово после команды
$(1:), $(2:)Всё начиная с первого или второго слова

Про эфир

ПеременнаяВо что превращается
$(uptime)Сколько идёт эфир: «3 часа 12 минут». Вне эфира — «не в эфире»
$(game)Категория, в которой идёт эфир. Вне эфира — «не в эфире»
$(viewers)Сколько человек смотрит прямо сейчас. Вне эфира — 0

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

Случайное

ПеременнаяВо что превращается
$(random.1-100)Случайное число в диапазоне
$(random.pick:вариант 1|вариант 2)Случайный вариант из списка через |
$(random.chatter)Случайный участник чата из тех, кто недавно писал

Счётчики

ПеременнаяВо что превращается
$(count)Счётчик вызовов команды — увеличивается при каждом вызове
$(count:giveaway)Именованный счётчик — увеличивается при каждом вызове
$(getcount:giveaway)Именованный счётчик — только показать, не трогая

Данные со стороннего сервиса

Это то, из чего делаются команды вроде !elo, !rank или !mmr. Бот сам не знает ни FACEIT, ни Valorant — он спрашивает адрес, который вы указали, и вставляет ответ в сообщение.

ПеременнаяВо что превращается
$(urlfetch URL)Ответ сервиса как есть — если он отдаёт готовую строку
$(json URL поле)Одно поле, если сервис отдаёт JSON

В адрес можно подставлять другие переменные — например ник того, кто вызвал команду, или первое слово после команды:

Пример !elo → «$(urlfetch https://wombot.fi/nightbot/elo/$(user))» даст «Elo: 2857, Today: +17»

Если сервис отдаёт JSON, поле берётся по пути через точку. Числа в пути — это номера элементов списка, считая с нуля: recentMatches.0.result — результат первого матча.

Пример «Уровень: $(json URL level) | Эло: $(json URL elo)» даст «Уровень: 8 | Эло: 1568»

Что нужно знать

  • Только https. Адреса внутри нашей сети запрашивать нельзя — команда ответит «адрес не разрешён».
  • Одно сообщение делает не больше двух запросов. Один и тот же адрес в одном сообщении — это один запрос.
  • Ответ сервиса кэшируется на 10 секунд, а на канал приходится не больше 20 запросов в минуту. Поставьте команде кулдаун — иначе чат положит чужой сервис, и адрес заблокируют.
  • Ответ обрезается до 300 символов, переводы строк схлопываются в пробел, а ведущие / и . отбрасываются — чтобы чужой сервер не мог отправить в чат команду Twitch от имени бота.
  • Если сервис молчит дольше 5 секунд или отвечает ошибкой, в чат уйдёт «сервис не ответил» вместо пустоты.
  • Пробелы и прочие небезопасные символы в адресе кодируются сами. Но подставлять лучше ник или одно слово: произвольный текст зрителя может добавить в адрес лишние параметры.
  • Команда живёт ровно столько, сколько живёт чужой сервис. Это не наш адрес, и мы не обещаем, что он будет работать завтра.

Где брать адреса

Такие же адреса используют Nightbot и StreamElements, поэтому подходит любой рецепт из их сообществ — синтаксис у нас тот же самый. Для FACEIT есть публичный wombot.fi/nightbot/elo/<ник>, для Valorant и League of Legends — сервисы, которые отдают ранг по нику. Проверить адрес проще всего, открыв его в браузере: то, что вы увидите, и попадёт в чат.

Пример !hug → «{user} обнимает {1} 🤗» даст «viewer обнимает streamer 🤗»

Счётчики

{count} превращает команду в счётчик — смертей, шуток, чего угодно. Значение хранится по каналу и переживает перезапуск.

Таймеры

Поставьте команде таймер, и бот будет отправлять её по расписанию, пока вы в эфире. Удобно для ссылок и правил. Когда стрим оффлайн, таймеры сами останавливаются.

Ответы на слова без «!»

«А какой у вас сервер?» — обычная фраза, а не команда, и отвечать на неё приходится руками по десять раз за эфир. В форме команды есть блок «Отвечать на слова без «!»»: добавьте туда слово — и бот ответит тем же текстом, что и по команде, когда услышит его в разговоре.

Как искатьЧто ловит слово «сервер»Когда нужно
Точное слово«сервер», «Сервер», «сервер?»По умолчанию: почти не ошибается
Слово и его формыплюс «сервера», «сервере», «серверу»Падежи — то, ради чего это и делается
Любое вхождениеплюс «хостсервер», «мойсервер»Редко: чаще даёт ложные срабатывания

Пример зритель: «а какой у вас сервер?» → бот: «IP: 1.2.3.4, порт 25565»

Чтобы бот не превратил чат в поток ответов

  • После ответа команда молчит — по умолчанию минуту. Совсем без паузы нельзя: слово «сервер» в оживлённом разговоре встречается по десять раз подряд.
  • Слова короче трёх букв не принимаются, больше пятидесяти на канал не хранится.
  • Сообщения, начинающиеся с !, ~ или $, сюда не попадают — их разбирают обычные команды.
  • Внутри ссылок слова не ищутся: «зашёл на example.com/server» — это не вопрос про сервер.
  • Латиница вместо кириллицы не спасает: «cepвep» бот прочитает так же, как «сервер».
  • Модерация ходит первой. Удалённое сообщение ответа не вызывает.
  • Если слово подошло сразу к двум командам, выигрывает более длинное: «айпи сервера» точнее, чем «сервер».

Управление командами из чата

Всё то же самое можно делать, не открывая панель. Раздел приезжает выключенным: !del удаляет команду одной строкой в чате, и включать это канал должен сам — Панель → Команды → Системные → «Управление командами из чата».

КомандаЧто делаетПример
!add, !addcomЗаводит команду!add !сервер IP: 1.2.3.4
!edit, !editcomМеняет ответ!edit !сервер IP: 5.6.7.8
!del, !delcomУдаляет команду!del !сервер
!aliasДобавляет второе имя с префиксом!alias !сервер !ip
!word, !словоДобавляет слово без префикса!word !сервер сервер, айпи
!unwordУбирает слово!unword !сервер айпи
  • Пользоваться этим могут стример и модераторы. Остальным бот откажет.
  • Префикс в имени можно не писать: !add сервер … и !add !сервер … — одно и то же.
  • Системную команду переопределить нельзя: бот скажет об этом прямо, а не промолчит.
  • Изменения видны в панели сразу и попадают в ленту событий — потом видно, кто что сделал.

Занятые триггеры

Триггеры встроенных команд и их алиасы нельзя занять своей командой — иначе опечатка могла бы незаметно отключить заказ музыки или клипы. Панель откажет и покажет, какая встроенная команда занимает этот триггер.