Add files via upload

This commit is contained in:
imletbruh
2026-09-06 09:42:56 +05:00
committed by GitHub
parent d4436a0480
commit 134fab488b
5 changed files with 729 additions and 567 deletions
+56 -57
View File
@@ -1,43 +1,36 @@
# 🚀 QIYANA AUTO-BUMP BOT для Lolz.live
Telegram бот для автоматического поднятия тем на форуме Lolz.live. Batch API, динамические настройки (меняются на лету без перезапуска), персистентная статистика.
Telegram бот для автоматического поднятия тем на форуме Lolz.live. Batch API, тикающий планировщик, динамические настройки (меняются на лету без перезапуска), персистентная статистика.
Клиент сверен с официальной спецификацией API (`forum.json` — Lolzteam Public API v1.1.44a).
## ✨ Возможности
- **Добавление тем** — через запятую, названия загружаются сразу через batch API
- 📥 **Мои темы** — выбор своих тем прямо с форума (пагинация, тап — добавить), без ручного ввода ID
- 🗑️ **Удаление тем** — через интерактивное меню
- 📋 **Список тем**с названиями из БД и датой последнего поднятия
- 📋 **Список тем** — с названиями и датой последнего поднятия
- 🚀 **Ручное поднятие** — все темы немедленно через batch API
- 🔄 **Обновление названий** — синхронизация названий тем с форумом по кнопке
-**Автоподнятие**каждые N часов автоматически
- 🛠️ **Динамические настройки** — интервал, batch size, автобамп меняются через меню без перезапуска
-**Автоподнятие**тикающий планировщик (каждые 60 секунд проверяет, какие темы «созрели»), настройки применяются без перезапуска
- 🛠️ **Динамические настройки** — интервал, batch size, автобамп меняются через меню
- 📊 **Статистика** — сохраняется в БД, не теряется при перезапуске
- 🔔 **Уведомления** — о результате каждого поднятия
- 🛡️ **Защита доступа** — ботом управляет только админ (по Telegram ID)
-**Batch API** — до 10 тем за один запрос
-**Batch API** — до 10 тем за один запрос, обработка 429 и rate-limit заголовков
## 🎮 Интерфейс
```
┌──────────────────────────────────────┐
Add topics │ 📋 List of topics │
│ 🗑️ Delete topic │ 🚀 Bump topics
│ 🔄 Refresh │ 📊 Statistics
│ 🛠️ Settings │ 👤 Author
Add topics │ 📥 My topics
📋 List of topics│ 🗑️ Delete topic │
🚀 Bump topics │ 🔄 Refresh │
📊 Statistics │ 🛠️ Settings │
│ 👤 Author │
└──────────────────────────────────────┘
```
### Меню настроек
```
┌──────────────────────────────────┐
│ ⏰ Set Interval │
│ 📦 Set Batch Size │
│ 🔄 Toggle Auto-Bump │
│ ↩️ Back to Menu │
└──────────────────────────────────┘
```
## 📦 Установка
### Требования
@@ -59,8 +52,8 @@ pip install -r requirements.txt
3. Скопируйте токен
**Lolz API Token:**
1. Перейдите на [zelenka.guru/account/api](https://zelenka.guru/account/api)
2. Создайте токен с правами `read`, `post`
1. Перейдите на [lolz.live/account/api](https://lolz.live/account/api)
2. Создайте токен с правами (scopes) `read`, `post`
3. Скопируйте токен
**Ваш Telegram ID:**
@@ -75,7 +68,8 @@ BOT_IMG_URL=https://wallpapers-clan.com/wp-content/uploads/2024/04/dark-anime-gi
BOT_AUTHOR_URL=https://lolz.live/kqlol/
# Lolz API
API_BASE_URL=https://prod-api.lolz.live
# Официальные серверы: https://api.lolz.team, https://api.lolz.live, https://api.zelenka.guru
API_BASE_URL=https://api.lolz.live
API_AUTH_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGc...
API_BATCH_SIZE=10
@@ -83,40 +77,34 @@ API_BATCH_SIZE=10
DB_PATH=threads.db
# Scheduling
BUMP_INTERVAL_HOURS=12
BUMP_DELAY_SECONDS=2
BUMP_INTERVAL_MINUTES=5
BUMP_DELAY_SECONDS=1
ENABLE_AUTO_BUMP=true
SCHEDULER_TICK_SECONDS=60
# Admin (ваш Telegram user ID)
ADMIN_USER_ID=123456789
```
> `BOT_IMG_URL` можно оставить пустым — бот отправит меню текстом.
### 4. Запустите бота
```bash
python app.py
```
На старте бот проверяет токен через `GET /users/me` и пишет в лог, от какого аккаунта работает.
## 📖 Использование
### Добавление тем
1. Нажмите ** Add topics**
2. Введите ID через запятую: `12345, 67890, 11111`
3. Бот сразу загрузит реальные названия через batch API и сохранит в БД
3. Бот загрузит названия через batch API и сохранит в БД
### Обновление названий
1. Нажмите **🔄 Refresh**
2. Бот загрузит актуальные названия всех тем через batch API
3. Обновлённые названия сохранятся в БД
Полезно, если темы переименовали на форуме — не нужно удалять и добавлять заново.
### Удаление темы
1. Нажмите **🗑️ Delete topic**
2. Выберите тему из списка
Либо нажмите **📥 My topics** — бот покажет ваши темы с форума (по `GET /threads?tab=mythreads`) с пагинацией; нажмите на тему, чтобы добавить её.
### Ручное поднятие
@@ -129,6 +117,10 @@ python app.py
[3/3] ❌ Тема 9247922: нужно подождать
```
### Обновление названий (🔄 Refresh)
Бот загружает актуальные названия тем с форума. Полезно, если темы переименовали.
### Статистика
Нажмите **📊 Statistics** — покажет:
@@ -142,11 +134,9 @@ python app.py
## ⚙️ Настройки (меняются на лету)
Все настройки изменяются через кнопку **🛠️ Settings** без остановки бота:
| Кнопка | Что меняет | Применяется |
|--------|-----------|-------------|
| ⏰ Set Interval | Интервал автобампа (часы) | Мгновенно, перезапускает цикл |
| ⏰ Set Interval | Интервал автобампа в минутах (`5`, `720`, …) | На следующем тике планировщика (до 60 с) |
| 📦 Set Batch Size | Размер batch (1–10) | Мгновенно для следующих запросов |
| 🔄 Toggle Auto-Bump | Включить/выключить автобамп | Мгновенно |
@@ -154,25 +144,34 @@ python app.py
## 🔄 Как работает автоподнятие
1. Запускаете бота
2. Вручную поднимаете темы через 🚀 (первый раз)
3. Бот ждёт указанный интервал (например, 12 часов)
4. Автоматически поднимает темы, у которых прошёл интервал
5. Цикл повторяется
Планировщик **тикающий**: каждые `SCHEDULER_TICK_SECONDS` (по умолчанию 60 с) бот читает настройки из БД, находит темы, у которых прошёл интервал, и поднимает их. Плюсы:
- темы, добавленные позже, подхватываются в ближайший тик;
- смена интервала применяется без перезапуска и без «потери фазы»;
- бот бампает ровно по таймеру, без обращений к форуму перед бампом.
```
00:00 — Запуск бота
00:00 — Запуск бота (тик каждые 60с)
00:05 — Ручное поднятие
12:05 — Автоматическое поднятие
24:05 — Автоматическое поднятие
00:10 — Первый тик, где тема «созрела» → автоподнятие
```
## 🌐 Лимиты API (по спецификации)
| Эндпоинт | Лимит |
|----------|-------|
| GET-запросы | 300 / минуту |
| Не-GET (в т.ч. bump) | 30 / минуту |
| `/batch` | 20 / минуту (независимый бакет) |
При превышении API возвращает `429` и заголовки `X-RateLimit-*`. Бот читает их и ждёт сброса окна, а между batch-вызовами соблюдает паузу `BUMP_DELAY_SECONDS`.
## 🏗️ Архитектура
```
app.py # Бот: хендлеры, middleware аутентификации, авто-бамп
app.py # Бот: хендлеры, middleware аутентификации, тикающий авто-бамп
config_manager.py # Загрузка и валидация .env
api_client.py # Lolz batch API клиент с retry логикой
api_client.py # Lolz batch API клиент: union-парсер ответов, rate-limit, retry
database.py # SQLite: темы, настройки, статистика
```
@@ -186,12 +185,12 @@ database.py # SQLite: темы, настройки, статистика
### Ключевые особенности
- **Batch API** — до 10 тем за запрос (экономия лимитов в 10 раз)
- **Динамические настройки** — меняются в БД, подхватываются ботом мгновенно
- **Batch API** — до 10 тем за запрос; job'ы ключуются явным `id` (по спецификации)
- **Union-парсер bump-ответов** — понимает и документированную форму `{status, message, system_info}`, и «пустой ответ = успех», и legacy `_job_result`
- **Тикающий планировщик** — настройки применяются без перезапуска
- **Ретраи только там, где есть смысл** — сеть/5xx/429; 4xx не ретраятся
- **Персистентная статистика** — не теряется при перезапуске
- **Аутентификация** — middleware проверяет Telegram ID админа
- **Async context managers** — автоматическая очистка ресурсов
- **Frozen dataclasses с `__slots__`** — иммутабельность и экономия памяти
- **WAL-режим SQLite** — лучшая конкурентность
## 📝 Логи
@@ -219,7 +218,7 @@ database.py # SQLite: темы, настройки, статистика
### Ошибка: «API_AUTH_TOKEN not configured»
Проверьте токен на [zelenka.guru/account/api](https://zelenka.guru/account/api).
Проверьте токен на [lolz.live/account/api](https://lolz.live/account/api). В логе при старте будет `API token validation failed`, если токен невалиден.
### Ошибка: «⛔ Доступ запрещён»
@@ -229,7 +228,7 @@ database.py # SQLite: темы, настройки, статистика
1. Проверьте, что автобамп включён (🔄 Toggle Auto-Bump)
2. Сделайте первое поднятие вручную через 🚀
3. Проверьте логи в `bot.log`
3. Проверьте логи в `bot.log` — ошибки от форума (например, «нужно подождать») видны по каждой теме
## 👤 Автор