python - 当我按 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
,因此它应该只在文本不同时尝试编辑消息。但这也不起作用。因为当我按下第二个(并且快速)按钮时,消息尚未被修改,因此测试通过并尝试编辑消息,但是当它开始编辑消息时,它已经被修改并且异常是抛出。我怎样才能解决这个问题?
解决方案
推荐阅读
- react-native - react-native 应用程序中某些屏幕的模态导航
- wpf - 如何从 DataGrid wpf 中的 ComboBox 列中获取 SelectedItem 属性
- excel - 从多个关闭的工作簿复制/特殊粘贴范围到主工作簿
- mysql - mysql_real_escape_string():在数据库插入中拒绝访问
- wildcard - 如何从一个样本中选择所有文件?
- hangouts-chat - 如何在环聊中进行群组语音通话?
- wolfram-mathematica - 来自 1×n(一列)向量的 3D 图
- laravel - 在 Homestead 上的 Netbeans 中 Laravel Dusk 的 Xdebug
- c++ - 我应该如何在 Visual Studio 2015 中将项目的配置类型动态更改为静态库?
- html - iTextPDF 7 - 带有 base64 内联图像的 HTML 到 PDF。PNG 可以,但 JPG 失败