Files
vibecode-malenia/main.py
2026-04-04 21:30:35 +07:00

50 lines
1.4 KiB
Python

import asyncio
import logging
from aiogram import Bot, Dispatcher
from aiogram.enums import ParseMode
from sqlalchemy.ext.asyncio import AsyncEngine, async_sessionmaker
from app.bot.handlers import build_root_router
from app.bot.middlewares import DbSessionMiddleware, ServicesMiddleware
from app.config import Settings
from app.db.base import Base
from app.db.session import get_session_factory, init_engine
async def create_schema(engine: AsyncEngine) -> None:
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
def build_dispatcher(session_factory: async_sessionmaker) -> Dispatcher:
dp = Dispatcher()
dp.update.middleware(DbSessionMiddleware(session_factory))
dp.update.middleware(ServicesMiddleware())
dp.include_router(build_root_router())
return dp
async def main() -> None:
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(levelname)s %(name)s %(message)s",
)
settings = Settings()
engine = init_engine(settings.database_url)
await create_schema(engine)
session_factory = get_session_factory(engine)
bot = Bot(
settings.bot_token,
default_parse_mode=ParseMode.HTML,
)
dp = build_dispatcher(session_factory)
try:
await dp.start_polling(bot)
finally:
await engine.dispose()
if __name__ == "__main__":
asyncio.run(main())