gothchat

Как устроен бот, который живёт в Twitch-чате

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

  1. TwitchEventSub + опрос
  2. ЧатIRC, сообщения
  3. Команды20+ своих и чужих
  4. Статистика!топ за стрим и месяц
  5. Telegramуведомление о стриме

Пуш-события Twitch дают скорость, а опрос раз в 30 секунд остаётся страховкой на случай, если WebSocket отвалился.

01

Узнать о начале эфира сразу

Бот подключён к Twitch EventSub по WebSocket и получает stream.online и stream.offline в момент события. Twitch обещает присылать хоть что-то не реже заданного интервала, поэтому бот сам следит за тишиной и переподключается, если сервер замолчал. Параллельно раз в 30 секунд идёт обычный опрос.

02

Сбой ещё не конец стрима

Проверка статуса знает три ответа: идёт, не идёт и «не удалось проверить». Временная ошибка API не принимается за конец эфира, поэтому статистика не обнуляется, а подписчики не получают лишних уведомлений.

03

Автозакреп

Когда стрим начинается, бот закрепляет в чате нужное сообщение через Helix API. Блокировка не даёт двум событиям сделать это дважды. Текст закрепа меняется командой прямо в чате.

04

Команды

Кубик, монетка, аптайм, сколько ты подписан, погода, курсы валют и криптовалют, прогнозы. Стример добавляет свои команды через !addcmd, и они сразу появляются в списке !команды.

!addcmd !донат Ссылка на донат: …
05

Статистика чата

Сообщения считаются только пока идёт эфир. !топ показывает лидеров за стрим, за период и за месяц, и месячный счёт начинается заново с первого числа. Данные сохраняются раз в минуту и при выключении. Каждый файл пишется через временную копию и переименование, поэтому сбой посреди записи не оставит битый файл.

06

Токены продлеваются сами

OAuth-токены Twitch проверяются каждые 5 минут и обновляются заранее. Если Twitch ответил 401, токен обновляется вне очереди, но не чаще раза в 30 секунд, чтобы пачка ошибок не устроила шторм запросов. Если обновить не вышло, админам приходит предупреждение.

07

Связка с Telegram

Зритель получает код в Telegram-боте, пишет его в Twitch-чат командой !link, и аккаунты связываются. После этого можно подписаться на начало стрима, и бот пришлёт уведомление, когда эфир стартует.

Python · Twitch IRC · Helix API · EventSub WebSocket · Telegram Bot API

Вернуться к проектам