Окна и диалоги¶
В maxo.dialogs интерфейс пользователя строится из окон (Window), которые объединяются в диалоги (Dialog).
Window¶
Window - базовый кирпичик интерфейса. Каждое окно соответствует одному сообщению бота с клавиатурой. Окно привязывается к конкретному состоянию конечного автомата (State).
Создание окна:
from maxo.dialogs import Window
from maxo.dialogs.widgets.text import Const
from maxo.fsm import State, StatesGroup
class MySG(StatesGroup):
first = State()
window = Window(
Const("Текст окна"),
state=MySG.first,
# Опционально: disable_web_page_preview, parse_mode
)
Dialog¶
Dialog - это набор окон, связанных логикой переходов. Диалог управляет жизненным циклом окон и хранит их общее состояние.
from maxo.dialogs import Dialog
dialog = Dialog(
window1,
window2,
window3,
# другие окна...
)
Важно
Все окна внутри одного диалога должны принадлежать одному StatesGroup.
Жизненный цикл диалога¶
Диалог можно рассматривать как функцию, которая:
Запускается (вызов через
DialogManager.start())Получает данные (аргумент
start_data)Меняет внутренние состояния (переключение между окнами)
Завершается (возврат через
DialogManager.done())Может возвращать результат (параметр
result)
Вы можете перехватывать эти события с помощью параметров on_start, on_close, on_process_result при создании Dialog:
from maxo.dialogs import Dialog, DialogManager
async def on_dialog_start(start_data: dict, manager: DialogManager):
print("Dialog started with data:", start_data)
dialog = Dialog(
window,
on_start=on_dialog_start,
)