在 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_types
或 commands
)时要调用的函数。由telebot
库直接调用,注册后不执行if
语句。
正确的做法是颠倒逻辑:在程序的顶层定义消息处理函数,然后在函数的 if
中决定你应该做什么。
我对编码和 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_types
或 commands
)时要调用的函数。由telebot
库直接调用,注册后不执行if
语句。
正确的做法是颠倒逻辑:在程序的顶层定义消息处理函数,然后在函数的 if
中决定你应该做什么。