Files
batch-bot/README.md
bilal bb27161524 Final release: Multi-session comment bot with filtering
Features:
- Multi-account support (session files)
- AI comments via Ollama
- Telegram bot moderation
- Filter by sessions and groups
- Docker support
- Auto-join groups
- Log notifications
- DB migration script

Bug fixes:
- Fixed comment_to for proper post targeting
- Fixed entity lookup with multiple ID formats
- Fixed callback handlers for filtering
- Added auto-join before entity lookup
2026-02-28 01:44:40 +03:00

292 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Batch Bot - Telegram Comment Bot
Автоматический бот для генерации и публикации комментариев в Telegram от имени нескольких пользователей с использованием локальной LLM (Ollama).
## 🏗 Архитектура
```
┌─────────────────────────────────────────────────────────────┐
│ Telegram Bot (Controller) │
│ @BotFather bot для управления и модерации │
└─────────────────────────────────────────────────────────────┤
┌─────────────────────────────────────────────────────────────┐
│ Session Workers │
│ Воркеры для каждого пользователя (user sessions) │
└─────────────────────────────────────────────────────────────┤
┌───────────────┼───────────────┐
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ user_1.session│ │ user_2.session│ │ user_3.session│
└────────────┘ └────────────┘ └────────────┘
```
## 📋 Возможности
-**Мультиаккаунт** — работа с несколькими сессиями одновременно
-**AI генерация** — комментарии через Ollama (локальная LLM)
-**Модерация** — inline-кнопки для одобрения/отклонения
-**Редактирование** — возможность изменить текст перед отправкой
-**Статистика** — учёт сгенерированных/отправленных комментариев
-**Фильтрация** — просмотр комментариев по сессиям и группам
-**Docker** — полная контейнеризация
-**Уведомления** — уведомления о новых постах в лог-группу
## 🚀 Быстрый старт
### 1. Настройка
```bash
# Скопируйте .env.example в .env
cp .env.example .env
# Отредактируйте .env
nano .env
```
**Обязательные параметры:**
| Параметр | Описание |
|----------|----------|
| `BOT_TOKEN` | Токен бота от @BotFather |
| `TELEGRAM_API_ID` | API ID аккаунта |
| `TELEGRAM_API_HASH` | API Hash аккаунта |
| `LOG_GROUP_ID` | ID чата для модерации (с -100) |
| `ADMIN_IDS` | Telegram ID администраторов |
| `OLLAMA_URL` | URL внешнего Ollama |
### 2. Создание сессий
```bash
# Установка зависимостей
pip install -r requirements.txt
# Запуск авторизации
python auth.py
```
Введите API credentials, номер телефона и код из Telegram.
**Для нескольких аккаунтов:**
- Запустите `python auth.py` несколько раз
- Или скопируйте `.session` файлы в `sessions/`
### 3. Миграция БД (если обновляетесь)
```bash
python migrate_db.py
```
### 4. Запуск Docker
```bash
# Сборка и запуск
docker-compose build
docker-compose up -d
# Логи
docker-compose logs -f
# Остановка
docker-compose down
```
**Сервисы:**
- `controller` — бот для модерации
- `worker` — отправка комментариев
## 📖 Использование
### Команды бота
| Команда | Описание |
|---------|----------|
| `/start` | Главное меню |
| `/stats` | Статистика |
| `/pending` | Ожидающие комментарии (по группам) |
| `/sessions` | Сессии (по сессиям) |
| `/groups` | Управление группами |
| `/add_group ID` | Добавить группу |
| `/help` | Справка |
### Фильтрация комментариев
**По сессиям:**
1. Нажмите "👥 Сессии"
2. Выберите сессию
3. Просмотрите комментарии этой сессии
**По группам:**
1. Нажмите "📝 Ожидающие"
2. Выберите группу
3. Просмотрите комментарии этой группы
### Добавление группы
**Через команду:**
```
/add_group 1416283017
```
**Через меню:**
1. Отправьте `/groups`
2. Нажмите " Добавить группу"
3. Отправьте ID группы
**Управление группами:**
- `/groups` — показать список
- Нажмите на группу для управления (пауза/удаление)
### Модерация комментариев
1. Бот получает новый пост из группы
2. Генерирует комментарий через Ollama
3. Отправляет в `LOG_GROUP_ID` на модерацию
4. Администратор нажимает:
- **✅ Одобрить** — опубликовать комментарий
- **❌ Отклонить** — удалить комментарий
- **🔄 Регенерировать** — новый вариант
- **✏️ Редактировать** — изменить текст
## 🔧 Конфигурация
### Переменные окружения
| Параметр | По умолчанию | Описание |
|----------|--------------|----------|
| `BOT_TOKEN` | - | Токен Telegram бота |
| `TELEGRAM_API_ID` | - | API ID для воркеров |
| `TELEGRAM_API_HASH` | - | API Hash для воркеров |
| `LOG_GROUP_ID` | - | ID чата для модерации |
| `ADMIN_IDS` | - | ID администраторов |
| `OLLAMA_URL` | `http://host.docker.internal:11434` | URL Ollama |
| `OLLAMA_MODEL` | `qwen3:30b-a3b` | Модель для генерации |
| `INITIAL_SCAN_LIMIT` | `20` | Кол-во сообщений для сканирования |
| `COMMENT_DELAY_MIN` | `1` | Мин. задержка перед отправкой (сек) |
| `COMMENT_DELAY_MAX` | `5` | Макс. задержка перед отправкой (сек) |
## 📁 Структура проекта
```
batch-bot/
├── .env.example # Пример конфигурации
├── .gitignore
├── docker-compose.yml # Docker конфигурация
├── Dockerfile # Образ для controller/worker
├── requirements.txt # Python зависимости
├── auth.py # Скрипт авторизации
├── migrate_db.py # Скрипт миграции БД
├── prompt.txt # Шаблон для LLM
├── bot/
│ ├── config.py # Конфигурация
│ ├── controller.py # Бот для модерации
│ ├── worker.py # Воркер для отправки
│ ├── db.py # База данных
│ ├── keyboard.py # Inline-клавиатуры
│ ├── ollama.py # Ollama API
│ └── session_manager.py # Управление сессиями
├── sessions/ # .session файлы (том Docker)
├── logs/ # Логи (том Docker)
└── data/ # БД и данные (том Docker)
```
## 🐳 Docker
### Запуск
```bash
# Сборка
docker-compose build
# Запуск
docker-compose up -d
# Логи
docker-compose logs -f controller
docker-compose logs -f worker
# Остановка
docker-compose down
```
### Тома
| Том | Описание |
|-----|----------|
| `./sessions:/app/sessions` | Файлы сессий |
| `./logs:/app/logs` | Логи |
| `./data:/app/data` | База данных |
### Сетевые настройки
**Linux:**
```
OLLAMA_URL=http://172.17.0.1:11434
```
**macOS/Windows:**
```
OLLAMA_URL=http://host.docker.internal:11434
```
## 🔐 Безопасность
- `.env` и `*.session` файлы добавлены в `.gitignore`
- Не коммитьте сессии в репозиторий
- Используйте разные аккаунты для воркеров
- Ограничьте доступ через `ADMIN_IDS`
## 📊 База данных
**Таблицы:**
| Таблица | Описание |
|---------|----------|
| `comments` | Комментарии (текст, статус, сессия) |
| `sessions` | Информация о сессиях |
| `stats` | Статистика по дням |
| `target_groups` | Целевые группы для мониторинга |
## ⚠️ Важные замечания
1. **Telegram ToS** — использование нескольких аккаунтов может нарушать условия Telegram
2. **Задержки** — настройте `COMMENT_DELAY_MIN/MAX` для естественности
3. **Лимиты** — не отправляйте слишком много комментариев с одного аккаунта
4. **Ollama** — должен быть доступен по сети для воркера
## 🐛 Решение проблем
**Бот не подключается:**
- Проверьте `BOT_TOKEN` в `.env`
- Убедитесь, что бот добавлен в `LOG_GROUP_ID` как администратор
**Сессия не авторизуется:**
- Запустите `python auth.py` заново
- Проверьте `TELEGRAM_API_ID` и `TELEGRAM_API_HASH`
**Ollama не отвечает:**
- Проверьте URL в `.env`
- Убедитесь, что модель загружена: `ollama list`
**"Нет групп в БД":**
- Добавьте группу через бота: `/add_group ID`
**Комментарии не отправляются:**
- Проверьте что аккаунт вступил в группу комментариев
- Worker автоматически вступает при отправке
**"Could not find the input entity":**
- Аккаунт должен быть участником группы
- Worker автоматически вступает при сканировании
## 📝 Лицензия
MIT
## 📞 Контакты
- Telegram: @your_username
- Email: your@email.com