diff --git a/.gitignore b/.gitignore index 48cfcd7..7b284dd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -__pycache__/* +__pycache__ .venv .env *.db \ No newline at end of file diff --git a/app/bot.py b/app/bot.py index e69de29..6928403 100644 --- a/app/bot.py +++ b/app/bot.py @@ -0,0 +1,24 @@ +import asyncio + +from aiogram import Bot, Dispatcher +from aiogram_dialog import setup_dialogs +from bestconfig import Config + +from app.dialogs import dialogs_router +from app.handlers import handlers_router + +cfg = Config() + +bot = Bot(token=cfg.get("bot_token")) +dp = Dispatcher() + + +async def main(): + dp.include_router(handlers_router) + dp.include_router(dialogs_router) + setup_dialogs(dp) + await dp.start_polling(bot) + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/app/dialogs/__init__.py b/app/dialogs/__init__.py new file mode 100644 index 0000000..ca7b3f7 --- /dev/null +++ b/app/dialogs/__init__.py @@ -0,0 +1,6 @@ +from aiogram import Router + +from .user_dialog import router as user_router + +dialogs_router = Router(name="dialogs") +dialogs_router.include_router(user_router) \ No newline at end of file diff --git a/app/dialogs/user_dialog.py b/app/dialogs/user_dialog.py index e69de29..3c1a1eb 100644 --- a/app/dialogs/user_dialog.py +++ b/app/dialogs/user_dialog.py @@ -0,0 +1,22 @@ +from aiogram import Router +from aiogram.fsm.state import State, StatesGroup +from aiogram_dialog import Dialog, DialogManager, StartMode, Window +from aiogram_dialog.widgets.text import Format + +from app.utils.getters import username_getter + + +class StartSG(StatesGroup): + start = State() + + +start_dialog = Dialog( + Window( + Format("Hello, {username}"), + getter=username_getter, + state=StartSG.start + ) +) + +router = Router(name="user_dialogs") +router.include_router(start_dialog) diff --git a/app/handlers/__init__.py b/app/handlers/__init__.py new file mode 100644 index 0000000..cf524db --- /dev/null +++ b/app/handlers/__init__.py @@ -0,0 +1,6 @@ +from aiogram import Router + +from .user_handlers import router as user_router + +handlers_router = Router(name="handlers") +handlers_router.include_router(user_router) diff --git a/app/handlers/user_handlers.py b/app/handlers/user_handlers.py new file mode 100644 index 0000000..33bfed8 --- /dev/null +++ b/app/handlers/user_handlers.py @@ -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.dialogs.user_dialog import StartSG + +router = Router(name="user_handlers") + +@router.message(CommandStart()) +async def command_start_process(message: Message, dialog_manager: DialogManager): + await dialog_manager.start(state=StartSG.start) diff --git a/app/utils/getters.py b/app/utils/getters.py new file mode 100644 index 0000000..1431d49 --- /dev/null +++ b/app/utils/getters.py @@ -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 +): + return {"username": event_from_user.username} diff --git a/uv.lock b/uv.lock index 644a265..921eee3 100644 --- a/uv.lock +++ b/uv.lock @@ -459,7 +459,7 @@ wheels = [ [[package]] name = "pydantic" -version = "2.11.7" +version = "2.11.9" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-types" }, @@ -467,9 +467,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload-time = "2025-06-14T08:33:17.137Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/5d/09a551ba512d7ca404d785072700d3f6727a02f6f3c24ecfd081c7cf0aa8/pydantic-2.11.9.tar.gz", hash = "sha256:6b8ffda597a14812a7975c90b82a8a2e777d9257aba3453f973acd3c032a18e2", size = 788495, upload-time = "2025-09-13T11:26:39.325Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload-time = "2025-06-14T08:33:14.905Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d3/108f2006987c58e76691d5ae5d200dd3e0f532cb4e5fa3560751c3a1feba/pydantic-2.11.9-py3-none-any.whl", hash = "sha256:c42dd626f5cfc1c6950ce6205ea58c93efa406da65f479dcb4029d5934857da2", size = 444855, upload-time = "2025-09-13T11:26:36.909Z" }, ] [[package]]