This commit is contained in:
2026-03-01 16:19:55 +03:00
parent cf0b0309fc
commit 3d0dd57752
6 changed files with 128 additions and 18 deletions
+39 -2
View File
@@ -1,7 +1,8 @@
from aiogram import Router
from aiogram.filters import CommandStart
from aiogram.types import Message
from aiogram.types import Message, CallbackQuery, ErrorEvent
from aiogram_dialog import DialogManager, StartMode
from aiogram_dialog.api.exceptions import UnknownIntent
from dishka import FromDishka
from dutylog.application.bot.user_dialogs.states import (
@@ -27,7 +28,7 @@ async def start_handler(
users_repository: FromDishka[UsersRepository],
residents_repository: FromDishka[ResidentsRepository],
config: FromDishka[Config],
):
) -> None:
assert message.from_user is not None
user = await users_repository.get_or_create_user(
@@ -53,3 +54,39 @@ async def start_handler(
return
await dialog_manager.start(RegistrationSG.select_floor, mode=StartMode.RESET_STACK)
@router.error()
async def unknown_intent_handler(
event: ErrorEvent,
dialog_manager: DialogManager,
users_repository: FromDishka[UsersRepository],
residents_repository: FromDishka[ResidentsRepository],
config: FromDishka[Config],
) -> None:
if not isinstance(event.exception, UnknownIntent):
raise event.exception
user_id = None
if event.update.message and event.update.message.from_user:
user_id = event.update.message.from_user.id
elif event.update.callback_query and event.update.callback_query.from_user:
user_id = event.update.callback_query.from_user.id
if not user_id:
return
user = await users_repository.get_user_by_id(user_id)
is_creator = user_id == config.bot.creator_id
is_admin = user.is_admin if user else False
if is_admin or is_creator:
await dialog_manager.start(AdminMenuSG.main, mode=StartMode.RESET_STACK)
return
resident = await residents_repository.get_resident_by_user_id(user_id)
if resident:
await dialog_manager.start(MainMenuSG.main, mode=StartMode.RESET_STACK)
else:
await dialog_manager.start(RegistrationSG.select_floor, mode=StartMode.RESET_STACK)