Функционал к динамически сгенерированным 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, "Этого подарка больше нет в базе")

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