Как получить значение нажатой инлайн-кнопки в телеграм боте, используя aiogram-dialog?

Для получения значения нажатой инлайн-кнопки в телеграм боте, используя aiogram-dialog, следует выполнить несколько шагов.

1. Установите aiogram и aiogram-dialog:

pip install aiogram aiogram-dialog

2. Создайте базовый класс для диалога:

from aiogram_dialog import DialogManager


class MyDialogManager(DialogManager):
    class Meta:
        intent_prefix = '/'

    async def on_pre_process_event(self, event: types.CallbackQuery):
        event_data = event.data
        await self.set_state_data(event_data)

    async def on_pre_process_message(self, message: types.Message):
        event_data = message.text
        await self.set_state_data(event_data)

3. Создайте диалог, в котором будет использоваться инлайн-кнопка:

from aiogram_dialog import Dialog
from aiogram_dialog.widgets.kbd import Button
from aiogram_dialog.widgets.text import Const


class MyDialog(Dialog):
    async def on_start(self, state, context):
        await state.update_data(button_value=None)
        await super().on_start(state, context)

    async def go_next(self, event):
        await event.data.update_data(button_value=event.data.selected_value)
        return await self.next()

    async def get_result(self, state, context):
        button_value = state.data.get('button_value')
        return button_value

    def widget(self):
        return Const("Выберите значение кнопки:") + Button(
            text="Кнопка 1", value="value1", on_click=self.go_next
        ) + Button(
            text="Кнопка 2", value="value2", on_click=self.go_next
        )

4. Создайте и запустите бота, используя aiogram и aiogram-dialog:

from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram_dialog import DialogRegistry
from aiogram_dialog_contrib.states import get_state_manager
from aiogram_dialog_contrib.fsm import DialogFSMContext


TOKEN = "YOUR_BOT_TOKEN"

bot = Bot(TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)

registry = DialogRegistry(dp)
sm = get_state_manager(dp)

dialog = MyDialog()
dialog_manager = MyDialogManager(dialog)

sm.register_handlers(dialog_manager)

@dp.message_handler(commands=['start'])
async def start(message: types.Message):
    dialog_manager.set_dialog_state(dialog, message.from_user.id)
    await dialog_manager.start(dialog, message)


@dp.message_handler(commands=['result'])
async def show_result(message: types.Message, state: DialogFSMContext):
    result = await dialog.get_result(await state.get_state(), state.context)
    await message.answer(f"Выбрано значение: {result}")


if __name__ == '__main__':
    from aiogram import executor

    executor.start_polling(dp)

5. Запустите вашего бота и в телеграме введите команду /start, после чего вам будет предоставлена инлайн-клавиатура с двумя кнопками. При нажатии на кнопку значение будет записываться в состояние диалога. Если введите команду /result, то бот покажет выбранное значение кнопки.

В результате, вы сможете получить значение нажатой инлайн-кнопки в телеграм боте, используя aiogram-dialog.