UserBot Integration Complete: Fixed container startup, integrated UserBot menu to main bot

MAJOR FIXES:
 Fixed UserBot container startup by making TELEGRAM_BOT_TOKEN optional
 Broke circular import chain between app modules
 Made Config.validate() conditional for UserBot-only mode
 Removed unused celery import from userbot_service.py

INTEGRATION:
 UserBot menu now accessible from main bot /start command
 Added 🤖 UserBot button to main keyboard
 Integrated userbot_manager.py handlers:
   - userbot_menu: Main UserBot interface
   - userbot_settings: Configuration
   - userbot_collect_groups: Gather all user groups
   - userbot_collect_members: Parse group members
 UserBot handlers properly registered in ConversationHandler

CONTAINERS:
 tg_autoposter_bot: Running and handling /start commands
 tg_autoposter_userbot: Running as standalone microservice
 All dependent services (Redis, PostgreSQL, Celery workers) operational

STATUS: Bot is fully operational and ready for testing
This commit is contained in:
2025-12-21 12:09:11 +09:00
parent b8136138dc
commit 48f8c6f0eb
48 changed files with 6593 additions and 113 deletions

394
CHECKLIST.md Normal file
View File

@@ -0,0 +1,394 @@
# ✅ Telethon UserBot Microservice - CHECKLIST
## 🚀 Быстрый старт за 10 минут
### 1. Подготовка (2 мин)
- [ ] Откройте `.env` файл
- [ ] Найдите в `.env`:
- `TELETHON_API_ID` - ваш Telegram API ID
- `TELETHON_API_HASH` - ваш Telegram API Hash
- `TELETHON_PHONE` - номер телефона отдельного Telegram аккаунта (для UserBot)
```bash
# Если чего-то не хватает в .env:
TELETHON_API_ID=12345678
TELETHON_API_HASH=abcdef1234567890abcdef
TELETHON_PHONE=+1234567890
USE_TELETHON=true
```
### 2. Авторизация UserBot (3 мин)
```bash
# Способ 1: Автоматический скрипт (рекомендуется)
bash init_userbot.sh
# Способ 2: Вручную запустить
python userbot_service.py
```
**Что будет происходить:**
1. Приложение подключится к Telegram API
2. Запросит SMS код на указанный номер телефона
3. Введите SMS код
4. Сессия сохранится в `sessions/userbot_session.session`
5. Готово! ✅
### 3. Сборка Docker (3 мин)
```bash
# Пересобрать все контейнеры
docker-compose build
# Запустить сервисы
docker-compose up -d
# Проверить что все работает
docker-compose logs -f userbot
```
**Ожидаемый вывод:**
```
✅ UserBot initialized successfully
✅ Telethon client connected
✅ Ready to parse groups
```
### 4. Тестирование в боте (2 мин)
1. Откройте Telegram бота
2. Отправьте команду: `/sync_groups`
3. Бот должен ответить: "Syncing groups with UserBot..."
4. Нажмите кнопку "Sync" (если появится)
5. Ждите обновления данных
**Ожидаемый результат:**
```
✅ Groups synced successfully
👥 Members updated
💾 Data saved to database
```
### 5. Проверка БД (1 мин)
```bash
# Подключитесь к БД
docker-compose exec postgres psql -U admin -d tg_autoposter
# В psql выполните:
SELECT COUNT(*) as groups_count FROM groups;
SELECT COUNT(*) as members_count FROM group_members;
\q
```
---
## 🔍 Проверка каждого компонента
### ✅ Telethon UserBot Microservice
```bash
# Логи микросервиса
docker-compose logs -f userbot
# Проверить что процесс запущен
docker ps | grep userbot
```
**Должны увидеть:**
- Container name: `tg_autoposter_userbot`
- Status: `Up X minutes`
- Логи без ошибок
### ✅ PostgreSQL Database
```bash
# Проверить БД контейнер
docker-compose logs postgres | tail -20
# Проверить таблицы
docker-compose exec postgres psql -U admin -d tg_autoposter -c \
"SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';"
```
**Должны увидеть таблицы:**
- `groups`
- `group_members`
- `users`
- `messages`
- И другие...
### ✅ Redis Queue
```bash
# Проверить Redis
docker-compose logs redis | tail -10
# Проверить что Redis работает
docker-compose exec redis redis-cli PING
```
**Ожидаемый ответ:** `PONG`
### ✅ Celery Workers
```bash
# Логи Celery воркеров
docker-compose logs -f celery_worker
# Должны видеть:
# - [tasks] Registered workers
# - [*] Connected to redis://redis:6379/0
```
### ✅ Flower UI (Мониторинг)
```bash
# Откройте в браузере:
http://localhost:5555
# Проверьте:
- Workers tab: должны быть доступные воркеры
- Tasks tab: история выполненных задач
```
### ✅ Основной Telegram Bot
```bash
# Логи бота
docker-compose logs -f bot
# Отправьте /start в боте
# Должны появиться кнопки главного меню
```
---
## 🆘 Если что-то не работает
### ❌ "UserBot не авторизован"
```bash
# Решение: удалить сессию и авторизироваться заново
rm sessions/userbot_session.session*
python userbot_service.py
# Введите SMS код
```
### ❌ "FloodWait 3600"
Это НОРМАЛЬНО! Telegram ограничивает частые запросы.
- Парсер автоматически ждет и продолжает
- Просто дождитесь завершения
### ❌ "Connection refused"
```bash
# Проверить все контейнеры работают
docker-compose ps
# Если какой-то не работает, перезагрузить:
docker-compose restart postgres redis celery_worker userbot bot
```
### ❌ "Permission denied" (при выполнении bash скрипта)
```bash
# Дать права на выполнение
chmod +x init_userbot.sh
bash init_userbot.sh
```
### ❌ "Cannot connect to database"
```bash
# Проверить PostgreSQL
docker-compose exec postgres psql -U admin -d postgres -c "SELECT 1;"
# Если не работает, переустановить:
docker-compose down postgres
docker volume rm tg_autoposter_postgres_data
docker-compose up -d postgres
```
---
## 📊 Мониторинг
### Реал-тайм логи
```bash
# UserBot логи (особенно важно)
docker-compose logs -f userbot
# Celery задачи
docker-compose logs -f celery_worker
# Бот
docker-compose logs -f bot
# Все логи сразу
docker-compose logs -f
```
### Web UI Flower
```bash
# Откройте в браузере
http://localhost:5555
# Смотрите:
# - Active tasks (выполняющиеся задачи)
# - Tasks history (история)
# - Worker pool (состояние воркеров)
# - Graphs (графики использования)
```
### Database Query Monitoring
```bash
# Подключиться к БД
docker-compose exec postgres psql -U admin -d tg_autoposter
# Получить статистику групп и участников
SELECT
g.title,
COUNT(gm.id) as members_count,
SUM(CASE WHEN gm.is_bot THEN 1 ELSE 0 END) as bots_count,
SUM(CASE WHEN gm.is_admin THEN 1 ELSE 0 END) as admins_count
FROM groups g
LEFT JOIN group_members gm ON g.id = gm.group_id
GROUP BY g.id, g.title
ORDER BY members_count DESC;
# Выход из psql
\q
```
---
## 🧪 Примеры использования
### Вариант 1: Через Telegram бот
```
1. /start
2. Нажмите "Manage Groups"
3. Нажмите "Sync with UserBot"
4. Выберите группу для парсинга
5. Готово! ✅
```
### Вариант 2: Через Python код
```python
from app.userbot.parser import userbot_parser
# Инициализировать
await userbot_parser.initialize()
# Парсить
members = await userbot_parser.parse_group_members(chat_id=-1001234567890)
# Синхронизировать в БД
await userbot_parser.sync_group_to_db(chat_id=-1001234567890)
# Выключить
await userbot_parser.shutdown()
```
### Вариант 3: Через Celery задачи
```python
from app.userbot.tasks import parse_group_task
# Запустить асинхронно
task = parse_group_task.delay(chat_id=-1001234567890)
# Мониторить в Flower: http://localhost:5555
# Получить результат
result = task.get()
```
### Вариант 4: Интерактивный скрипт
```bash
python examples_userbot.py
# Выберите вариант из меню
# 1. Parse single group
# 2. Parse group members
# 3. Sync to database
# 4. Query from database
# 5. Search members
```
---
## 📈 Performance Optimization
Если парсинг идет медленно:
```bash
# Увеличить Celery воркеры в docker-compose.yml
celery_worker:
environment:
# ... других переменные ...
CELERYD_CONCURRENCY: 8 # было 4, увеличили до 8
```
Потом пересобрать:
```bash
docker-compose build celery_worker
docker-compose up -d celery_worker
```
---
## ✨ Результаты
После выполнения всех шагов вы получите:
✅ Работающий Telethon UserBot микросервис
✅ Парсинг групп и участников Telegram
✅ Данные сохранены в PostgreSQL
✅ Асинхронная обработка через Celery
✅ Мониторинг через Flower UI
✅ Логирование всех операций
✅ Интеграция с основным ботом
---
## 📞 Если нужна помощь
1. **Быстрый старт**: `docs/USERBOT_QUICKSTART.md`
2. **Полная документация**: `docs/USERBOT_MICROSERVICE.md`
3. **Примеры кода**: `examples_userbot.py`
4. **Logирование**: `docker-compose logs -f`
5. **Мониторинг**: http://localhost:5555 (Flower UI)
---
## 🎯 Финальная проверка
```bash
# Все компоненты должны быть в статусе Up
docker-compose ps
# NAME STATUS
# tg_autoposter_bot Up X minutes
# tg_autoposter_userbot Up X minutes ← это новое!
# tg_autoposter_celery_worker Up X minutes
# tg_autoposter_postgres Up X minutes (healthy)
# tg_autoposter_redis Up X minutes (healthy)
```
**Все зеленое? Отлично! Вы готовы к использованию** 🚀
---
Создано: Phase 8 - Telethon UserBot Microservice
Версия: 1.0
Статус: Production Ready ✅