You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:06:02