Files
2026-09-21 04:06:43 +03:00

52 lines
1.3 KiB
Python

from __future__ import annotations
import asyncio
import logging
from aiogram import Bot, Dispatcher
from aiogram.client.session.aiohttp import AiohttpSession
from aiogram.fsm.storage.memory import MemoryStorage
from bot.clients.budget_api import BudgetApiClient
from bot.config import settings
from bot.handlers.budget import router as budget_router
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
)
logger = logging.getLogger(__name__)
def create_bot() -> Bot:
if settings.proxy_url:
logger.info("Using proxy for Telegram API: %s", settings.proxy_url)
session = AiohttpSession(proxy=settings.proxy_url)
else:
session = AiohttpSession()
return Bot(token=settings.bot_token, session=session)
async def main() -> None:
budget_service = BudgetApiClient(
base_url=settings.api_base_url,
api_token=settings.api_token,
)
await budget_service.start()
bot = create_bot()
dp = Dispatcher(storage=MemoryStorage())
dp["budget_service"] = budget_service
dp.include_router(budget_router)
try:
logger.info("Bot started (API %s)", settings.api_base_url)
await dp.start_polling(bot)
finally:
await budget_service.close()
await bot.session.close()
if __name__ == "__main__":
asyncio.run(main())