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:
130
auth.py
Normal file
130
auth.py
Normal file
@@ -0,0 +1,130 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Скрипт для создания сессии Telegram
|
||||
Запустите этот скрипт для авторизации и создания файла сессии
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from dotenv import load_dotenv
|
||||
from loguru import logger
|
||||
from telethon import TelegramClient
|
||||
from telethon.sessions import StringSession
|
||||
|
||||
# Настройка логирования
|
||||
logger.remove()
|
||||
logger.add(
|
||||
sys.stdout,
|
||||
format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <level>{message}</level>",
|
||||
level="INFO"
|
||||
)
|
||||
logger.add(
|
||||
"logs/auth.log",
|
||||
rotation="1 day",
|
||||
retention="7 days",
|
||||
level="DEBUG"
|
||||
)
|
||||
|
||||
# Загрузка переменных окружения
|
||||
load_dotenv()
|
||||
|
||||
# Конфигурация
|
||||
API_ID = int(os.getenv("TELEGRAM_API_ID", "0"))
|
||||
API_HASH = os.getenv("TELEGRAM_API_HASH", "")
|
||||
PHONE = os.getenv("TELEGRAM_PHONE", "")
|
||||
|
||||
SESSIONS_DIR = Path("sessions")
|
||||
|
||||
|
||||
async def main():
|
||||
"""Создание сессии"""
|
||||
try:
|
||||
# Проверка конфигурации
|
||||
if not all([API_ID, API_HASH]):
|
||||
logger.error("❌ TELEGRAM_API_ID и TELEGRAM_API_HASH должны быть заданы в .env")
|
||||
return
|
||||
|
||||
# Создаём директорию для сессий
|
||||
SESSIONS_DIR.mkdir(exist_ok=True)
|
||||
|
||||
logger.info("🔐 Telegram Session Creator")
|
||||
logger.info("=" * 40)
|
||||
logger.info(f"API ID: {API_ID}")
|
||||
logger.info(f"API Hash: {'*' * len(API_HASH) if API_HASH else 'Не задан'}")
|
||||
logger.info(f"Phone: {PHONE or 'Будет запрошен'}")
|
||||
logger.info("=" * 40)
|
||||
|
||||
# Запрос телефона если не задан
|
||||
phone = PHONE
|
||||
if not phone:
|
||||
phone = input("📱 Введите номер телефона (с +7): ").strip()
|
||||
|
||||
# Создаём клиента
|
||||
client = TelegramClient(
|
||||
StringSession(),
|
||||
API_ID,
|
||||
API_HASH,
|
||||
device_model="comment_bot",
|
||||
system_version="Linux",
|
||||
app_version="1.0",
|
||||
lang_code="ru"
|
||||
)
|
||||
|
||||
logger.info("Подключение к Telegram...")
|
||||
await client.connect()
|
||||
|
||||
if not await client.is_user_authorized():
|
||||
logger.info("Отправка кода подтверждения...")
|
||||
|
||||
try:
|
||||
await client.send_code_request(phone)
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка отправки кода: {e}")
|
||||
return
|
||||
|
||||
# Ввод кода
|
||||
code = input("📲 Введите код из Telegram: ").strip()
|
||||
|
||||
try:
|
||||
await client.sign_in(phone, code)
|
||||
except Exception as e:
|
||||
if "PASSWORD" in str(e):
|
||||
# Запрос 2FA пароля
|
||||
password = input("🔒 Введите 2FA пароль: ").strip()
|
||||
await client.sign_in(password=password)
|
||||
else:
|
||||
logger.error(f"Ошибка входа: {e}")
|
||||
return
|
||||
|
||||
# Получаем информацию о пользователе
|
||||
me = await client.get_me()
|
||||
logger.info(f"✅ Успешная авторизация: {me.first_name} @{me.username or 'no_username'}")
|
||||
|
||||
# Сохраняем сессию
|
||||
session_string = client.session.save()
|
||||
session_filename = f"user_{me.id}.session"
|
||||
session_path = SESSIONS_DIR / session_filename
|
||||
|
||||
with open(session_path, 'w', encoding='utf-8') as f:
|
||||
f.write(session_string)
|
||||
|
||||
logger.info(f"💾 Сессия сохранена: {session_path}")
|
||||
logger.info("")
|
||||
logger.info("Следующие шаги:")
|
||||
logger.info("1. Скопируйте файл сессии в папку sessions/")
|
||||
logger.info("2. Запустите бота: python bot/controller.py")
|
||||
logger.info("3. Запустите воркера: python bot/worker.py")
|
||||
|
||||
await client.disconnect()
|
||||
|
||||
except KeyboardInterrupt:
|
||||
logger.info("\n❌ Отменено пользователем")
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Ошибка: {e}")
|
||||
raise
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user