Python-Telegram-Bot内联按钮处理函数多次触发的修复方法咨询
解决Python-Telegram-Bot内联按钮回调多次触发的问题
嘿,我之前也踩过这个坑!问题出在你没有给Telegram服务器发送回调确认——Telegram会反复发送同一个回调请求,直到它收到你的确认信号,这就导致了button_pressed函数被多次调用。
修复方法很简单,只需要在你的回调处理函数开头,调用answer_callback_query方法确认收到请求就行。修改后的代码如下:
def button_pressed(bot, update): query = update.callback_query # 关键:确认回调查询,阻止Telegram重复发送请求 bot.answer_callback_query(query.id) keyboard = [] for article in nn: keyboard.append([ InlineKeyboardButton(article.title, callback_data=article.pageid) ]) reply_markup = InlineKeyboardMarkup(keyboard) bot.edit_message_text('text_here', reply_markup=reply_markup, chat_id=query.message.chat_id, message_id=query.message.message_id)
如果想给用户一个临时的反馈提示,还可以给answer_callback_query加个text参数,比如:
bot.answer_callback_query(query.id, text="操作已处理", show_alert=False)
show_alert设为True的话会弹出一个显眼的提示框,默认是False,只会在底部显示小提示。
另外提一句,如果你的python-telegram-bot是v12及以上的新版本,API结构有变化,处理函数的参数会是update和context,这时候确认的代码要改成:
context.bot.answer_callback_query(update.callback_query.id)
这样修改之后,按钮点击就只会触发一次button_pressed函数啦!
内容的提问来源于stack exchange,提问作者0x1337
相关产品推荐
相关产品推荐

