Получить callback от динамической клавиатуры в python telebot
у меня есть список вроде такого group_list = ['1 group', '6 group', '7 group', '8 group'], его содержимое может меняться. Я пытаюсь сделать динамическую клавиатуру из этого списка, нашел на стаке пару вариантов, но никак не могу придумать как получить отклик от нажатия кнопки в боте?
Вот код:
def build_menu(buttons,n_cols,header_buttons=None,footer_buttons=None):
menu = [buttons[i:i + n_cols] for i in range(0, len(buttons), n_cols)]
if header_buttons:
menu.insert(0, header_buttons)
if footer_buttons:
menu.append(footer_buttons)
return menu
button_list = []
for each in group_list:
button_list.append(types.InlineKeyboardButton(each, callback_data = each))
keyboard_group=types.InlineKeyboardMarkup(build_menu(button_list, n_cols=3)) #n_cols = 1 is for single column and mutliple rows
bot.send_message(call.chat.id, text='Choose group:', reply_markup=keyboard_group)
Ответы (1 шт):
Я решал эту проблему так:
Динамическое создание кнопок в цикле (это у вас есть)
Просто делаем
register_next_step_handlerпосле нажатия на кнопки# функция создания динамической клавиатуры def select(message): # Создаем клавиатуру buttons = ["1", "2", "3"] keyboard = types.ReplyKeyboardMarkup( row_width=2, resize_keyboard=True, one_time_keyboard=True ) for button_content in buttons: btn = types.KeyboardButton(button_content) keyboard.add(btn) # Отправляем клавиатуру msg = bot.send_message( chat_id, 'Выберите', reply_markup=keyboard_consent_brand ) bot.register_next_step_handler(msg, on_selection) # Функция обработки выбора из клавиатуры def on_selection(message): selection = message.text ### В selection теперь будет текст с кнопки, на которую нажали - то есть "1", "2" или "3", дальше можно работать с нимОпицонально - удобно создавать словарик вида:
button_actions = {"Текст на кнопке": func}Где
func- функция, которую вы создали для действий по нажатию на кнопку, тогда в функцииselectionможно юзатьbutton_actions.keys(), а вon_selectionможно просто вызыватьbutton_actions[message.text].