85 lines
4.4 KiB
Markdown
85 lines
4.4 KiB
Markdown
# Twitch → Telegram Stream Notify Bot
|
||
|
||
Бот проверяет, вышел ли стример в эфир на Twitch, и при старте стрима
|
||
отправляет оповещение в указанный чат/канал Telegram.
|
||
Определение статуса работает через публичный [decapi.me](https://decapi.me) — **без Twitch-токенов**.
|
||
|
||
Это Telegram-версия [Discord-бота](https://gittheraiwy.theraiwy.top/theraiwy/twitch-discord-notify).
|
||
|
||
## Возможности
|
||
|
||
- Определение статуса стрима **без токенов 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 секунд**.
|