AutoShoutout

AutoShoutout — автоматическая отправка приветственного / рекламного сообщения в чат или /announce, когда определённый канал появляется у вас в чате (или рейдит вас).

Зачем

  • Быстро выделить знакомых стримеров, не забывая вручную.
  • Продвинуть их канал (автоматический призыв подписаться).
  • Снизить когнитивную нагрузку во время активного чата или рейда.

Как работает

  1. Вы добавляете логины каналов, для которых нужен shoutout.
  2. Когда бот впервые за текущий стрим видит сообщение пользователя из списка (или событие рейда), сервис формирует текст по шаблону.
  3. Отправляет в чат: либо обычное сообщение, либо /announce (если разрешено).
  4. Повторно тому же каналу в рамках текущей стрим‑сессии сообщение не отправляется (анти‑спам).

Стрим‑сессия

Система отслеживает 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: где настраивать

  1. Перейдите на Dashboard.
  2. Нажмите карточку AutoShoutout.
  3. В форме введите логин и текст шаблона.
  4. Нажмите «Добавить» — запись появится в таблице.
  5. В таблице доступны: редактирование (✏), удаление (🗑), фильтрация (строка поиска над списком).

Жизненный цикл события

  1. Сообщение или рейд → чат обработчик вызывает handle_autoshoutout(channel_login, triggering_login).
  2. Сервис проверяет: есть ли активный TwitchAccount и StreamSession.
  3. Проверяет что (user_id, session_id, target_login) ещё не обслужен.
  4. Проверяет минутный лимит.
  5. Находит активную модель AutoShoutout.
  6. Подставляет {user} и отправляет через Helix.
  7. Запоминает факт отправки до конца сессии.

Коды причин (для логов)

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