init
This commit is contained in:
80
bot/handlers/menu/parameters.py
Normal file
80
bot/handlers/menu/parameters.py
Normal file
@@ -0,0 +1,80 @@
|
||||
from aiogram import Router, F
|
||||
from aiogram.filters import Command
|
||||
from aiogram.fsm.context import FSMContext
|
||||
from aiogram.fsm.state import StatesGroup, State
|
||||
from aiogram.types import Message, CallbackQuery, InlineKeyboardButton
|
||||
from aiogram.utils.i18n import I18n
|
||||
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, CommandContext
|
||||
from ..common import get_send_message, get_value_repr, get_callable_str, 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_PARAMETERS))
|
||||
async def menu_entry_parameters(message: CallbackQuery, **kwargs):
|
||||
|
||||
await clear_state(state = kwargs["state"])
|
||||
|
||||
stack = await save_navigation_context(callback_data = kwargs["callback_data"], state = kwargs["state"])
|
||||
|
||||
await parameters_menu(message = message, navigation_stack = stack, **kwargs)
|
||||
|
||||
|
||||
async def parameters_menu(message: Message | CallbackQuery,
|
||||
user: UserBase,
|
||||
callback_data: ContextData,
|
||||
navigation_stack: list[ContextData],
|
||||
**kwargs):
|
||||
|
||||
if not await authorize_command(user = user, callback_data = callback_data):
|
||||
await message.answer(await Settings.get(Settings.APP_STRINGS_FORBIDDEN))
|
||||
|
||||
settings = await Settings.get_params()
|
||||
|
||||
keyboard_builder = InlineKeyboardBuilder()
|
||||
for key, value in settings.items():
|
||||
|
||||
if not key.is_visible:
|
||||
continue
|
||||
|
||||
if key.caption_value_btn:
|
||||
caption = get_callable_str(callable_str = key.caption_value_btn, descriptor = key, entity = None, value = value)
|
||||
else:
|
||||
if key.caption_btn:
|
||||
caption = get_callable_str(callable_str = key.caption_btn, descriptor = key, entity = None, value = value)
|
||||
else:
|
||||
caption = key.name
|
||||
|
||||
if key.type_ == bool:
|
||||
caption = f"{"【✔︎】" if value else "【 】"} {caption}"
|
||||
else:
|
||||
caption = f"{caption}: {get_value_repr(value = value, field_descriptor = key, locale = user.lang)}"
|
||||
|
||||
|
||||
keyboard_builder.row(InlineKeyboardButton(text = caption,
|
||||
callback_data = ContextData(
|
||||
command = CallbackCommand.FIELD_EDITOR,
|
||||
context = CommandContext.SETTING_EDIT,
|
||||
field_name = key.name).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_PARAMETERS)), reply_markup = keyboard_builder.as_markup())
|
||||
|
||||
|
||||
from ..navigation import pop_navigation_context, get_navigation_context, clear_state
|
||||
Reference in New Issue
Block a user