Помогите создать обработчик нажатой кнопки в TELEGRAM

Учусь создавать чат-боты в Telegramm. Получилось создать кнопки из списка, но не получается обработчик нажатых кнопок создать. Цель чтобы при нажатии кнопок из списка, вылазило сообщение с этим как раз названием самой кнопки. Помогите пожалуйста!!!!!

answers = []
@bot.message_handler(content_types=['text'])
def inline_key(a):
    if a.text == "/start":
        js = types.InlineKeyboardMarkup(row_width=1)
        js_btns = []
        for i, answer in enumerate(answers):
            js_btns.append(types.InlineKeyboardButton(text=answer, callback_data=str(i)))
        js.add(*js_btns)
        bot.send_message(a.chat.id, 'Здравствутйте! Что будем читать?', reply_markup=js)


@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    query = callback_query
    bot.answer_callback_query(call.id, show_alert=False, text="Вы выбрали"+ query)

Ответы (1 шт):

Автор решения: D. Violet

Если у вас есть строка, содержащая литералы Python, такие как строки, float и т. д., Вы можете использовать ast.literal_eval для оценки ее значения. Это добавляет возможность разрешать только определенный синтаксис.

таким образом, используя ast.literal_eval мы можем получить номер нажатой кнопки:

answers = ['123', '456', '789']

@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
    print(ast.literal_eval(call.data))
>>> 0  # нажали кнопку 123
>>> 1  # нажали кнопку 456
>>> 2  # нажали кнопку 789

используя ast.literal_eval(call.data) как индекс для answers мы получим объект списка:

print(answers[int(ast.literal_eval(call.data))])
>>> 456  # при нажатии на кнопку '456'

собираем всё вместе:

import ast    
bot.answer_callback_query(call.id, show_alert=False, text="Вы выбрали" + answers[int(ast.literal_eval(call.data))])
→ Ссылка