Доброго времени суток!
Предыстория.
Мне недавно дали задание сделать бота опросника. Я понятия не имел, как его сделать, единственное, что я умел на тот момент - пользоваться бд и создавать обычные кнопки. Поэтому и придумал такой немного кривой способ:
1) создаем строку, в которой будет содержаться весь путь наших вопросов и ответов на них, разделяя такими знаками, которые никогда(возможно) не встретятся у вас в сообщениях. Например есть у вас вопрос "Сколько вам лет?" и предполагаемые ответы: "2", "10", "22".
И мы записываем их в строку <<Сколько вам лет?№№№№2$$$10$$$22^^^^^>>
Знаками '^^^^^' мы отделяем вопросы.
Знаками '№№№№' отделяем вопрос от предполагаемых ответов и '$$$' разделяет предполагаемые ответы
2) Логично, что при создании вопроса мы сплитуем эту строку, и callback_data присваиваем номер вопроса. Чтобы ориентироваться по нашей строке.
Вот код создание вопроса:
elif message.text == 'Опрос':
opros = True
bot.send_message(message.chat.id, 'Напишите текст опроса')
elif opros == True:
opros = False
text = message.text
bot.send_message(message.chat.id, 'Все ответы через $$$')
opros1 = True
elif opros1 == True:
opros1 = False
answers = message.text.split('$$$')
bottons = []
for i in range(len(answers)):
botton = [InlineKeyboardButton(answers[i], callback_data='sale+' + answers[i])]
bottons.append(botton)
reply_markup = InlineKeyboardMarkup(bottons)
bot.send_message(message.chat.id, text=text, reply_markup=reply_markup)
base_w.save(text + '№№№№' + message.text + '^^^^') #сохраняем в бд
message.text = 'Опрос'
answer_questions(bot, update) #запускаем заново
Это код инициализации опроса:
elif message.text == 'Инициализация':
l = base_w.upload() #достаем из бд нашу строку
te = l.split('^^^^')
I = 0 # создаем счетчик
u = te[I].split('№№№№') #делим вопрос и ответы
text = u[0]
answers = u[-1].split('$$$')
bottons = []
for i in range(len(answers)):
botton = [InlineKeyboardButton(answers[i], callback_data=str(I) + '+' + answers[i])] # важная часть, где мы callback_data присваиваем номер вопроса
bottons.append(botton)
reply_markup = InlineKeyboardMarkup(bottons)
bot.send_message(message.chat.id, text=text, reply_markup=reply_markup)
И функция обработчика:
def button(bot, update):
I = int(str((query.data).split('+')[0])) + 1 #увеличиваем счетчик
l = base_w.upload()
te = l[-2].split('^^^^')
# и повторяем...
Если что-то не понятно, или просто код нужно будет скинуть, напиши в telegram @andrew_2046
Удачи!