Initial commit: Batch Bot - Telegram Comment Bot

0.0.1
Features:
- Multi-account support via session files
- AI comments generation via Ollama (local LLM)
- Telegram bot for moderation (approve/reject/regenerate)
- Docker support (controller + worker)
- Auto-join public groups
- Comment regeneration on group re-add
- Statistics tracking

Tech stack:
- Python 3.11
- Telethon 1.34 (Telegram user client)
- Aiogram 3.4 (Telegram bot framework)
- SQLite (Database)
- Docker & Docker Compose
- Ollama (Local LLM)
This commit is contained in:
2026-02-24 04:40:07 +03:00
commit a18ad30961
20 changed files with 3431 additions and 0 deletions

57
bot/config.py Normal file
View File

@@ -0,0 +1,57 @@
import os
from pathlib import Path
from dotenv import load_dotenv
# Загрузка переменных окружения
load_dotenv()
# Пути
BASE_DIR = Path(__file__).parent.parent # Корень проекта (batch-bot/)
DATA_DIR = BASE_DIR / "data" # Примонтированная директория для данных
SESSIONS_DIR = BASE_DIR / "sessions"
LOGS_DIR = DATA_DIR / "logs"
DB_PATH = DATA_DIR / "comments.db"
# Telegram Bot (контроллер)
BOT_TOKEN = os.getenv("BOT_TOKEN")
# Telegram API (воркеры)
API_ID = int(os.getenv("TELEGRAM_API_ID", "0"))
API_HASH = os.getenv("TELEGRAM_API_HASH", "")
# Группы (добавляются через бота)
LOG_GROUP_ID = int(os.getenv("LOG_GROUP_ID", "0"))
# Ollama
OLLAMA_URL = os.getenv("OLLAMA_URL", "http://localhost:11434").rstrip("/")
OLLAMA_MODEL = os.getenv("OLLAMA_MODEL", "qwen3:30b-a3b")
PROMPT_FILE = os.getenv("PROMPT_FILE", "prompt.txt")
# Сканирование
INITIAL_SCAN_LIMIT = int(os.getenv("INITIAL_SCAN_LIMIT", "20"))
# Комментарии
MAX_REGENERATIONS = int(os.getenv("MAX_REGENERATIONS", "3"))
COMMENT_DELAY_MIN = int(os.getenv("COMMENT_DELAY_MIN", "1"))
COMMENT_DELAY_MAX = int(os.getenv("COMMENT_DELAY_MAX", "5"))
# Админы
ADMIN_IDS = [int(x.strip()) for x in os.getenv("ADMIN_IDS", "").split(",") if x.strip()]
# Проверка конфигурации
def validate_config():
errors = []
if not BOT_TOKEN:
errors.append("BOT_TOKEN не задан")
if not API_ID or not API_HASH:
errors.append("TELEGRAM_API_ID или TELEGRAM_API_HASH не заданы")
if not LOG_GROUP_ID:
errors.append("LOG_GROUP_ID не задан")
if not ADMIN_IDS:
errors.append("ADMIN_IDS не заданы")
return errors