@igreklpofrss

Как сделать несколько ответов(ДА-НЕТ) на вопрос в Телеграм?

Мне надо реализовать код, чтобы работал так: бот задает вопрос - пользователь отвечает ДА, НЕТ. Если пользователь отвечает ДА, то вопросов больше нет, но, если НЕТ, то снова задается вопрос ДА, НЕТ. Первый заданный вопрос работает, а вот второй декоратор игнорируется интерпретатором. И если я снова пишу yes-no, то он продолжает выполнять первый блок. Что я не так делаю и как правильно оформить?
@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)
  • Вопрос задан
  • 51 просмотр
Пригласить эксперта
Ответы на вопрос 2
HemulGM
@HemulGM
Delphi Developer, сис. админ
Состояние ответов для каждого юзера храни
Ответ написан
Комментировать
@link_vrb
@bot.message_handler(func = lambda c: True, commands=['komanda'])
def one_step(message):
    'тут код продолжается'
    for i in values:
        spisok.append(i)
    'тут код продолжается'
    bot.register_next_step_handler(msg, two_step)

def two_step(message):
     'тут код продолжается'
    bot.register_next_step_handler(msg, three_step)

def three_step(message):
    msg_low=lower(message.text)
    if msg_low == 'yes':
        'выполняется блок'
    elif msg_low == 'no':
        while True:
            @bot.message_handler(commands=['yes', 'YES', 'Yes', 'NO', 'no', 'No'])
            def yes_no_2(message):
                message_low=lower(message.text)
                if message_low == 'yes':
                    'выполняется код'
                elif message_low == 'no':
                    'выполняется код'
                else:
                    bot.send_message(id, 'Пиши yes или no')
    else:
        bot.send_message(id, 'Пиши yes или no')
bot.register_next_step_handler(msg, four_step)

Я изменил:
1) Создал переменные со значением сообщения в нижнем регистре, чтоб небыло ошибок если в чате человек пишет yes а программа сравнивает yes и YES и не проходит дальше так как они не равны.
2) Изменил способ активации функций, так как в прошлой версии программа могла из-за этого работать не так как надо.
3) Изменил названия функций так как нельзя делать функцию, начинающеюся на цифру.

Примечание: Если будут ошибки с табуляцией: замени все группы пробелов из 4 штук : ' ' на Tab.
Ответ написан
Ваш ответ на вопрос

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

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