@VasiliyGubenkov

Как выйти из всех выполняемых функций?

Я только недавно начал изучать библиотеку telebot. Делаю простенького бота, но у меня возникла проблема, я чувствую что она очень банальная., но я не могу найти синтаксис(или команду) которая мне нужна. Суть в чем:
Бот анализирует текст, который пользователь ему отправляет, и когда находит слово, похожее на "загадка", то запускает функцию, которая загадывает пользователю загадку, ждет ответ, получает ответ, сравнивает его с правильным и говорит: 'ответ верный' или "ответ не верный, попробуйте снова'" Еще есть кнопка "Получить правильный ответ и закрыть загадку". Ну вообщем смысл вы поняли.
Когда пользователь дает правильный ответ, моя функция успешно заканчивается как True, и бот выходит в (даже не знаю как это называется) типо "общий режим", и дальше в общем режиме ждет и анализирует, что пользлватель будет писать в бот дальше. Т.е. этот путь у меня работает.
Когда пользователь дает неправильный ответ, функция ловит его сообщение, и запускается снова, на предмен проверки ответа. Т.е. эта штука у меня тоже успешно работает.
А вот с кнопкой "узнать правильный ответ и закрыть загадку" у меня проблема. Мой код выдает правильный ответ пользователю в чат, как я и хочу,
НО!!!
функция проверки ответов у меня не завершается, т.е. все следующие сообщения в чате, у меня по-прежнему ловятся функцией проверки правиьного ответа. А мне надо чтобы бот вышел из этой последней функции в общий режим.
Другими словами. исходя из моего кода, от должен опять детектить слово "загадка" а не искать правильный ответ на предыдущую.
Но я не хочу чтобы это был /start, или чтобы в чат выводились какие-либо сообщения.
Просто, чтобы бот вышел из этой, последней функции, и дальше ждал команд.

Чтобы было понятнее: загадка "Не смотри ты так сурово, молочка нам дай..." Правильный ответ "корова"

Итак мой код:

@bot.message_handler()
def riddle(message):
    markup = types.InlineKeyboardMarkup()
    markup.add(types.InlineKeyboardButton('Узнать правильный ответ и закрыть загадку', callback_data='defeat'))
    if 'загад'in message.text.lower():
        bot.send_message(message.chat.id, f'<strong>Не гляди ты так сурово! Молочка нам дай, ... !</strong>', reply_markup=markup, parse_mode='html')
        bot.register_next_step_handler(message, answer)
    else:
        bot.reply_to(message, f"<strong>Я задаю загадки, попроси меня...  </strong>", parse_mode='html')
def answer(message):
    markup = types.InlineKeyboardMarkup()
    markup.add(types.InlineKeyboardButton('Узнать правильный ответ и закрыть загадку', callback_data='defeat'))
    if message.text.lower() == 'корова':
        bot.send_message(message.chat.id, 'Правильный ответ! Попроси меня загадать следующую загадку!')
    else:
        bot.send_message(message.chat.id, 'Неправильный ответ', reply_markup = markup)
        bot.register_next_step_handler(message, answer)

@bot.callback_query_handler(func=lambda callback: True)
def loos(callback):
    if callback.data == 'defeat':
        bot.send_message(callback.message.chat.id, 'Правильный ответ: Корова')

#@bot_callback_query_handler(func=lambda callback: True)

bot.infinity_polling()
  • Вопрос задан
  • 31 просмотр
Пригласить эксперта
Ответы на вопрос 1
@VasiliyGubenkov Автор вопроса
Я разобрался, в декораторе callback нужна следующая команда, чтобы выйти в общий режим обработки команд.
bot.clear_step_handler_by_chat_id(callback.message.chat.id)

Вопрос закрыт.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы