Сохранить данные, введённые пользователем через клавиатуру 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"]}')