first commit
This commit is contained in:
49
main.py
Normal file
49
main.py
Normal file
@@ -0,0 +1,49 @@
|
||||
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())
|
||||
Reference in New Issue
Block a user