Twitch stream notify bot for Telegram with Docker
Telegram port of the Discord notifier: tokenless decapi.me status checks, photo+caption announce with inline link buttons, /stream_test command. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
# Twitch → Telegram Stream Notify Bot
|
||||
|
||||
Бот проверяет, вышел ли стример в эфир на Twitch, и при старте стрима
|
||||
отправляет оповещение в указанный чат/канал Telegram.
|
||||
Определение статуса работает через публичный [decapi.me](https://decapi.me) — **без Twitch-токенов**.
|
||||
|
||||
Это Telegram-версия [Discord-бота](../twitch_discord).
|
||||
|
||||
## Возможности
|
||||
|
||||
- Определение статуса стрима **без токенов Twitch** (публичный decapi.me)
|
||||
- Оповещение **один раз** при переходе оффлайн → онлайн (без спама, пока стрим идёт)
|
||||
- Сообщение с превью эфира, названием стрима и игрой
|
||||
- Inline-кнопки под сообщением: **Twitch** и **Все ссылки**
|
||||
- Команда `/stream_test` — тестовое оповещение
|
||||
|
||||
## Переменные окружения
|
||||
|
||||
| Переменная | Обязательна | Описание |
|
||||
|---|---|---|
|
||||
| `TELEGRAM_TOKEN` | ✅ | Токен бота из [@BotFather](https://t.me/BotFather) → `/newbot` |
|
||||
| `NOTIFY_CHAT_ID` | ✅ | Куда слать: `@username` канала или числовой id чата/группы (напр. `-1001234567890`) |
|
||||
| `TWITCH_LOGIN` | нет | Ник стримера из URL `twitch.tv/ЭТО`. По умолчанию `theraiwy` |
|
||||
| `CHECK_INTERVAL` | нет | Интервал проверки в секундах. По умолчанию `60` |
|
||||
|
||||
Единственный обязательный секрет — `TELEGRAM_TOKEN`.
|
||||
|
||||
## Настройка Telegram-бота
|
||||
|
||||
1. Создайте бота у [@BotFather](https://t.me/BotFather) командой `/newbot`, получите токен.
|
||||
2. **Добавьте бота в канал/группу как администратора** с правом отправлять сообщения —
|
||||
иначе он не сможет писать в `NOTIFY_CHAT_ID`.
|
||||
3. Укажите `NOTIFY_CHAT_ID`:
|
||||
- для публичного канала — его `@username` (напр. `@theraiwy_streams`);
|
||||
- для приватной группы/канала — числовой id (напр. через `@userinfobot` или
|
||||
`@getidsbot`), для супергрупп/каналов он вида `-100...`.
|
||||
|
||||
### Как узнать числовой id чата
|
||||
|
||||
Добавьте бота в чат, напишите там любое сообщение и загляните в логи бота, либо
|
||||
воспользуйтесь ботом `@getidsbot`.
|
||||
|
||||
## Запуск через Docker (рекомендуется)
|
||||
|
||||
```bash
|
||||
cp .env.example .env # заполнить TELEGRAM_TOKEN и NOTIFY_CHAT_ID
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
Логи: `docker compose logs -f`
|
||||
|
||||
### Деплой в DockHand
|
||||
|
||||
`docker-compose.yml` читает значения из окружения через `${...}`, поэтому `.env`
|
||||
в репозиторий не коммитится. В панели DockHand при создании стека задайте переменные
|
||||
в разделе **Environment**:
|
||||
|
||||
```
|
||||
TELEGRAM_TOKEN=твой_токен
|
||||
NOTIFY_CHAT_ID=@your_channel
|
||||
TWITCH_LOGIN=theraiwy
|
||||
CHECK_INTERVAL=60
|
||||
```
|
||||
|
||||
Обязательны только `TELEGRAM_TOKEN` и `NOTIFY_CHAT_ID` — у остальных есть значения по умолчанию.
|
||||
|
||||
## Запуск без Docker
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
cp .env.example .env # заполнить значения
|
||||
python bot.py
|
||||
```
|
||||
|
||||
## Команды
|
||||
|
||||
- `/stream_test` — отправить тестовое оповещение в целевой чат (помечается `🧪 [ТЕСТ]`).
|
||||
|
||||
## Как определяется стрим
|
||||
|
||||
Каждые `CHECK_INTERVAL` секунд бот опрашивает decapi.me (`uptime`, `title`, `game`).
|
||||
При переходе оффлайн → онлайн отправляется оповещение. Публичный сервис может изредка
|
||||
быть недоступен — в этом случае проверка пропускается и повторяется в следующем цикле,
|
||||
бот не падает. Рекомендуемый интервал — **30–60 секунд**.
|
||||
Reference in New Issue
Block a user