Как сделать так, чтобы декоратор @bot.message_handler прекращал свою работу?
Запланировал написать викторину в телеграм боте. Мне нужно, чтобы после того, как человек написал правильный ответ на первый вопрос, задекорированная функция прекращала работать, а начинала работать другая функция. По логике программы вроде все верно, но он продолжает обрабатывать именно первый декоратор. Что подскажите?
Вот конструктор самого кода:
import telebot
from telebot import types
bot = telebot.TeleBot("TOKEN")
@bot.message_handler(commands=["start"])
def start(message):
murkup = types.InlineKeyboardMarkup(row_width=1)
button1 = types.InlineKeyboardButton('Начать!', callback_data="start")
murkup.add(button1)
bot.send_message(message.chat.id, "Привет, {0.first_name}!\n"
"Начинаем квест!".format(message.from_user), reply_markup=
murkup)
@bot.callback_query_handler(func=lambda call: True)
def start(call):
if call.data == "start":
bot.send_message(call.message.chat.id, f'вот первый вопрос')
@bot.message_handler()
def answer (message):
mes = message.text
mes = mes.lower()
if mes == "правильный ответ":
murkup = types.InlineKeyboardMarkup(row_width=1)
button1 = types.InlineKeyboardButton('Следующий вопрос', сallback_data="second_question")
murkup.add(button1)
bot.send_message(message.chat.id, f'Это правильный ответ!', reply_markup= murkup)
else:
bot.send_message(message.chat.id, f'Неправильно! думай еще!')
elif call.data == "second_question":
bot.send_message(call.message.chat.id, f'Вот тут второй вопрос')
@bot.message_handler()
def two_answer (message):
mes = message.text
mes = mes.lower()
if mes == "правильный ответ":
bot.send_message(message.chat.id, f'Это правильный ответ!')
else:
bot.send_message(message.chat.id, f'Неправильно! думай еще!')
bot.polling(non_stop=True)
Ответы (1 шт):
Автор решения: mazik7512
→ Ссылка
Вместо вложенных в друг друга хендлеров, вам нужно использовать функцию register_next_step_handler(message, next_handler).