""" Lightweight Telegram bot poller to ensure the bot responds. Does not depend on legacy sync DB middleware. Provides minimal /start handler. """ import asyncio import logging from typing import Optional from aiogram import Bot, Dispatcher, Router, types from aiogram.filters import Command from app.core.config import get_settings logger = logging.getLogger(__name__) def build_router(name: str) -> Router: r = Router(name=name) @r.message(Command("start")) async def cmd_start(message: types.Message): await message.answer( "MY Network bot online. Use /help to get options.") @r.message(Command("help")) async def cmd_help(message: types.Message): await message.answer("Available: /start, /help") return r async def _run_single_bot(token: str, name: str): bot = Bot(token) dp = Dispatcher() dp.include_router(build_router(name)) logger.info("Starting Telegram bot polling", extra={"name": name}) try: await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types()) except Exception as e: logger.error("Bot polling failed", extra={"name": name, "error": str(e)}) await bot.session.close() async def start_bots_if_configured() -> list[asyncio.Task]: settings = get_settings() tasks: list[asyncio.Task] = [] # Prefer TELEGRAM_WEBHOOK_ENABLED to avoid double-processing webhook_enabled = bool(getattr(settings, 'TELEGRAM_WEBHOOK_ENABLED', False)) if webhook_enabled: logger.info("Telegram webhook enabled; skipping polling start") return tasks # Main bot token: Optional[str] = getattr(settings, 'TELEGRAM_API_KEY', None) if token: tasks.append(asyncio.create_task(_run_single_bot(token, 'main'))) # Client bot ct: Optional[str] = getattr(settings, 'CLIENT_TELEGRAM_API_KEY', None) if ct: tasks.append(asyncio.create_task(_run_single_bot(ct, 'client'))) if tasks: logger.info("Telegram bots polling started", extra={"count": len(tasks)}) else: logger.info("No Telegram tokens configured; polling not started") return tasks