new bot structure

This commit is contained in:
2025-09-25 13:22:14 +03:00
parent f043d5a0a7
commit 8c801eb66e
22 changed files with 85 additions and 47 deletions

3
app/bot/__init__.py Normal file
View File

@@ -0,0 +1,3 @@
from .bot import main
__all__ = ["main"]

22
app/bot/bot.py Normal file
View File

@@ -0,0 +1,22 @@
import asyncio
from aiogram import Bot, Dispatcher
from aiogram_dialog import setup_dialogs
from app.bot.dialogs.flows import dialogs_router
from app.bot.handlers.commands import commands_router
from config.config import settings
bot = Bot(token=settings.bot_token)
dp = Dispatcher()
async def main():
setup_dialogs(dp)
dp.include_router(commands_router)
dp.include_router(dialogs_router)
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())

View File

@@ -0,0 +1,8 @@
from aiogram import Router
from .admin import admin_router
from .user import user_router
dialogs_router = Router(name="dialogs")
dialogs_router.include_router(admin_router)
dialogs_router.include_router(user_router)

View File

@@ -0,0 +1,3 @@
from aiogram import Router
admin_router = Router(name="admin dialogs")

View File

@@ -0,0 +1,6 @@
from aiogram import Router
from .start.dialogs import start_dialog
user_router = Router(name="user")
user_router.include_router(start_dialog)

View File

@@ -0,0 +1,14 @@
from aiogram_dialog import Dialog, Window
from aiogram_dialog.widgets.text import Format
from app.bot.dialogs.widgets.getters import username_getter
from .states import StartSG
start_dialog = Dialog(
Window(
Format("Hello, {username}"),
getter=username_getter,
state=StartSG.start,
)
)

View File

@@ -0,0 +1,5 @@
from aiogram.fsm.state import State, StatesGroup
class StartSG(StatesGroup):
start = State()

View File

@@ -0,0 +1,8 @@
from aiogram.types import User
from aiogram_dialog import DialogManager
async def username_getter(
dialog_manager: DialogManager, event_from_user: User, **kwargs
) -> dict[str, str]:
return {"username": event_from_user.username}

View File

@@ -0,0 +1,12 @@
from aiogram import Router
from aiogram.filters import CommandStart
from aiogram.types import Message
from aiogram_dialog import DialogManager
from app.bot.dialogs.flows.user.start.states import StartSG
commands_router = Router(name="commands_router")
@commands_router.message(CommandStart())
async def command_start_process(message: Message, dialog_manager: DialogManager):
await dialog_manager.start(state=StartSG.start)