在 send_message 之前等待用户输入
Wait for user input before a send_message
我在处理传入消息时遇到问题。我的机器人中有一个主菜单,其中包含一个 InlineKeyboardMarkup。按下按钮时,机器人应等待用户输入,然后发送消息。但就我而言,它发送消息,然后等待用户输入,然后再次发送消息。这是一个大问题,因为它发送消息后,它应该返回主菜单。
我正在使用 pythonTelegramBotAPI(远程机器人)
这是代码:
@bot.callback_query_handler(func = lambda call: True)
def query_handler(call):
bot.answer_callback_query(callback_query_id = call.id, text = '')
cid = call.message.chat.id
mid = call.message.message_id
msg = call.message
if call.data == 'request':
bot.edit_message_text('Test - Answer to request', cid, mid, reply_markup = markup)
request_handler(msg)
################# Keyboard sections #################
@bot.message_handler()
def request_handler(msg):
if msg.content_type == 'text':
bot.send_message(msg.chat.id, 'Request accepted')
# and here the code to go back, that I didn't do yet
也许这个 conversational bot example 将帮助您了解如何与用户建立对话。
正确答案
装饰器@bot.messge_handler()
用于告诉函数它必须处理传入的消息。因此,当有新消息时,该函数将自动执行其中的代码。这意味着不得手动调用该函数,因为这不是必需的。实际上,调用该函数将 运行 调用其中的代码,而不是初始化它并等待输入。
还有一个提示:如果用户发送消息,该函数会自动调用。但是当机器人发送消息时会发生什么?该函数也被调用,因为它对谁发送消息没有影响。所以,为了避免对机器人消息也使用该功能,只需像这样放置一个 if :
if msg.from_user.is_bot == False:
# Here put what the function should do
如您所见,if 检查消息是否来自机器人。
我在处理传入消息时遇到问题。我的机器人中有一个主菜单,其中包含一个 InlineKeyboardMarkup。按下按钮时,机器人应等待用户输入,然后发送消息。但就我而言,它发送消息,然后等待用户输入,然后再次发送消息。这是一个大问题,因为它发送消息后,它应该返回主菜单。
我正在使用 pythonTelegramBotAPI(远程机器人)
这是代码:
@bot.callback_query_handler(func = lambda call: True)
def query_handler(call):
bot.answer_callback_query(callback_query_id = call.id, text = '')
cid = call.message.chat.id
mid = call.message.message_id
msg = call.message
if call.data == 'request':
bot.edit_message_text('Test - Answer to request', cid, mid, reply_markup = markup)
request_handler(msg)
################# Keyboard sections #################
@bot.message_handler()
def request_handler(msg):
if msg.content_type == 'text':
bot.send_message(msg.chat.id, 'Request accepted')
# and here the code to go back, that I didn't do yet
也许这个 conversational bot example 将帮助您了解如何与用户建立对话。
正确答案
装饰器@bot.messge_handler()
用于告诉函数它必须处理传入的消息。因此,当有新消息时,该函数将自动执行其中的代码。这意味着不得手动调用该函数,因为这不是必需的。实际上,调用该函数将 运行 调用其中的代码,而不是初始化它并等待输入。
还有一个提示:如果用户发送消息,该函数会自动调用。但是当机器人发送消息时会发生什么?该函数也被调用,因为它对谁发送消息没有影响。所以,为了避免对机器人消息也使用该功能,只需像这样放置一个 if :
if msg.from_user.is_bot == False:
# Here put what the function should do
如您所见,if 检查消息是否来自机器人。