Как получить название Inline кнопки в aiogram python
мне надо получить текст inline кнопки, но у меня вылезает ошибка, может быть я взял не правильную команду
Мне надо взять название кнопки и при нажатии вставить название
На второй картинке я нажимаю на название бразильский бурбон и в ответе мне бот должен написать фразу с названием

Текст который должен отправляться
Coffie_sort_text='''
Вы выбрали {sort} ?\n
Укажите в сколько килограмм вам нужно ?\n
? Если вы решили выбрать другой кофе нажмите кнопку отмена ?
'''
'''2 Хендлера, первый для меню с сортами, второй на нажатие кнопки Бразильский Бурбон'''
@dp.callback_query(Text("Coffie_sort_buy_button"))
async def send_random_value(callback: types.CallbackQuery):
await callback.message.answer(text.Coffie_sort_buy_text, reply_markup=Button.Coffie_sort_buy_button_menu)
@dp.callback_query(Text("Brazilian_Bourbon_Santos"))
async def send_random_value(callback: types.CallbackQuery):
await callback.message.answer(text.Coffie_sort_text.format(sort=types.KeyboardButton.text))
'''Создание кнопок и меню'''
Coffie_sort_buy_button = [[InlineKeyboardButton(text="Бразильский Бурбон Сантос", callback_data="Brazilian_Bourbon_Santos"),
InlineKeyboardButton(text="Колумбия Эксельсо", callback_data="Colombia_Excelso")],
[InlineKeyboardButton(text="Марагоджип", callback_data="Maragogype"),
InlineKeyboardButton(text="Эль Сальвадор Халатенанго", callback_data="El_Salvador_Halatenango")],
[InlineKeyboardButton(text="Антигуа", callback_data="Antigua"),
InlineKeyboardButton(text="Кобано", callback_data="Kobano")],
[InlineKeyboardButton(text="Маракайбо", callback_data="maracaibo"),
InlineKeyboardButton(text="Эфиопия Мокко", callback_data="Ethiopia_Mocha")],
[InlineKeyboardButton(text="Йемен Моха", callback_data="Yemen_Moha"),
InlineKeyboardButton(text="Оксака", callback_data="Oksaka")],
[InlineKeyboardButton(text="Подробнее о каждом сорте", callback_data="More about sort")]
]
Coffie_sort_buy_button_menu = InlineKeyboardMarkup(inline_keyboard=Coffie_sort_buy_button)
Ответы (2 шт):
Насколько я понял, это то, что тебе надо. В массиве кнопок указываешь параметр callback_data
buttons = [
[
types.InlineKeyboardButton(text="1", callback_data="opt_first_option"),
types.InlineKeyboardButton(text="2", callback_data="opt_second_option")
],
[types.InlineKeyboardButton(text="Подтвердить", callback_data="opt_finish")]
]
keyboard = types.InlineKeyboardMarkup(inline_keyboard=buttons)
Тогда нажатие кнопки будет равносильно отправлению сообщения с текстом, который ты указал в callback_data. Доставать можно просто вот так:
#вызываем функцию которая покажет нам кнопки
@dp.message(Command("test"))
async def cmd(message: types.Message):
user_data[message.from_user.id] = 0
await message.answer("Выберите опцию", reply_markup=get_keyboard())
#реагируем на кнопки
@dp.callback_query(Text(startswith="opt_"))
async def callbacks(callback: types.CallbackQuery):
user_value = user_data.get(callback.from_user.id, 0)
action = callback.data.split("_")[1]
if action == "first_option":
#do smth
elif action == "second_option":
#do_smth
elif action == "finish":
#do_smth
await callback.answer()
Так чтобы не писать много текста и хендлеров для бота, я сделал один хендлер на несколько кнопок спасибо ответу сверху, он меня натолкнул на хорошую мысль (и помог написать меньше кода), которую я чуть-чуть по другом сделал(из-за нехватки времени)
'''Текст для всех кнопок'''
Coffie_sort_text='''
Вы выбрали {sort} ?\n
Укажите в сколько килограмм вам нужно ?\n
? Если вы решили выбрать другой кофе нажмите кнопку отмена ?
'''
'''Создание кнопок и клавиатуры'''
Coffie_sort_buy_button = [[InlineKeyboardButton(text="Бразильский Бурбон Сантос", callback_data="BrazilianBourbonSantos_button"),
InlineKeyboardButton(text="Колумбия Эксельсо", callback_data="ColombiaExcelso_button")],
[InlineKeyboardButton(text="Марагоджип", callback_data="Maragogype_button"),
InlineKeyboardButton(text="Эль Сальвадор Халатенанго", callback_data="ElSalvadorHalatenango_button")],
[InlineKeyboardButton(text="Антигуа", callback_data="Antigua_button"),
InlineKeyboardButton(text="Кобано", callback_data="Kobano_button")],
[InlineKeyboardButton(text="Маракайбо", callback_data="Maracaibo_button"),
InlineKeyboardButton(text="Эфиопия Мокко", callback_data="EthiopiaMocha_button")],
[InlineKeyboardButton(text="Йемен Моха", callback_data="YemenMoha_button"),
InlineKeyboardButton(text="Оксака", callback_data="Oksaka_button")],
[InlineKeyboardButton(text="Подробнее о каждом сорте", callback_data="MoreAboutSort")]
]
Coffie_sort_buy_button_menu = InlineKeyboardMarkup(inline_keyboard=Coffie_sort_buy_button)
'''Первый хендлер на команду /Coffee, показывает меню с сортами'''
@dp.message(Command("Coffee"))
async def cmd(message: types.Message):
await message.answer(Coffie_sort_buy_text, reply_markup=Coffie_sort_buy_button_menu)
'''Второй хендлер для ответа на нажатия кнопок'''
@dp.callback_query(Text(["BrazilianBourbonSantos_button","ColombiaExcelso_button","Maragogype_button", "ElSalvadorHalatenango_button","Antigua_button","Kobano_button","Maracaibo_button","EthiopiaMocha_button","YemenMoha_button","Oksaka_button"]))
async def send_random_value(callback: types.CallbackQuery):
for i in range(0, len(Button.Coffie_sort_buy_button)):
for j in range(0, len(Button.Coffie_sort_buy_button[i])):
if callback.data == Button.Coffie_sort_buy_button[i][j].callback_data:
await callback.message.answer(text.Coffie_sort_text.format(sort=Button.Coffie_sort_buy_button[i][j].text))
Теперь при нажатии на любую кнопку у меня будет выводится текст с разными названиями сортов
