52 lines
1.3 KiB
Python
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())
|