Add files via upload

This commit is contained in:
imletbruh
2026-05-31 18:24:39 +05:00
committed by GitHub
parent fcaa53b5ce
commit 9de1a40f1f
6 changed files with 1392 additions and 1227 deletions
+124 -178
View File
@@ -1,27 +1,41 @@
# 🚀 QIYANA AUTO-BUMP BOT для Lolz.live
Production-ready Telegram бот для автоматического поднятия тем на форуме Lolz.live с современной архитектурой, batch API и полной типизацией.
Telegram бот для автоматического поднятия тем на форуме Lolz.live. Batch API, динамические настройки (меняются на лету без перезапуска), персистентная статистика.
## ✨ Возможности
- **Добавление тем** - через запятую (12345, 67890, 11111) с batch API
- 🗑️ **Удаление тем** - через интерактивное меню
- 📋 **Список тем** - с датой последнего поднятия
- 🚀 **Ручное поднятие** - поднять все темы немедленно через batch API
- **Автоподнятие** - каждые N часов автоматически
- 📊 **Статистика** - успешность, количество поднятий, uptime
- 🔔 **Уведомления** - о каждом поднятии темы
- 🛡️ **Обработка ошибок** - rate limits, network failures, invalid tokens
- **Batch API** - до 10 тем за один запрос (10x быстрее)
- **Добавление тем** через запятую, названия загружаются сразу через batch API
- 🗑️ **Удаление тем** через интерактивное меню
- 📋 **Список тем** с названиями из БД и датой последнего поднятия
- 🚀 **Ручное поднятие** все темы немедленно через batch API
- 🔄 **Обновление названий** — синхронизация названий тем с форумом по кнопке
- **Автоподнятие** — каждые N часов автоматически
- 🛠️ **Динамические настройки** — интервал, batch size, автобамп меняются через меню без перезапуска
- 📊 **Статистика** — сохраняется в БД, не теряется при перезапуске
- 🔔 **Уведомления** — о результате каждого поднятия
- 🛡️ **Защита доступа** — ботом управляет только админ (по Telegram ID)
-**Batch API** — до 10 тем за один запрос
## 🎮 Интерфейс
```
┌─────────────────────────────────┐
Добавить темы │ 📋 Список тем
│ 🗑️ Удалить тему │ 🚀 Поднять темы
📊 Статистика │ 👤 Автор
└─────────────────────────────────┘
┌──────────────────────────────────────
Add topics │ 📋 List of topics
│ 🗑️ Delete topic │ 🚀 Bump topics
🔄 Refresh │ 📊 Statistics
│ 🛠️ Settings │ 👤 Author │
└──────────────────────────────────────┘
```
### Меню настроек
```
┌──────────────────────────────────┐
│ ⏰ Set Interval │
│ 📦 Set Batch Size │
│ 🔄 Toggle Auto-Bump │
│ ↩️ Back to Menu │
└──────────────────────────────────┘
```
## 📦 Установка
@@ -29,9 +43,9 @@ Production-ready Telegram бот для автоматического подн
### Требования
- Python 3.12+
- pip или uv
- pip
### 1. Установите зависимости
### 1. Клонируйте и установите зависимости
```bash
pip install -r requirements.txt
@@ -49,29 +63,32 @@ pip install -r requirements.txt
2. Создайте токен с правами `read`, `post`
3. Скопируйте токен
### 3. Настройте config.json
**Ваш Telegram ID:**
1. Напишите [@userinfobot](https://t.me/userinfobot) и получите свой ID
```json
{
"bot": {
"api_token": "1234567890:ABCdefGHIjklMNOpqrsTUVwxyz",
"img_url": "https://wallpapers-clan.com/wp-content/uploads/2024/04/dark-anime-girl-with-red-eyes-desktop-wallpaper-preview.jpg",
"author_url": "https://lolz.live/kqlol/"
},
"api": {
"base_url": "https://prod-api.lolz.live",
"auth_token": "eyJ0eXAiOiJKV1QiLCJhbGc...",
"batch_size": 10
},
"database": {
"path": "threads.db"
},
"scheduling": {
"bump_interval_hours": 12,
"bump_delay_seconds": 2,
"enable_auto_bump": true
}
}
### 3. Настройте `.env`
```env
# Telegram Bot
BOT_API_TOKEN=1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
BOT_IMG_URL=https://wallpapers-clan.com/wp-content/uploads/2024/04/dark-anime-girl-with-red-eyes-desktop-wallpaper-preview.jpg
BOT_AUTHOR_URL=https://lolz.live/kqlol/
# Lolz API
API_BASE_URL=https://prod-api.lolz.live
API_AUTH_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGc...
API_BATCH_SIZE=10
# Database
DB_PATH=threads.db
# Scheduling
BUMP_INTERVAL_HOURS=12
BUMP_DELAY_SECONDS=2
ENABLE_AUTO_BUMP=true
# Admin (ваш Telegram user ID)
ADMIN_USER_ID=123456789
```
### 4. Запустите бота
@@ -84,210 +101,139 @@ python app.py
### Добавление тем
1. Нажмите ** Добавить темы**
1. Нажмите ** Add topics**
2. Введите ID через запятую: `12345, 67890, 11111`
3. Бот автоматически получит названия тем через batch API (до 10 за запрос)
3. Бот сразу загрузит реальные названия через batch API и сохранит в БД
**Пример:**
```
Ввод: 9247920, 9247921, 9247922
### Обновление названий
Результат:
✅ 9247920 - Qiyanas steam idler
✅ 9247921 - Discord bot
✅ 9247922 - VPN service
```
1. Нажмите **🔄 Refresh**
2. Бот загрузит актуальные названия всех тем через batch API
3. Обновлённые названия сохранятся в БД
**Batch API преимущества:**
- Добавление 10 тем = 1 batch запрос вместо 10 обычных
- Добавление 25 тем = 3 batch запроса вместо 25 обычных
- Экономия API лимитов в 10 раз
Полезно, если темы переименовали на форуме — не нужно удалять и добавлять заново.
### Удаление темы
1. Нажмите **🗑️ Удалить тему**
1. Нажмите **🗑️ Delete topic**
2. Выберите тему из списка
3. Подтвердите удаление
### Ручное поднятие
1. Нажмите **🚀 Поднять темы**
2. Бот поднимет все темы через batch API (до 10 за запрос)
1. Нажмите **🚀 Bump topics**
2. Бот поднимет все темы через batch API
3. Получите уведомление о каждой теме:
```
[1/3] ✅ Тема 9247920 поднята успешно
[2/3] ✅ Тема 9247921 поднята успешно
[3/3] Тема 9247922 поднята успешно
[3/3] Тема 9247922: нужно подождать
```
**Batch API преимущества:**
- Поднятие 10 тем = 1 batch запрос (0.1 * 10 = 1 batch)
- Поднятие 50 тем = 5 batch запросов вместо 50 обычных
- Скорость выполнения увеличена в ~10 раз
### Просмотр списка
Нажмите **📋 Список тем** - покажет:
- ID темы
- Название темы
- Дату последнего поднятия
### Статистика
Нажмите **📊 Статистика** - покажет:
- Количество тем
- Готовые к поднятию
- Всего попыток
- Успешность (%)
- Настройки интервала
Нажмите **📊 Statistics** покажет:
- Количество тем (всего / готовы к поднятию)
- Статистика поднятий (всего / успешно / %)
- Дата последнего бампа
- Текущие настройки
- Время работы бота
## ⚙️ Настройки
Статистика сохраняется в SQLite и не сбрасывается при перезапуске.
### Интервал автоподнятия
## ⚙️ Настройки (меняются на лету)
В `config.json` измените `bump_interval_hours`:
Все настройки изменяются через кнопку **🛠️ Settings** без остановки бота:
| Значение | Интервал |
|----------|----------|
| `12` | 12 часов |
| `6` | 6 часов |
| `24` | 24 часа |
| Кнопка | Что меняет | Применяется |
|--------|-----------|-------------|
| ⏰ Set Interval | Интервал автобампа (часы) | Мгновенно, перезапускает цикл |
| 📦 Set Batch Size | Размер batch (1–10) | Мгновенно для следующих запросов |
| 🔄 Toggle Auto-Bump | Включить/выключить автобамп | Мгновенно |
### Размер batch запросов
В `config.json` измените `batch_size`:
| Значение | Описание |
|----------|----------|
| `10` | Максимум (рекомендуется) - 10 тем за запрос |
| `5` | Средний - 5 тем за запрос |
| `1` | Отключить batch - по 1 теме |
**Примечание:** Batch API Lolz.live поддерживает до 10 запросов в одном batch. Каждый запрос = 0.1 batch, итого 10 запросов = 1 полный batch.
### Тестовый режим (5 минут)
```json
"scheduling": {
"bump_interval_hours": 0.0833,
"bump_delay_seconds": 1,
"enable_auto_bump": true
}
```
Настройки хранятся в БД и сохраняются между перезапусками.
## 🔄 Как работает автоподнятие
1. Запускаете бота
2. Вручную поднимаете темы через 🚀 (первый раз)
3. Бот ждет указанный интервал (например, 12 часов)
4. Автоматически поднимает темы, у которых прошло 12+ часов
5. Повторяет каждые 12 часов
3. Бот ждёт указанный интервал (например, 12 часов)
4. Автоматически поднимает темы, у которых прошёл интервал
5. Цикл повторяется
**Пример:**
```
00:00 - Запуск бота
00:05 - Вы вручную нажали "Поднять темы"
12:05 - Автоматическое поднятие
24:05 - Автоматическое поднятие
36:05 - Автоматическое поднятие
00:00 Запуск бота
00:05 — Ручное поднятие
12:05 Автоматическое поднятие
24:05 Автоматическое поднятие
```
## 🏗️ Архитектура
### Модульная структура
```
app.py # Main bot logic with FSM
config_manager.py # Type-safe configuration
api_client.py # Lolz batch API client with retry logic
database.py # SQLite with connection pooling
app.py # Бот: хендлеры, middleware аутентификации, авто-бамп
config_manager.py # Загрузка и валидация .env
api_client.py # Lolz batch API клиент с retry логикой
database.py # SQLite: темы, настройки, статистика
```
### Ключевые улучшения
### Что внутри БД (SQLite через aiosqlite)
- **Batch API**: До 10 тем за один запрос (10x эффективнее)
- **Type Safety**: Полная типизация с Python 3.12+ (PEP 695)
- **SOLID Principles**: Каждый модуль имеет одну ответственность
- **Connection Pooling**: Эффективное управление соединениями
- **Error Handling**: Специфичные исключения для каждого случая
- **Async Context Managers**: Автоматическая очистка ресурсов
- **Immutable Config**: Frozen dataclasses для безопасности
- **Logging**: Структурированные логи с rotation
- **Graceful Shutdown**: Корректное завершение всех задач
| Таблица | Назначение |
|---------|-----------|
| `threads` | Темы: ID, название, дата последнего бампа |
| `settings` | Динамические настройки (интервал, batch_size, автобамп) |
| `bump_stats` | Персистентная статистика (всего/успешно/последний бамп) |
### Batch API Implementation
### Ключевые особенности
**Как работает:**
```python
# Старый способ (10 запросов):
for thread_id in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
POST /threads/{thread_id}/bump
# Новый способ (1 batch запрос):
POST /batch
[
{"uri": "/threads/1/bump", "method": "POST"},
{"uri": "/threads/2/bump", "method": "POST"},
...
{"uri": "/threads/10/bump", "method": "POST"}
]
```
**Преимущества:**
- Экономия API лимитов в 10 раз
- Скорость выполнения увеличена в ~10 раз
- Меньше нагрузка на сеть
- Атомарная обработка результатов
### Edge Cases
- Rate limiting от API (обработка в batch ответах)
- Network timeouts (retry для batch запросов)
- Invalid tokens (валидация перед batch)
- Partial batch failures (индивидуальная обработка каждого результата)
- Concurrent access (connection pooling)
- Database locks (async context managers)
- Memory leaks prevention (frozen dataclasses, proper cleanup)
- **Batch API** — до 10 тем за запрос (экономия лимитов в 10 раз)
- **Динамические настройки** — меняются в БД, подхватываются ботом мгновенно
- **Персистентная статистика** — не теряется при перезапуске
- **Аутентификация** — middleware проверяет Telegram ID админа
- **Async context managers** — автоматическая очистка ресурсов
- **Frozen dataclasses с `__slots__`** — иммутабельность и экономия памяти
- **WAL-режим SQLite** — лучшая конкурентность
## 📝 Логи
- **Консоль** - основные события
- **bot.log** - детальные логи с traceback
- **Консоль** основные события
- **bot.log** детальные логи с traceback
## 🔧 Технические детали
## 🔧 Зависимости
- **Python**: 3.12+
- **aiogram**: 3.4.1
- **aiohttp**: 3.10.0+
- **aiogram**: 3.15.0
- **aiohttp**: bundled with aiogram
- **aiosqlite**: 0.20.0+
- **База данных**: SQLite с индексами
- **API**: https://prod-api.lolz.live
- **Batch API**: До 10 запросов за 1 batch (каждый = 0.1 batch)
- **python-dotenv**: 1.0.0+
## 🐛 Troubleshooting
### Ошибка: "bot.api_token not configured"
### Ошибка: «BOT_API_TOKEN not configured»
Заполните `config.json` реальными токенами.
Проверьте `.env` — заполните `BOT_API_TOKEN` реальным токеном от @BotFather.
### Ошибка: "Invalid API token"
### Ошибка: «ADMIN_USER_ID not configured»
Укажите в `.env` ваш Telegram ID (получить через @userinfobot).
### Ошибка: «API_AUTH_TOKEN not configured»
Проверьте токен на [zelenka.guru/account/api](https://zelenka.guru/account/api).
### Ошибка: "Network error"
### Ошибка: «⛔ Доступ запрещён»
Проверьте интернет-соединение и доступность API.
Ботом может управлять только пользователь, чей Telegram ID указан в `ADMIN_USER_ID`.
### Темы не поднимаются автоматически
1. Проверьте `enable_auto_bump: true` в config.json
1. Проверьте, что автобамп включён (🔄 Toggle Auto-Bump)
2. Сделайте первое поднятие вручную через 🚀
3. Проверьте логи в bot.log
3. Проверьте логи в `bot.log`
## 👤 Автор
[QIYANA](https://lolz.live/kqlol/) - создатель бота
[QIYANA](https://lolz.live/kqlol/)
---