#!/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="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {message}", 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())