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

如何通过Discord消息ID获取发送用户的用户名?

如何通过Discord消息ID获取发送用户的用户名?

别担心,刚入门Discord Bot遇到这种问题太正常了!我来帮你一步步理清问题出在哪,以及怎么解决~

首先,你遇到的AttributeError: 'int' object has no attribute 'author'错误原因很明确:
message.reference.message_id返回的只是一个整数类型的消息ID,它只是一串数字,代表这条消息的唯一标识,并不是完整的消息对象。而author是消息对象才有的属性,所以直接用这个数字去访问author肯定会报错。

想要拿到消息作者,你需要先通过这个消息ID获取到完整的消息对象,然后再从对象里提取作者信息。下面是具体的解决方法(以discord.py库为例):

解决步骤与代码示例

  1. 先拿到被回复消息的ID(你这一步是对的)
  2. 获取该消息所在的频道(回复消息和被回复消息肯定在同一个频道里)
  3. 调用异步方法fetch_message()获取完整的消息对象
  4. 从消息对象中提取作者信息

完整代码如下:

async def your_command_function(message):
    # 拿到被回复消息的ID
    referenced_msg_id = message.reference.message_id
    # 获取消息所在的频道
    channel = message.channel
    
    try:
        # 通过ID获取完整的消息对象(注意这里要用await,因为是异步操作)
        referenced_msg = await channel.fetch_message(referenced_msg_id)
        # 现在可以获取作者信息了
        author = referenced_msg.author
        # 打印用户名和用户ID,按需使用
        print(f"发送这条消息的用户名是:{author.name},用户ID是:{author.id}")
    except discord.NotFound:
        print("出错了:找不到对应的消息,可能这条消息已经被删除啦")
    except discord.Forbidden:
        print("出错了:Bot没有权限获取这条消息,请检查Bot的频道权限")

关键注意点

  • 一定要用await:fetch_message()是异步方法,所以你的函数必须定义为async类型,并且调用时加上await关键字。
  • 异常处理:加上try-except可以避免因为消息被删除、Bot权限不足等情况导致程序崩溃。

这样就能顺利通过消息ID拿到发送用户的信息啦!

备注:内容来源于stack exchange,提问作者Maxolinochen YT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 09:09:04