import asyncio import logging import sys from aiogram import Bot, Dispatcher from telethon import TelegramClient from bot.config import settings from bot.db.engine import get_db, close_db from bot.handlers import analyze, features, lang, payment, prices, start from bot.middleware.user_middleware import UserMiddleware SESSION_PATH = "/app/data/analyzer_session" logging.basicConfig( level=logging.INFO, format="%(asctime)s %(levelname)s %(name)s: %(message)s", ) log = logging.getLogger(__name__) async def login() -> None: """Interactive one-time login to create the Telethon session file.""" client = TelegramClient( SESSION_PATH, settings.telegram_api_id, settings.telegram_api_hash, ) await client.start(phone=settings.telegram_phone) log.info("Session created at %s.session", SESSION_PATH) await client.disconnect() async def main() -> None: # Init database await get_db() log.info("Database initialized") telethon_client = TelegramClient( SESSION_PATH, settings.telegram_api_id, settings.telegram_api_hash, ) await telethon_client.connect() if not await telethon_client.is_user_authorized(): log.error( "No valid session. Run with --login first: " "podman run -it --env-file .env -v ./data:/app/data tg-analyzer python -m bot --login" ) await telethon_client.disconnect() sys.exit(1) log.info("Telethon client started") bot = Bot(token=settings.bot_token) bot._telethon_client = telethon_client # type: ignore[attr-defined] dp = Dispatcher() # Register middleware dp.update.middleware(UserMiddleware()) # Register routers — payment.pre_checkout must come before analyze dp.include_router(start.router) dp.include_router(lang.router) dp.include_router(features.router) dp.include_router(prices.router) dp.include_router(payment.router) dp.include_router(analyze.router) log.info("Starting bot polling...") try: await dp.start_polling(bot) finally: await telethon_client.disconnect() await close_db() if __name__ == "__main__": if "--login" in sys.argv: asyncio.run(login()) else: asyncio.run(main())