While loop без остановки, при написании телеграмм бота

Diglerharibo

Новичок
Пользователь
Авг 17, 2020
21
1
3
У меня возникла проблема с while loop. Что делает этот блок кода: когда пользователь вводит 'Course registration' программа запрашивает ввод пользователем названия. После ввода у пользователя спрашивается, правильно ли он все ввел. И идея проста, просто зациклить этот момент, позволив пользователю уточнять название сколько угодно. Когда я запускаю этот код у меня while loop доходит до bot.send_message - write your course name и постоянно выводит это в чат пользователя. Я попытался решить эту проблему через next step handler, но это не помогло до этого делал через message handler, тоже не работает. По ощущениям он до ходит до отправки вопроса о названии курса и потом снова начинает сначала, не проходя функцию и next step handler. Вопрос в том, как это исправить? Я уже видел, что можно решить через зацикливание функцией, но хотелось бы разобраться с while.

Пояснения: строка с markup просто убирает кнопки из предыдущей жизнедеятельности бота


Python:
course_name = 0
undef_name = True

@bot.message_handler(regexp = 'Course registration')
def coursereg(message):
    while undef_name:
        markup = types.ReplyKeyboardRemove(selective=False)
        msg = bot.send_message(message.chat.id, 'Write your course name:',
                               reply_markup=markup)
        def name(message):
            global course_name
            course_name = message.text
            bot.send_message(message.chat.id,
                             f'Is *\{course_name}* yours course actual name?',
                             parse_mode='MarkdownV2')
            markup = types.ReplyKeyboardMarkup(row_width=2)
            yes_button = types.KeyboardButton('Yes')
            no_button = types.KeyboardButton('No')
            markup.add(yes_button, no_button)
            bot.send_message(message.chat.id, 'Hi manager!', reply_markup=markup)
            @bot.message_handler(func=lambda message: True)
            def repeat(message):
                if message == 'Yes':
                    undef_name = False
                elif message == 'No':
                    pass
                else:
                    bot.send_message(message.chat.id,
                                     'choose one of the suggested options')
        bot.register_next_step_handler(msg, name)
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
По ощущениям он до ходит до отправки вопроса о названии курса и потом снова начинает сначала, не проходя функцию и next step handler
воспользуйтесь дебагером, больше не будет ощущений, будет четкое понимание
 

Форум IT Специалистов