Pyrogram中通过inline_message_id与query_id获取内联消息信息的技术问题
如何在Pyrogram中获取并编辑内联消息内容
我完全懂你遇到的这个棘手问题:用户点击内联消息的键盘按钮时,CallbackQuery只返回基础回调信息,拿不到完整的消息文本和键盘结构;普通的get_messages方法又因为内联消息没有Chat对象、inline_message_id是字符串类型而无法生效。你尝试用Raw API的GetMessages却用错了输入类型,导致返回MessageEmpty或者空结果,确实挺折腾人的。
问题根源在哪?
你之前用的InputMessageID是给普通聊天消息设计的,根本不适用于内联消息;InputMessageCallbackQuery是通过回调查询ID定位消息,也不是内联消息的正确处理方式。内联消息有专门的输入类型——InputBotInlineMessageID,这才是你需要的关键。
正确解决方案
直接从UpdateInlineBotCallbackQuery的msg_id字段里提取参数,构造InputBotInlineMessageID再传给GetMessages,就能拿到完整的内联消息对象了。
修正后的代码示例:
from pyrogram.raw.functions.messages import GetMessages from pyrogram.raw.types import InputBotInlineMessageID from pyrogram.raw.types import Message # 用于类型校验 async def edit_inline_message(client: Client, update: UpdateInlineBotCallbackQuery, users, chats): # update.msg_id本身就是InputBotInlineMessageID类型,直接提取字段即可 user_id = update.msg_id.user_id message_id = update.msg_id.id # 构造正确的内联消息输入对象 inline_input_msg = InputBotInlineMessageID(user_id=user_id, id=message_id) # 调用Raw API获取消息详情 message_result = await client.send(GetMessages(id=[inline_input_msg])) # 提取有效的消息对象并进行编辑 if message_result.messages and isinstance(message_result.messages[0], Message): original_msg = message_result.messages[0] print(f"原始消息文本: {original_msg.text}") print(f"原始键盘结构: {original_msg.reply_markup}") # 基于原始内容修改并编辑消息 await client.edit_inline_message( inline_message_id=update.inline_message_id, text=f"已编辑:{original_msg.text}", # 可在此处调整键盘结构,比如修改按钮文本或新增按钮 reply_markup=original_msg.reply_markup )
关键细节说明
- 无需手动移位计算:你之前尝试的移位操作是多余的,
update.msg_id已经直接提供了user_id和id两个字段,直接取用即可。 - 编辑消息的正确姿势:拿到原始
Message对象后,你可以获取text和reply_markup(内联键盘),修改后调用edit_inline_message,传入update.inline_message_id(字符串类型)就能完成编辑。
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

