import asyncio import logging import sys from aiogram import Bot, Dispatcher from aiogram.client.default import DefaultBotProperties from aiogram.enums import ParseMode from config import settings from handlers import start, marathons, link from middlewares.logging import LoggingMiddleware # Configure logging to stdout with DEBUG level logging.basicConfig( level=logging.DEBUG, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", handlers=[ logging.StreamHandler(sys.stdout) ] ) logger = logging.getLogger(__name__) # Set aiogram logging level logging.getLogger("aiogram").setLevel(logging.INFO) async def main(): logger.info("="*50) logger.info("Starting Game Marathon Bot...") logger.info(f"API_URL: {settings.API_URL}") logger.info(f"BOT_TOKEN: {settings.TELEGRAM_BOT_TOKEN[:20]}...") logger.info("="*50) bot = Bot( token=settings.TELEGRAM_BOT_TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.HTML) ) # Get bot username for deep links bot_info = await bot.get_me() settings.BOT_USERNAME = bot_info.username logger.info(f"Bot info: @{settings.BOT_USERNAME} (id={bot_info.id})") dp = Dispatcher() # Register middleware dp.message.middleware(LoggingMiddleware()) logger.info("Logging middleware registered") # Register routers logger.info("Registering routers...") dp.include_router(start.router) dp.include_router(link.router) dp.include_router(marathons.router) logger.info("Routers registered: start, link, marathons") # Start polling logger.info("Deleting webhook and starting polling...") await bot.delete_webhook(drop_pending_updates=True) logger.info("Polling started! Waiting for messages...") await dp.start_polling(bot) if __name__ == "__main__": asyncio.run(main())