Документация: как работает Tg-notify.bot (подсистемы, поток, API, состояние инстанса)
- README: расширен раздел Tg-notify.bot — три подсистемы, поток привязка/подписка/CheckAll, полная таблица конфига (+kp_api_key, +tmdb_lang), быстрый старт, команды, HTTP API, фактическое состояние инстанса (bot_token пуст, /lite/mirage=disable, /lite/collaps=503) - AGENT.md: правило 11 — эксплуатация бота, диагностика, данные database/tgnotify
This commit is contained in:
@@ -112,3 +112,11 @@ docker exec lampac sh -c '...' # осмотр состояния в конте
|
|||||||
### 10. Безопасность (не публиковать)
|
### 10. Безопасность (не публиковать)
|
||||||
|
|
||||||
`config/passwd`, cookie `accspasswd`, заголовок `lcrqpasswd`, `bot_token` в `TelegramBot`. Маршруты `/adminpanel`, `/weblog`, `Tracks`, `Catalog`, `DLNA`, proxy-модули — только для доверенной сети без WAF не открывать.
|
`config/passwd`, cookie `accspasswd`, заголовок `lcrqpasswd`, `bot_token` в `TelegramBot`. Маршруты `/adminpanel`, `/weblog`, `Tracks`, `Catalog`, `DLNA`, proxy-модули — только для доверенной сети без WAF не открывать.
|
||||||
|
|
||||||
|
### 11. Tg-notify.bot (Telegram-бот)
|
||||||
|
|
||||||
|
- Механика: long polling по `TelegramBot.bot_token`; если токен пуст — polling не стартует (в логе `[TelegramBot] Установите bot_token…`, сервер работает). После правки секции: `docker compose restart lampac`.
|
||||||
|
- Три подсистемы: трекер серий (Trakt→TMDB), трекер озвучек (параллельно Mirage/Collaps/VideoHub через `lampac_host`: `/lite/mirage`, `/lite/collaps`, `/lite/cdnvideohub`), клиентский плагин `tg-notify.js` (вкладка «TG Подписки», перехват 🔔). Полный разбор — в README.md.
|
||||||
|
- Данные подписок: `database/tgnotify/{users.json,subscriptions.json}` (том `./database/`, в .gitignore). Не «чинить» вручную — это живые данные бота.
|
||||||
|
- Диагностика: `GET /tg-notify.js` (200 без авторизации), `GET /api/tg/voices` (200), `/api/tg/*` остальной — требует `user_uid`. Озвучки могут не работать, если балансеры недоступны (проверить `GET /lite/mirage` — тело `disable`/ошибка, `/lite/collaps` — 503); тогда уведомления приходят только о выходе серий.
|
||||||
|
- `kp_api_key` опционален: без него VideoHub резолвит `kinopoisk_id` только через мост `/externalids` (покрытие ~40%), иначе — молча пропускается, Mirage/Collaps работают.
|
||||||
|
|||||||
@@ -113,21 +113,83 @@ rm -rf cache/static/59 # bucket /extensions; либо rm -rf cache/static
|
|||||||
|
|
||||||
Перезапуск контейнера при этом **не требуется** (маршрут читает файл при каждом запросе, если нет кеш-записи).
|
Перезапуск контейнера при этом **не требуется** (маршрут читает файл при каждом запросе, если нет кеш-записи).
|
||||||
|
|
||||||
## Tg-notify.bot: настройка бота
|
## Tg-notify.bot: Telegram-бот уведомлений о новых сериях
|
||||||
|
|
||||||
Секция `TelegramBot` в `config/init.conf`:
|
Фоновый Telegram-бот (long polling): пользователь подписывается на сериал прямо из карточки Lampa, бот отслеживает выход новых эпизодов и появление выбранной озвучки и шлёт в Telegram уведомление с обложкой, номером серии и описанием из TMDB.
|
||||||
|
|
||||||
|
Модуль объединяет три подсистемы:
|
||||||
|
1. **Трекер новых серий** — Trakt API (если задан `trakt_client_id`), иначе TMDB.
|
||||||
|
2. **Трекер озвучек** — параллельный опрос встроенных балансиров **Mirage**, **Collaps** и **VideoHub** через `lampac_host` (`/lite/mirage`, `/lite/collaps`, `/lite/cdnvideohub`); берётся максимальный эпизод из всех источников.
|
||||||
|
3. **Клиентский плагин** `tg-notify.js` — вкладка «TG Подписки», перехват кнопки 🔔 в карточке, меню выбора озвучки.
|
||||||
|
|
||||||
|
### Как это работает (поток)
|
||||||
|
|
||||||
|
1. **Привязка аккаунта** — во вкладке «TG Подписки» в Lampa выдаётся deep-link `/start link_{uid}` (для UID вида email — `/start link64_{base64url(uid)}`). После `/start` бот сохраняет связку `chat_id ↔ lampac_uid` в `database/tgnotify/users.json`; подписки становятся общими для всех устройств этого аккаунта.
|
||||||
|
2. **Подписка** — в карточке сериала кнопка 🔔 перехватывается плагином, показывается меню озвучек (`GET /api/tg/voices`), выбор уходит на `POST /api/tg/subscribe` и сохраняется в `subscriptions.json`.
|
||||||
|
3. **Фоновый цикл `CheckAll`** — раз в `check_interval_minutes` (первый прогон — через 2 минуты после старта, вручную — `/check`): новые серии через Trakt→TMDB; если выбрана конкретная озвучка — параллельно Mirage + Collaps + VideoHub.
|
||||||
|
4. **Уведомление** — сообщение вида:
|
||||||
|
|
||||||
|
```
|
||||||
|
🎬 Название
|
||||||
|
🎙 Озвучка
|
||||||
|
📺 S05E08 — Название эпизода
|
||||||
|
|
||||||
|
Описание (до 300 символов)
|
||||||
|
```
|
||||||
|
|
||||||
|
с обложкой кадра из TMDB (`still_path`), если есть.
|
||||||
|
|
||||||
|
### Конфигурация (секция `TelegramBot` в `config/init.conf`)
|
||||||
|
|
||||||
| Поле | Назначение |
|
| Поле | Назначение |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `bot_token` | Токен от [@BotFather](https://t.me/BotFather). **Обязателен** — без него long polling не стартует (в логе будет предупреждение, сервер продолжит работать) |
|
| `bot_token` | Токен от [@BotFather](https://t.me/BotFather). **Обязателен** — без него long polling не стартует (в логе предупреждение, сервер работает) |
|
||||||
| `tmdb_api_key` | Ключ TMDB v3 для обложек и описаний эпизодов |
|
| `tmdb_api_key` | Ключ TMDB v3: обложки, описания эпизодов, определение актуального сезона |
|
||||||
| `trakt_client_id` | Client ID Trakt (основной источник новых серий; если пуст — только TMDB) |
|
| `trakt_client_id` | Client ID Trakt; основной источник новых серий (если пуст — только TMDB) |
|
||||||
| `lampac_host` | Базовый URL Lampac, по умолчанию `http://127.0.0.1:9118` |
|
| `lampac_host` | Базовый URL Lampac для запросов к балансерам; в Docker — `http://127.0.0.1:9118` |
|
||||||
| `lampac_token` | Токен `accsdb`, нужен если включена защита |
|
| `lampac_token` | Токен `accsdb`; обязателен, если включена защита (иначе балансеры вернут ошибку входа) |
|
||||||
| `check_interval_minutes` | Период фоновой проверки (дефолт 60, первый прогон через 2 минуты) |
|
| `kp_api_key` | Ключ kinopoiskapiunofficial.tech — резолвинг `tmdb_id → kinopoisk_id` по названию для VideoHub (опционально; без него покрытие ~40% через мост `/externalids`) |
|
||||||
| `data_dir` | Каталог подписок, дефолт `database/tgnotify` |
|
| `check_interval_minutes` | Период фоновой проверки (дефолт 60) |
|
||||||
|
| `tmdb_lang` | Язык метаданных TMDB (дефолт `ru-RU`, фоллбэк `en-US`) |
|
||||||
|
| `data_dir` | Каталог `users.json`/`subscriptions.json` (дефолт `database/tgnotify` — у нас это том `./database/`, переживает рестарты) |
|
||||||
|
|
||||||
Привязка аккаунта: в Lampa во вкладке «TG Подписки» — deep-link `/start link_{uid}`. Команды бота: `/start`, `/list`, `/check`, `/help`, `/unlink`.
|
### Быстрый старт
|
||||||
|
|
||||||
|
1. [@BotFather](https://t.me/BotFather) → `/newbot` → получить токен.
|
||||||
|
2. `config/init.conf` → `TelegramBot.bot_token` = токен.
|
||||||
|
3. `docker compose restart lampac` (по желанию — заполнить `tmdb_api_key` и `trakt_client_id`).
|
||||||
|
4. В Lampa (http://localhost:9118) вкладка «TG Подписки» → deep-link → `/start` у бота.
|
||||||
|
5. В карточке сериала — 🔔, выбрать озвучку (или «без озвучки» — уведомление о самом факте выхода серии).
|
||||||
|
|
||||||
|
### Команды бота
|
||||||
|
|
||||||
|
| Команда | Действие |
|
||||||
|
|---|---|
|
||||||
|
| `/start` | Приветствие; `/start link_{uid}` — привязка аккаунта |
|
||||||
|
| `/list` | Список активных подписок |
|
||||||
|
| `/check` | Принудительная проверка в фоне |
|
||||||
|
| `/help` | Справка |
|
||||||
|
| `/unlink` | Отвязать аккаунт |
|
||||||
|
|
||||||
|
### HTTP API
|
||||||
|
|
||||||
|
| Метод | Маршрут | Назначение |
|
||||||
|
|---|---|---|
|
||||||
|
| `GET` | `/tg-notify.js` | Раздача клиентского плагина (AllowAnonymous) |
|
||||||
|
| `POST` | `/api/tg/subscribe` | Подписка на сериал/озвучку |
|
||||||
|
| `POST` | `/api/tg/unsubscribe` | Отписка |
|
||||||
|
| `GET` | `/api/tg/status?tmdb_id=` | Статус подписки текущего пользователя |
|
||||||
|
| `GET` | `/api/tg/voices?title=&year=&season=&tmdb_id=` | Доступные озвучки (Mirage + Collaps + VideoHub) |
|
||||||
|
| `GET` | `/api/tg/link` | Deep-link для привязки бота |
|
||||||
|
| `GET` | `/api/tg/subscriptions` | Все подписки пользователя с метаданными |
|
||||||
|
|
||||||
|
Все маршруты, кроме `/tg-notify.js` и `/api/tg/voices`, требуют `requestInfo.user_uid` (вход в аккаунт).
|
||||||
|
|
||||||
|
### Состояние на нашем инстансе
|
||||||
|
|
||||||
|
- Модуль загружен, `/tg-notify.js` → 200, плагин уже в `LampaWeb.customPlugins`, вкладка «TG Подписки» видна.
|
||||||
|
- `bot_token` **пуст** → long polling не работает (лог: `[TelegramBot] Установите bot_token…`); уведомления придут только после заполнения токена.
|
||||||
|
- Трекинг озвучек зависит от балансиров: на текущий момент `GET /lite/mirage` → тело `disable`, `GET /lite/collaps` → `503` — до тех пор, пока они не будут доступны (или не включится `lampac_token` при защите), бот будет уведомлять только о выходе серий (TMDB/Trakt).
|
||||||
|
|
||||||
## Обновление Lampac
|
## Обновление Lampac
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user