TelegramBot не отслеживает сообщения

Diglerharibo

Новичок
Пользователь
Авг 17, 2020
21
1
3
Python:
            flag = 0
            while flag == 0:
                @bot.message_handler(regexp = 'Yes')
                def approvename(message):
                    bot.send_message(message.chat.id, 'Name is approved')
                    nonlocal flag
                    flag += 1
                    pass
                @bot.message_handler(regexp = 'No')
                def denyname(message):
                    coursename()
                    while course_name_last == course_name:
                        time.sleep(1)
                    nameset(course_name)
                    #here mistake is possible (not global)
                    course_name_last = course_nam
                    nonlocal flag
                    flag += 1
                time.sleep(1)

Сделал внутри функции небольшую программу. На этом моменте программа задерживается и ожидает ввода от пользователя. Цикл на основе while с перерывом в 1 секунду. В телеграм ввожу "No", но ничего не происходит. Через дебагер проверил, программа проходит через message_handler -ы, но ни один так и не реагирует ни на Yes ни на No (ожидается, что после message handler -a запустится функция, но они пропускаются). Есть идеи?
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
435
119
43
Есть идея вынести декораторы перед циклом, а ещё лучше в начало скрипта, таким образом определив их только 1 раз.
 

Diglerharibo

Новичок
Пользователь
Авг 17, 2020
21
1
3
Есть идея вынести декораторы перед циклом, а ещё лучше в начало скрипта, таким образом определив их только 1 раз.
У меня есть программа, которую я хочу закрепить за одним декоратором, чтобы как-то сгруппировать процесс. Типа есть класс, который должен построить пользователь и он вводит данные. Поэтому я все это объединил в одну функцию. Я скину тут код, если уже есть опыт работы с декораторами, то подскажи, как сгруппировать все это, чтобы все норм работало. Можно ли так формировать программу, надеюсь я понятно объяснил свою затею

Python:
@bot.message_handler(regexp = 'Manager')
def manager(message):
    markup = types.ReplyKeyboardMarkup(row_width=2)
    reg_button = types.KeyboardButton('Course registration')
    man_button = types.KeyboardButton('Course management')
    markup.add(reg_button, man_button)
    bot.send_message(message.chat.id, 'What we gonna do?', reply_markup=markup)
   
    @bot.message_handler(regexp = 'Course registration')
    def coursereg(message):
        global course_name_last
        def coursename():
            bot.send_message(message.chat.id, 'Set name of your course:')
            @bot.message_handler(func = lambda message: True)
            def namehandle(message):
                global course_name
                course_name = message.text
        def nameset(course_name):
            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, f'Is *\{course_name}* correct name?',
                             parse_mode = 'MarkdownV2', reply_markup=markup)
            flag = 0
            while flag == 0:
                @bot.message_handler(regexp = 'Yes')
                def approvename(message):
                    bot.send_message(message.chat.id, 'Name is approved')
                    nonlocal flag
                    flag += 1
                    pass
                @bot.message_handler(regexp = 'No')
                def denyname(message):
                    coursename()
                    while course_name_last == course_name:
                        time.sleep(1)
                    nameset(course_name)
                    #here mistake is possible (not global)
                    course_name_last = course_nam
                    nonlocal flag
                    flag += 1
                time.sleep(1)
        coursename()
        while course_name_last == course_name:
            time.sleep(1)
        nameset(course_name)
        #here mistake is possible (not global)
        course_name_last = course_name
 

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