Сохранить данные, введённые пользователем через клавиатуру telebot

Мой бот отправляет пользователю картинку и две кнопки, пользователь нажимает на одну из них. Не могу понять, как запомнить выбор пользователя и записать его в базу, вместе с названием выбранной картинки?

Алгоритм бота: отослал фото -> пользователь нажал на одну из кнопок (оценку фото) -> записана оценка фото и наименования


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

Автор решения: Иван Ипатов

К сожалению, если вы хотите сохранить результат пользователя, не используя callback, то вам придется использовать bot.register_next_step_handler()

Если я правильно вас понял, то вам нужен функционал такого рода (словарь data, само собой нужно заменить базой данных)

def photo_kb():
    kb_photo = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True, row_width=5)
    star_1 = types.KeyboardButton("1")
    star_2 = types.KeyboardButton("2")
    star_3 = types.KeyboardButton("3")
    star_4 = types.KeyboardButton("4")
    star_5 = types.KeyboardButton("5")
    kb_photo.add(star_1, star_2, star_3, star_4, star_5)
    return kb_photo


data = {
    "photo": "",
    "stars": 0
}


@bot.message_handler(
    func=lambda message: message.text.lower() == "фото")
def photo_send(message):
    image_file = random.choice(["img/1.png", "img/2.png"])
    img = open(image_file, 'rb')
    data["photo"] = img.name
    bot.send_photo(message.chat.id, img)
    sent = bot.send_message(message.chat.id, "Оцени", reply_markup=photo_kb())
    bot.register_next_step_handler(sent, set_star)


def set_star(message):
    data['stars'] = int(message.text)
    bot.send_message(message.chat.id, f"Спасибо!")
    bot.send_message(message.chat.id, f'{data["photo"]} {data["stars"]}')
→ Ссылка