Я только недавно начал изучать библиотеку 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()