Функционал к динамически сгенерированным inline кнопкам при создании телеграм бота
Делаю телеграм бота с БД через telebot. Пользователь вводит id и по нему выходит список предметов из БД (list_of_present), а далее создаю кнопку для каждого значения данного списка. И дальше я пытаюсь добавить функционал к каждой кнопки, то есть мне нужно чтобы при нажатии на определенную кнопку этот предмет для начала бот выдавал в чат, а потом удалял из базы данных. В моем коде он пока почему-то выдает у меня только последний предмет и ничего не удаляет. Подскажите, как сделать так, чтобы каждая кнопка была кликабельной и после нажатия этот предмет бы удалялся из БД
keyboard = InlineKeyboardMarkup()
keyboard.row_width = 2
for i in range(0, len(list_of_present)):
keyboard.add(InlineKeyboardButton(list_of_present[i], callback_data=str(i)))
bot.send_message(call.message.chat.id, 'Какой подарок из предложенных ты хочешь подарить?',
reply_markup=keyboard)
choose_from_guest = 0
for i in range(0, len(list_of_present)):
@bot.callback_query_handler(lambda c: c.data == str(i))
def reaction(call: types.CallbackQuery):
bot.answer_callback_query(
call.id) # мы указываем на что, на какую кнопку бот должен отвечать, без этого работать не будет
bot.send_message(call.message.chat.id, f"Ты выбрал {list_of_present[i]}")
return list_of_present[i]
choose_from_guest = list_of_present[i]
cursor.execute(f"DELETE from wish_list where present = {choose_from_guest}")
connect.commit()
bot.send_message(message.chat.id, "Этого подарка больше нет в базе")