在 telebot @bot.message_handler() 运行 中,即使它保存在 if 语句中

In telebot @bot.message_handler() running even if it is kept inside a if statement

我对编码和 python 比较陌生。我正在尝试使用 telebot 制作电报机器人。 我有一个流程,我必须去。例如:在 /start 之后,我应该收到一条短信。所以我创建了一个 running_work_list ,其中我的工作流按顺序排列,完成后,我删除了索引 0 元素。 'start' 是数组中的第一个元素。 所以我尝试实现这样的东西,这样我就可以轻松地对每个步骤进行编码,而不是查看输入并做出决定。

但是尽管放入了 if 语句,'@bot.message_handler()' 即使条件失败也是 运行ning。

    if running_work_list[0]=='start':
        print('inside if')
        @bot.message_handler(commands=['start','new test'])
        def start(message):
            print('user sent start')
            bot.send_message(message.chat.id,welcome_message)
            running_work_list.pop(0)
            print(f'work flow deciding list {running_work_list}')
        @bot.message_handler(content_types=['text','photo','poll'])
        def bot_intro(message):
            print('here')
            print(f'user sent {message.text}')
            bot.send_message(message.chat.id,BOT_INTRO_MSG)

下面是我得到的输出。用户先发送了 /start,然后发送了一些其他随机文本。

    inside if
    user sent start
    work flow deciding list ['test_name', 'test_description', 'test_time', 'test_image', 'test_poll']
    here
    user sent fdf

即使我们将它放在 if 语句中,'@bot.message_handler()' 也会 运行 吗?

执行 @bot.message_handler 装饰器标记当消息匹配您作为参数传递的过滤器(content_typescommands)时要调用的函数。由telebot库直接调用,注册后不执行if语句。

正确的做法是颠倒逻辑:在程序的顶层定义消息处理函数,然后在函数的 if 中决定你应该做什么。