mirror of
https://github.com/koloideal/DutyLog.git
synced 2026-06-10 10:25:29 +03:00
update
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user