В данном варианте думаю вместо декораторов, следует использовать знакомый тебе метод
bot.register_next_step_handler(massage,save_name). В примере с
гитхаба видно как задается вопрос
какой пол? и добавляется две кнопки
м и
ж, а в том сообщении куда они передаются, удаляются, а ответ обрабатывается как текст.
def process_age_step(message):
try:
chat_id = message.chat.id
age = message.text
if not age.isdigit():
msg = bot.reply_to(message, 'Age should be a number. How old are you?')
bot.register_next_step_handler(msg, process_age_step)
return
user = user_dict[chat_id]
user.age = age
markup = types.ReplyKeyboardMarkup(one_time_keyboard=True)
markup.add('Male', 'Female')
msg = bot.reply_to(message, 'What is your gender', reply_markup=markup)
bot.register_next_step_handler(msg, process_sex_step)
except Exception as e:
bot.reply_to(message, 'oooops')
def process_sex_step(message):
try:
chat_id = message.chat.id
sex = message.text
Еще хотел бы предложить внести изменения в код, в таких случаях:
keybord = keybord_yes_or_no()
bot.send_message(massage.from_user.id, text= quest, reply_markup=keybord)
Если генерировать кнопки таким способом, будет на одну строчку меньше:
def day_btns():
days = types.InlineKeyboardMarkup(row_width=7)
days.add(*[types.InlineKeyboardButton(text='Day '+str(i),callback_data='call'+str(i)) for i in range(1,8)])
return days
#Пример использования
bot.send_message(message.chat.id,'Days of week',reply_markup=day_btns())
#Хватает и одной строки
Так же если интересно
вот полный образец моего тестового бота