add files
This commit is contained in:
1 parent
4b06cd8a77
commit
8f2efee524
8 files changed
+291
-92
No files matched your search
@@ -0,0 +1,52 @@
|
||||
"""
|
||||
Project Telegram polling startup: launches both main and client bots with full routers and middleware.
|
||||
Cleans webhooks before polling to ensure updates delivery.
|
||||
"""
|
||||
import asyncio
|
||||
import logging
|
||||
from typing import Optional
|
||||
|
||||
from aiogram import Bot, Dispatcher
|
||||
from aiogram.fsm.storage.memory import MemoryStorage
|
||||
|
||||
from app.core.config import get_settings
|
||||
from app.bot.middleware import UserDataMiddleware
|
||||
from app.bot.routers.index import main_router as main_bot_router
|
||||
from app.client_bot.routers.index import main_router as client_bot_router
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def _run_bot(token: str, name: str, router) -> None:
|
||||
bot = Bot(token)
|
||||
dp = Dispatcher(storage=MemoryStorage())
|
||||
dp.update.outer_middleware(UserDataMiddleware())
|
||||
dp.include_router(router)
|
||||
logger.info("Preparing Telegram bot for polling", extra={"name": name})
|
||||
# Ensure webhook is removed so polling works
|
||||
await bot.delete_webhook(drop_pending_updates=False)
|
||||
logger.info("Webhook cleared", extra={"name": name})
|
||||
logger.info("Starting Telegram bot polling", extra={"name": name})
|
||||
await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types())
|
||||
|
||||
|
||||
async def start_bots_if_configured() -> list[asyncio.Task]:
|
||||
settings = get_settings()
|
||||
tasks: list[asyncio.Task] = []
|
||||
if bool(getattr(settings, 'TELEGRAM_WEBHOOK_ENABLED', False)):
|
||||
logger.info("Telegram webhook enabled; skipping polling start")
|
||||
return tasks
|
||||
|
||||
main_token: Optional[str] = getattr(settings, 'TELEGRAM_API_KEY', None)
|
||||
if main_token:
|
||||
tasks.append(asyncio.create_task(_run_bot(main_token, 'main', main_bot_router)))
|
||||
|
||||
client_token: Optional[str] = getattr(settings, 'CLIENT_TELEGRAM_API_KEY', None)
|
||||
if client_token:
|
||||
tasks.append(asyncio.create_task(_run_bot(client_token, 'client', client_bot_router)))
|
||||
|
||||
if tasks:
|
||||
logger.info("Telegram bots polling started", extra={"count": len(tasks)})
|
||||
else:
|
||||
logger.info("No Telegram tokens configured; polling not started")
|
||||
return tasks
|
||||
Reference in new issue
Block a user