mirror of
https://github.com/qiyanaitsme/QIYANASAutoPumpLOLZ.git
synced 2026-09-23 04:37:43 +00:00
Add files via upload
This commit is contained in:
@@ -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` — ошибки от форума (например, «нужно подождать») видны по каждой теме
|
||||
|
||||
## 👤 Автор
|
||||
|
||||
|
||||
Reference in New Issue
Block a user