首页 > 解决方案 > 当我按 InlineKeyboardButton 多次且速度过快时出现“消息未修改”

问题描述

我有一个InlineKeyboardButton可以更改已发送消息的文本。编辑消息所需的时间大约是一秒钟,如果我在再次按下按钮之前等待这个时间,一切正常。但是,如果我在编辑消息之前反复按下按钮,则会引发异常并显示此消息:

Message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message

用户不会注意到任何内容,因为在消息已被修改之前重复按下此按钮时,机器人不会编辑消息。而且我可以捕获异常并忽略它,没有任何不好的事情发生。但我想避免完全抛出异常。

我编辑消息的部分是这样的:

if text and keyboard:
    try:
        query.edit_message_text(
            text,
            parse_mode=ParseMode.HTML,
            disable_web_page_preview=True,
            reply_markup=InlineKeyboardMarkup(keyboard)
        )
    except error.BadRequest as err:
        logging.error(err)

当我平静地按下按钮一次时,消息被编辑。但是当我真正快速多次按下它时,仅在第一次编辑消息时,直到消息被修改完成,所有请求都抛出error.BadRequest.

由于错误消息说Message is not modified,我想如果我检查这个修改,我可以避免这个错误。所以我把我的代码改成这样:

if text and keyboard and text != query.message.text:
    try:
        query.edit_message_text(
            text,
            parse_mode=ParseMode.HTML,
            disable_web_page_preview=True,
            reply_markup=InlineKeyboardMarkup(keyboard)
        )
    except error.BadRequest as err:
        logging.error(err)

我添加的部分是text != query.message.text,因此它应该只在文本不同时尝试编辑消息。但这也不起作用。因为当我按下第二个(并且快速)按钮时,消息尚未被修改,因此测试通过并尝试编辑消息,但是当它开始编辑消息时,它已经被修改并且异常是抛出。我怎样才能解决这个问题?

标签: pythontelegramtelegram-botpython-telegram-bot

解决方案


推荐阅读