diff --git a/backend/app/bot/__init__.py b/backend/app/bot/__init__.py index 9bffcf6..8109bc3 100644 --- a/backend/app/bot/__init__.py +++ b/backend/app/bot/__init__.py @@ -1,18 +1,19 @@ """Bot initialization module""" from aiogram import Bot, Dispatcher from .config import settings +from .handlers import callbacks_router, start_router # Initialize bot and dispatcher bot = Bot(token=settings.bot_token) dp = Dispatcher() +# Include routers only once during initialization +dp.include_router(callbacks_router) +dp.include_router(start_router) + async def start_bot(): - """Start the bot and include all routers""" - from .handlers import callbacks_router, start_router - - # Include routers - dp.include_router(callbacks_router) - dp.include_router(start_router) - - # Start polling - await dp.start_polling(bot, skip_updates=True) \ No newline at end of file + """Start the bot""" + try: + await dp.start_polling(bot, skip_updates=True) + except Exception as e: + print(f"Error starting bot: {e}") \ No newline at end of file diff --git a/backend/run.py b/backend/run.py index c999466..63cb99a 100644 --- a/backend/run.py +++ b/backend/run.py @@ -10,25 +10,29 @@ from logging import getLogger logger = getLogger(__name__) -async def run_bot(): - """Run Telegram bot""" - try: - await start_bot() - except Exception as e: - logger.error(f"Bot crashed: {e}", exc_info=True) - async def run_api(): """Run FastAPI application""" - config = uvicorn.Config(app, host="0.0.0.0", port=8000, reload=True) + config = uvicorn.Config( + app, + host="0.0.0.0", + port=8000, + reload=True + ) server = uvicorn.Server(config) - try: - await server.serve() - except Exception as e: - logger.error(f"API crashed: {e}", exc_info=True) + await server.serve() -async def run_all(): - """Run both bot and API""" - await asyncio.gather(run_bot(), run_api()) +async def main(): + """Run both bot and API in the main thread""" + try: + # Создаем задачи для бота и API + bot_task = asyncio.create_task(start_bot()) + api_task = asyncio.create_task(run_api()) + + # Запускаем обе задачи + await asyncio.gather(bot_task, api_task) + except Exception as e: + logger.error(f"Application crashed: {e}", exc_info=True) if __name__ == "__main__": - asyncio.run(run_all()) \ No newline at end of file + # Запускаем в основном потоке + asyncio.run(main()) \ No newline at end of file