68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
"""
|
|
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
|