#!/usr/bin/env python3 """ Запуск Telethon UserBot микросервиса - STANDALONE Работает независимо от основного бота Может быть запущен как отдельный Celery воркер для парсинга групп """ import asyncio import logging import sys import os import sys as sys_module # Загрузить .env файл в первую очередь from pathlib import Path from dotenv import load_dotenv env_file = Path(__file__).parent / '.env' load_dotenv(env_file) # Конфигурация UserBot - использует ТОЛЬКО Telethon переменные TELETHON_API_ID = os.getenv('TELETHON_API_ID') TELETHON_API_HASH = os.getenv('TELETHON_API_HASH') TELETHON_PHONE = os.getenv('TELETHON_PHONE') LOG_LEVEL = os.getenv('LOG_LEVEL', 'INFO') # Проверить требуемые переменные if not all([TELETHON_API_ID, TELETHON_API_HASH, TELETHON_PHONE]): print("❌ Требуются переменные окружения:") print(" TELETHON_API_ID") print(" TELETHON_API_HASH") print(" TELETHON_PHONE") sys_module.exit(1) # Конфигурация логирования logging.basicConfig( level=getattr(logging, LOG_LEVEL, logging.INFO), format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) # Импортировать ТОЛЬКО парсер напрямую из модуля (без цепочки импортов app) import sys sys.path.insert(0, str(Path(__file__).parent)) # Импортировать парсер напрямую from app.userbot.parser import userbot_parser from app.database import AsyncSessionLocal logger.info("="*80) logger.info("🚀 Telethon UserBot Microservice (Standalone)") logger.info("="*80) async def initialize_userbot(): """Инициализировать userbot при запуске""" logger.info("=" * 80) logger.info("🚀 Инициализация Telethon UserBot микросервиса") logger.info("=" * 80) success = await userbot_parser.initialize() if not success: logger.error("❌ Не удалось инициализировать UserBot") logger.info("📲 Проверьте конфигурацию Telethon и убедитесь что вы авторизованы") return False logger.info("✅ UserBot успешно инициализирован") return True async def run_userbot(): """Основной цикл userbot""" success = await initialize_userbot() if not success: return try: logger.info("🔄 UserBot готов к обработке задач") logger.info("⏸️ Нажмите Ctrl+C для остановки") # Держать соединение открытым while True: await asyncio.sleep(1) except KeyboardInterrupt: logger.info("\n⏹️ Получен сигнал остановки") finally: await userbot_parser.shutdown() logger.info("✅ UserBot микросервис остановлен") def main(): """Главная функция""" # Запустить как standalone микросервис logger.info("🚀 Запуск Telethon UserBot как standalone микросервис") asyncio.run(run_userbot()) if __name__ == '__main__': main()