# 🚀 QIYANA AUTO-BUMP BOT для Lolz.live Telegram бот для автоматического поднятия тем на форуме Lolz.live. Batch API, динамические настройки (меняются на лету без перезапуска), персистентная статистика. ## ✨ Возможности - ➕ **Добавление тем** — через запятую, названия загружаются сразу через 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 │ └──────────────────────────────────┘ ``` ## 📦 Установка ### Требования - Python 3.12+ - pip ### 1. Клонируйте и установите зависимости ```bash pip install -r requirements.txt ``` ### 2. Получите токены **Telegram Bot Token:** 1. Напишите [@BotFather](https://t.me/BotFather) 2. Создайте бота: `/newbot` 3. Скопируйте токен **Lolz API Token:** 1. Перейдите на [zelenka.guru/account/api](https://zelenka.guru/account/api) 2. Создайте токен с правами `read`, `post` 3. Скопируйте токен **Ваш Telegram ID:** 1. Напишите [@userinfobot](https://t.me/userinfobot) и получите свой ID ### 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. Запустите бота ```bash python app.py ``` ## 📖 Использование ### Добавление тем 1. Нажмите **➕ Add topics** 2. Введите ID через запятую: `12345, 67890, 11111` 3. Бот сразу загрузит реальные названия через batch API и сохранит в БД ### Обновление названий 1. Нажмите **🔄 Refresh** 2. Бот загрузит актуальные названия всех тем через batch API 3. Обновлённые названия сохранятся в БД Полезно, если темы переименовали на форуме — не нужно удалять и добавлять заново. ### Удаление темы 1. Нажмите **🗑️ Delete topic** 2. Выберите тему из списка ### Ручное поднятие 1. Нажмите **🚀 Bump topics** 2. Бот поднимет все темы через batch API 3. Получите уведомление о каждой теме: ``` [1/3] ✅ Тема 9247920 поднята успешно [2/3] ✅ Тема 9247921 поднята успешно [3/3] ❌ Тема 9247922: нужно подождать ``` ### Статистика Нажмите **📊 Statistics** — покажет: - Количество тем (всего / готовы к поднятию) - Статистика поднятий (всего / успешно / %) - Дата последнего бампа - Текущие настройки - Время работы бота Статистика сохраняется в SQLite и не сбрасывается при перезапуске. ## ⚙️ Настройки (меняются на лету) Все настройки изменяются через кнопку **🛠️ Settings** без остановки бота: | Кнопка | Что меняет | Применяется | |--------|-----------|-------------| | ⏰ Set Interval | Интервал автобампа (часы) | Мгновенно, перезапускает цикл | | 📦 Set Batch Size | Размер batch (1–10) | Мгновенно для следующих запросов | | 🔄 Toggle Auto-Bump | Включить/выключить автобамп | Мгновенно | Настройки хранятся в БД и сохраняются между перезапусками. ## 🔄 Как работает автоподнятие 1. Запускаете бота 2. Вручную поднимаете темы через 🚀 (первый раз) 3. Бот ждёт указанный интервал (например, 12 часов) 4. Автоматически поднимает темы, у которых прошёл интервал 5. Цикл повторяется ``` 00:00 — Запуск бота 00:05 — Ручное поднятие 12:05 — Автоматическое поднятие 24:05 — Автоматическое поднятие ``` ## 🏗️ Архитектура ``` app.py # Бот: хендлеры, middleware аутентификации, авто-бамп config_manager.py # Загрузка и валидация .env api_client.py # Lolz batch API клиент с retry логикой database.py # SQLite: темы, настройки, статистика ``` ### Что внутри БД (SQLite через aiosqlite) | Таблица | Назначение | |---------|-----------| | `threads` | Темы: ID, название, дата последнего бампа | | `settings` | Динамические настройки (интервал, batch_size, автобамп) | | `bump_stats` | Персистентная статистика (всего/успешно/последний бамп) | ### Ключевые особенности - **Batch API** — до 10 тем за запрос (экономия лимитов в 10 раз) - **Динамические настройки** — меняются в БД, подхватываются ботом мгновенно - **Персистентная статистика** — не теряется при перезапуске - **Аутентификация** — middleware проверяет Telegram ID админа - **Async context managers** — автоматическая очистка ресурсов - **Frozen dataclasses с `__slots__`** — иммутабельность и экономия памяти - **WAL-режим SQLite** — лучшая конкурентность ## 📝 Логи - **Консоль** — основные события - **bot.log** — детальные логи с traceback ## 🔧 Зависимости - **Python**: 3.12+ - **aiogram**: 3.15.0 - **aiohttp**: bundled with aiogram - **aiosqlite**: 0.20.0+ - **python-dotenv**: 1.0.0+ ## 🐛 Troubleshooting ### Ошибка: «BOT_API_TOKEN not configured» Проверьте `.env` — заполните `BOT_API_TOKEN` реальным токеном от @BotFather. ### Ошибка: «ADMIN_USER_ID not configured» Укажите в `.env` ваш Telegram ID (получить через @userinfobot). ### Ошибка: «API_AUTH_TOKEN not configured» Проверьте токен на [zelenka.guru/account/api](https://zelenka.guru/account/api). ### Ошибка: «⛔ Доступ запрещён» Ботом может управлять только пользователь, чей Telegram ID указан в `ADMIN_USER_ID`. ### Темы не поднимаются автоматически 1. Проверьте, что автобамп включён (🔄 Toggle Auto-Bump) 2. Сделайте первое поднятие вручную через 🚀 3. Проверьте логи в `bot.log` ## 👤 Автор [QIYANA](https://lolz.live/kqlol/) --- **Приятного использования! 🚀**