如何从Discord的MessageReference对象中获取被回复消息的作者ID
错误原因
MessageReference对象并不是完整的Message对象,它仅存储被引用消息的ID、所属频道ID等基础元标识,不包含author、content这类消息详细属性,直接调用author属性必然触发AttributeError。
另外你的代码还存在一处笔误:你已经将ctx.message.reference赋值给了message_reference变量,后续取id2时却调用了不存在的message.reference,即使MessageReference有author属性也会报错。
正确实现逻辑
要获取被回复消息的作者ID,需要先通过MessageReference拿到被引用消息的ID,再拉取完整的消息对象后提取作者ID,完整示例代码如下:
async def check_two_ids(ctx): # 获取调用命令的用户ID id1 = ctx.message.author.id # 校验当前消息是否为回复消息 if not ctx.message.reference: await ctx.send("该命令必须回复一条消息使用") return # 从MessageReference中获取被引用消息的ID referenced_msg_id = ctx.message.reference.message_id # 拉取完整的被引用消息对象 referenced_msg = await ctx.fetch_message(referenced_msg_id) # 获取被回复消息的作者ID id2 = referenced_msg.author.id # 后续你的业务逻辑
注:以上写法适用于discord.py以及nextcord、disnake等基于discord.py衍生的机器人库,逻辑通用。
内容的提问来源于stack exchange,提问作者CodeIsLaw
相关产品推荐
相关产品推荐

