gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:54:38 25 4
gpt4 key购买 nike

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

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

    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

“@bot.message_handler()”是否会运行,即使我们将它放在 if 语句中?

最佳答案

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

这样做的正确方法是反转逻辑:在程序的顶层定义消息处理函数,并在函数内的 if 中决定您应该做什么。

关于python - 在 telebot @bot.message_handler() 中运行,即使它保存在 if 语句中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63908713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com