Как реализовать несколько последовательных ответов(ДА-НЕТ) на вопрос в Telegram?
Надо реализовать код, чтобы работал так: бот задает вопрос - пользователь отвечает ДА, НЕТ. Если пользователь отвечает ДА, то вопросов больше нет, но, если НЕТ, то снова задается вопрос ДА, НЕТ. На первый ДА/НЕТ реагирует, а вот на второй нет - все время на команды реагирует первый блок да-нет. Как можно решить этот вопрос? Думал, что может быть, если в лямда функцию передать значение false, то обработчик остановиться и код пойдет дальше, но нет - он полностью перестает обрабатывать любые сообщения, кроме нет-да. Библиотека pyTelegramBotAPI Вот вариант такой строки. @bot.message_handler(func=lambda message: message if message.text.upper() == 'YES' or message.text.upper() == 'NO' else False) Проблема в def 3_step
@bot.message_handler(func = lambda c: True, commands=['komanda'])
def 1_step(message):
'тут код продолжается'
for i in values:
spisok.append(i)
'тут код продолжается'
bot.register_next_step_handler(msg, 2_step)
def 2_step(message):
'тут код продолжается'
bot.register_next_step_handler(msg, 3_step)
def 3_step(message):
@bot.message_handler(func=lambda message: message.text == 'YES' or 'NO')
def yes_no(message):
if message.text == 'YES':
'выполняется блок'
elif message.text == 'NO':
@bot.message_handler(func=lambda message: message.text == 'YES' or 'NO') #<- не работает
def yes_no_2(message):
if message.text == 'YES':
'выполняется код'
elif message.text == 'NO':
'выполняется код'
else:
bot.send_message(id, 'Пиши yes или no')
else:
bot.send_message(id, 'Пиши yes или no')
bot.register_next_step_handler(msg, 4_step)
Ответы (2 шт):
Используйте машину состояний
https://habr.com/ru/post/521946/
https://surik00.gitbooks.io/aiogram-lessons/content/chapter3.html
Для ответов выше, пожалуйста, внимательно читайте вопросы, человек использует телебот, а не аио - телебот имеет встроенную поддержку fsm, метод ниже уже имеет машину состояний.
bot.register_next_step_handler
Рекурсивка:
@bot.message_handler(commands=['start'])
def start_handler(message):
bot.send_message(message.chat.id, "Привет! Я бот, задающий вопросы. Готов ответить на них?")
bot.register_next_step_handler(message, first_question)
# Первый вопрос
def first_question(message):
bot.send_message(message.chat.id, "Первый вопрос: ...? (да/нет)")
bot.register_next_step_handler(message, second_question)
# Второй вопрос
def second_question(message):
if message.text.lower() == 'нет': # Если ответ - "нет"
bot.send_message(message.chat.id, "Всего хорошего!")
return # Прерываем диалог
bot.send_message(message.chat.id, "Второй вопрос: ...? (да/нет)")
bot.register_next_step_handler(message, third_question)
# Третий вопрос
def third_question(message):
if message.text.lower() == 'нет': # Если ответ - "нет"
bot.send_message(message.chat.id, "Всего хорошего!")
return # Прерываем диалог
bot.send_message(message.chat.id, "Третий вопрос: ...? (да/нет)")
# и т.д.
# Обработчик ответов на вопросы
@bot.message_handler(func=lambda message: message.text.lower() in ['да', 'нет'])
def answer_handler(message):
# Обработка ответа
if message.text.lower() == 'да':
bot.send_message(message.chat.id, "Ответ на все вопросы - да!")
Как-то так. Если ответ на вопрос нет - бот будет отвечать всего хорошего. если да - продолжать задавать вопросы, практикуйся и не забудь почитать доки телебота, много полезного)