66 lines
1.8 KiB
Python
66 lines
1.8 KiB
Python
|
|
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())
|