fix navigation
This commit is contained in:
@@ -1,4 +1,9 @@
|
|||||||
from aiogram.types import Message, CallbackQuery
|
from aiogram.types import Message, CallbackQuery
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from qbot.main import QBotApp
|
||||||
|
|
||||||
from ..context import CallbackCommand
|
from ..context import CallbackCommand
|
||||||
|
|
||||||
from ....utils.navigation import (
|
from ....utils.navigation import (
|
||||||
@@ -44,8 +49,11 @@ async def route_callback(message: Message | CallbackQuery, back: bool = True, **
|
|||||||
elif context.command == CallbackCommand.USER_COMMAND:
|
elif context.command == CallbackCommand.USER_COMMAND:
|
||||||
import qbot.bot.handlers.user_handlers.main as user_handler
|
import qbot.bot.handlers.user_handlers.main as user_handler
|
||||||
|
|
||||||
|
app: "QBotApp" = kwargs["app"]
|
||||||
|
cmd = app.bot_commands.get(context.user_command.split("&")[0])
|
||||||
|
|
||||||
await user_handler.cammand_handler(
|
await user_handler.cammand_handler(
|
||||||
message, from_callback_query=True, **kwargs
|
message=message, cmd=cmd, **kwargs
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
raise ValueError(f"Unknown command {context.command}")
|
raise ValueError(f"Unknown command {context.command}")
|
||||||
|
|||||||
@@ -335,12 +335,13 @@ async def process_field_edit_callback(message: Message | CallbackQuery, **kwargs
|
|||||||
"callback_data": ContextData(
|
"callback_data": ContextData(
|
||||||
command=CallbackCommand.USER_COMMAND,
|
command=CallbackCommand.USER_COMMAND,
|
||||||
user_command=callback_data.user_command,
|
user_command=callback_data.user_command,
|
||||||
data=callback_data.data,
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
return await cammand_handler(message=message, **kwargs)
|
cmd=app.bot_commands.get(callback_data.user_command.split("&")[0])
|
||||||
|
|
||||||
|
return await cammand_handler(message=message, cmd=cmd, **kwargs)
|
||||||
|
|
||||||
clear_state(state_data=state_data)
|
clear_state(state_data=state_data)
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ from qbot.bot.handlers.editors.main import field_editor
|
|||||||
from qbot.bot.handlers.common.routing import route_callback
|
from qbot.bot.handlers.common.routing import route_callback
|
||||||
from qbot.utils.serialization import deserialize
|
from qbot.utils.serialization import deserialize
|
||||||
from qbot.utils.main import get_send_message
|
from qbot.utils.main import get_send_message
|
||||||
from qbot.model.descriptors import CommandCallbackContext
|
from qbot.model.descriptors import BotCommand, CommandCallbackContext
|
||||||
from qbot.model.settings import Settings
|
from qbot.model.settings import Settings
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
@@ -37,7 +37,7 @@ async def command_text(message: Message, **kwargs):
|
|||||||
state_data = await state.get_data()
|
state_data = await state.get_data()
|
||||||
kwargs["state_data"] = state_data
|
kwargs["state_data"] = state_data
|
||||||
|
|
||||||
await cammand_handler(message=message, callback_data=callback_data, **kwargs)
|
await process_command_handler(message=message, callback_data=callback_data, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
@router.callback_query(ContextData.filter(F.command == CallbackCommand.USER_COMMAND))
|
@router.callback_query(ContextData.filter(F.command == CallbackCommand.USER_COMMAND))
|
||||||
@@ -46,19 +46,36 @@ async def command_callback(message: CallbackQuery, **kwargs):
|
|||||||
state_data = await state.get_data()
|
state_data = await state.get_data()
|
||||||
kwargs["state_data"] = state_data
|
kwargs["state_data"] = state_data
|
||||||
|
|
||||||
await cammand_handler(message=message, **kwargs)
|
await process_command_handler(message=message, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
async def cammand_handler(message: Message | CallbackQuery, **kwargs):
|
async def process_command_handler(message: Message | CallbackQuery, **kwargs):
|
||||||
callback_data: ContextData = kwargs["callback_data"]
|
|
||||||
state: FSMContext = kwargs["state"]
|
|
||||||
state_data: dict = kwargs["state_data"]
|
state_data: dict = kwargs["state_data"]
|
||||||
|
callback_data: ContextData = kwargs["callback_data"]
|
||||||
app: "QBotApp" = kwargs["app"]
|
app: "QBotApp" = kwargs["app"]
|
||||||
cmd = app.bot_commands.get(callback_data.user_command.split("&")[0])
|
cmd = app.bot_commands.get(callback_data.user_command.split("&")[0])
|
||||||
|
|
||||||
if cmd is None:
|
if cmd is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if cmd.clear_navigation:
|
||||||
|
state_data.pop("navigation_stack", None)
|
||||||
|
state_data.pop("navigation_context", None)
|
||||||
|
|
||||||
|
if cmd.register_navigation:
|
||||||
|
clear_state(state_data=state_data)
|
||||||
|
save_navigation_context(callback_data=callback_data, state_data=state_data)
|
||||||
|
|
||||||
|
await cammand_handler(message=message, cmd=cmd, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
async def cammand_handler(message: Message | CallbackQuery, cmd: BotCommand, **kwargs):
|
||||||
|
callback_data: ContextData = kwargs["callback_data"]
|
||||||
|
state: FSMContext = kwargs["state"]
|
||||||
|
state_data: dict = kwargs["state_data"]
|
||||||
|
app: "QBotApp" = kwargs["app"]
|
||||||
|
|
||||||
entity_data_dict: dict = state_data.get("entity_data")
|
entity_data_dict: dict = state_data.get("entity_data")
|
||||||
form_data = (
|
form_data = (
|
||||||
{
|
{
|
||||||
@@ -106,20 +123,11 @@ async def cammand_handler(message: Message | CallbackQuery, **kwargs):
|
|||||||
|
|
||||||
return await field_editor(message=message, **kwargs)
|
return await field_editor(message=message, **kwargs)
|
||||||
|
|
||||||
if cmd.clear_navigation:
|
|
||||||
state_data.pop("navigation_stack", None)
|
|
||||||
state_data.pop("navigation_context", None)
|
|
||||||
|
|
||||||
if cmd.register_navigation:
|
|
||||||
clear_state(state_data=state_data)
|
|
||||||
save_navigation_context(callback_data=callback_data, state_data=state_data)
|
|
||||||
|
|
||||||
await cmd.handler(callback_context)
|
await cmd.handler(callback_context)
|
||||||
|
|
||||||
if callback_context.register_navigation:
|
if callback_context.register_navigation:
|
||||||
await state.set_data(state_data)
|
await state.set_data(state_data)
|
||||||
|
|
||||||
# if command.register_navigation:
|
|
||||||
stack, navigation_context = get_navigation_context(state_data=state_data)
|
stack, navigation_context = get_navigation_context(state_data=state_data)
|
||||||
back_callback_data = pop_navigation_context(stack=stack)
|
back_callback_data = pop_navigation_context(stack=stack)
|
||||||
if back_callback_data:
|
if back_callback_data:
|
||||||
|
|||||||
Reference in New Issue
Block a user