from aiogram import Router, F from aiogram.filters import Command from aiogram.fsm.context import FSMContext from aiogram.types import Message, CallbackQuery, InlineKeyboardButton from aiogram.utils.keyboard import InlineKeyboardBuilder from logging import getLogger from sqlmodel.ext.asyncio.session import AsyncSession from ....main import QBotApp from ....model.settings import Settings from ....model.user import UserBase from ..context import ContextData, CallbackCommand from ..common import get_send_message, authorize_command from ..navigation import save_navigation_context, pop_navigation_context logger = getLogger(__name__) router = Router() @router.callback_query(ContextData.filter(F.command == CallbackCommand.MENU_ENTRY_SETTINGS)) async def menu_entry_settings(message: CallbackQuery, **kwargs): stack = await save_navigation_context(callback_data = kwargs["callback_data"], state = kwargs["state"]) await settings_menu(message, navigation_stack = stack, **kwargs) async def settings_menu(message: Message | CallbackQuery, user: UserBase, navigation_stack: list[ContextData], **kwargs): keyboard_builder = InlineKeyboardBuilder() if await authorize_command(user = user, callback_data = ContextData(command = CallbackCommand.MENU_ENTRY_PARAMETERS)): keyboard_builder.row( InlineKeyboardButton( text = (await Settings.get(Settings.APP_STRINGS_PARAMETERS_BTN)), callback_data = ContextData(command = CallbackCommand.MENU_ENTRY_PARAMETERS).pack())) keyboard_builder.row( InlineKeyboardButton( text = (await Settings.get(Settings.APP_STRINGS_LANGUAGE_BTN)), callback_data = ContextData(command = CallbackCommand.MENU_ENTRY_LANGUAGE).pack())) context = pop_navigation_context(navigation_stack) if context: keyboard_builder.row( InlineKeyboardButton( text = (await Settings.get(Settings.APP_STRINGS_BACK_BTN)), callback_data = context.pack())) send_message = get_send_message(message) await send_message(text = (await Settings.get(Settings.APP_STRINGS_SETTINGS)), reply_markup = keyboard_builder.as_markup()) from ..navigation import pop_navigation_context, get_navigation_context