Для получения значения нажатой инлайн-кнопки в телеграм боте, используя 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.