Создание обработчика по нажатию на inline кнопки и получение текста этой кнопки

Создаю телеграм бота на основе telebot У меня динамически создаются кнопки в массиве

keyboard = InlineKeyboardMarkup()
keyboard.row_width = 2
for i in range(0, len(adress)):
    keyboard.add(InlineKeyboardButton(adress[i].text, callback_data=adress[i].text))
bot.send_message(cid, 'Выберите адрес парковки', reply_markup=keyboard)

Как мне отследить нажатие одной из кнопок и получить из неё текст? У всех кнопок разный callback_data

Если бы я знал их callback_date, то я бы сделал так:

@bot.callback_query_handler(func=lambda c:True)
def ans(c):
    cid = c.message.chat.id
    if c.data == "callback_data":

Но как это сделать в моём случае если callback_data формируется динамически?


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

Автор решения: MyZik
keyboard = InlineKeyboardMarkup()
keyboard.row_width = 2
for i in range(0, len(adress)):
    keyboard.add(InlineKeyboardButton(adress[i].text, callback_data=f"address_{adress[i].text}"))
bot.send_message(cid, 'Выберите адрес парковки', reply_markup=keyboard)

Хэндлер:

@bot.callback_query_handler(lambda query: query.data.startswith("address_"))
def ans(query):
    chat_id = query.message.chat.id
    address = query.data.split("_")[1] # адрес, с которым можно работать
→ Ссылка
Автор решения: Илья

В callback_data указывайте адрес callback_data=f"address_{adress[i].text}"

Обработчик

@bot.callback_query_handler(lambda query: query.data.startswith("address_")) def ans(query): str = query.data res_str = str.replace('address_', '')

В переменной res_str будет callback_data вашей кнопки

→ Ссылка