AutoShoutout
AutoShoutout — автоматическая отправка приветственного / рекламного сообщения в чат или /announce
, когда определённый канал появляется у вас в чате (или рейдит вас).
Зачем
- Быстро выделить знакомых стримеров, не забывая вручную.
- Продвинуть их канал (автоматический призыв подписаться).
- Снизить когнитивную нагрузку во время активного чата или рейда.
Как работает
- Вы добавляете логины каналов, для которых нужен shoutout.
- Когда бот впервые за текущий стрим видит сообщение пользователя из списка (или событие рейда), сервис формирует текст по шаблону.
- Отправляет в чат: либо обычное сообщение, либо
/announce
(если разрешено). - Повторно тому же каналу в рамках текущей стрим‑сессии сообщение не отправляется (анти‑спам).
Стрим‑сессия
Система отслеживает StreamSession (активная = ended_at IS NULL
). Для каждой пары (ваш канал, target_login) auto shoutout срабатывает максимум 1 раз за сессию. После завершения стрима (закрытия сессии) — лимит обнуляется.
Анти‑спам лимиты
- Глобально: не более
ASO_MAX_PER_MINUTE
(по умолчанию 5) авто‑сообщений в минуту. - Пер‑таргет: 1 раз за стрим‑сессию.
- Если лимит превышен — событие просто пропускается (в лог можно увидеть причину).
Этого достаточно чтобы большой рейд из списка не заспамил чат.
Шаблон сообщения
Поддерживается плейсхолдер {user}
— логин пришедшего канала. Пример:
Залетел {user}! Подпишитесь если не знакомы ❤
Можно использовать эмодзи, любые символы Twitch чата. Ограничение — стандартные лимиты Twitch (длина, антиспам). Случайные конструкции или DSL здесь не парсятся: строка плоская, заменяется только {user}
.
Режим /announce
Если у авторизованного токена есть scope channel:manage:announcements
, система может попытаться отправить сообщение через /announce
. Это повышает видимость.
- Проверка скопов выполняется на лету.
- Если анонс не удался (ошибка API) — выполняется fallback на обычное чат‑сообщение.
UI: где настраивать
- Перейдите на Dashboard.
- Нажмите карточку AutoShoutout.
- В форме введите логин и текст шаблона.
- Нажмите «Добавить» — запись появится в таблице.
- В таблице доступны: редактирование (✏), удаление (🗑), фильтрация (строка поиска над списком).
Жизненный цикл события
- Сообщение или рейд → чат обработчик вызывает
handle_autoshoutout(channel_login, triggering_login)
. - Сервис проверяет: есть ли активный TwitchAccount и StreamSession.
- Проверяет что (user_id, session_id, target_login) ещё не обслужен.
- Проверяет минутный лимит.
- Находит активную модель AutoShoutout.
- Подставляет
{user}
и отправляет через Helix. - Запоминает факт отправки до конца сессии.
Коды причин (для логов)
reason | Описание |
---|---|
sent | Сообщение отправлено |
not_listed | Нет активной записи для target |
already_sent_session | Уже было в этой сессии |
rate_limited | Превышен минутный лимит |
send_failed | Ошибка отправки в Helix |
no_channel | Не найден TwitchAccount |
Планируемые улучшения
- UI для переключения announce / обычное сообщение.
- Персональный cooldown (минуты) вместо «1 за сессию».
- Цвет / тип анонса (если Twitch расширит API).
- Импорт/экспорт списка (CSV/JSON).
FAQ / Проблемы
Почему не сработал shoutout?
Проверьте reason в логах. Часто: not_listed
или already_sent_session
.
Хочу повтор через час
Пока что модель: 1 раз за сессию. В будущем добавим настраиваемый TTL.
Спам при большом рейде
Лимит в минуту + один раз на target уже предотвращают каскад — убедитесь что ASO_MAX_PER_MINUTE
не слишком высок.
Версия: AutoShoutout docs v1