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

如何使用discord.Client()通过用户ID获取Discord用户服务器昵称

问题原因说明

这不是bug,属于API设计的正常逻辑:

  • client.fetch_user() 接口返回的是 discord.User 类型对象,该对象仅存储Discord平台全局的用户公开信息,不包含任何单服务器专属的属性。服务器昵称是每个服务器独立配置的属性,只有对应服务器的 discord.Member 类型对象才会携带该属性。
  • discord.User 的 display_name 属性没有服务器上下文,所以只会直接返回全局用户名,和 user.name 取值一致。只有 discord.Member 的 display_name 才会遵循「优先返回服务器昵称,无昵称则返回全局用户名」的逻辑。
解决方法

discord.User 无法直接转换为 discord.Member 类型,需要绑定具体的服务器上下文获取对应的Member实例,示例代码如下:

# 第一步:先获取目标服务器的Guild对象,替换为你的服务器ID
guild = await client.fetch_guild(你的服务器ID)
# 第二步:通过用户ID获取该服务器内的Member实例
member = await guild.fetch_member(目标用户ID)

# 此时即可正常获取服务器专属属性
print(member.nick) # 用户设置了服务器昵称则返回对应值,未设置则返回None
print(member.display_name) # 优先返回昵称,无昵称时自动 fallback 到全局用户名
print(member.avatar_url) # 同时也支持原User对象的所有全局属性读取

注意事项

  • 调用 fetch_member 前需要先在Discord开发者后台的bot设置页开启 Server Members Intent 权限,同时确保bot在目标服务器内拥有读取成员列表的权限,否则接口会返回报错。
  • 如果你的bot已经开启了成员缓存,也可以用 guild.get_member(目标用户ID) 同步读取,不用await调用,但如果目标成员不在缓存中会返回None,生产环境更推荐使用异步的 fetch_member 方法保证取值稳定。

内容的提问来源于stack exchange,提问作者user15242190

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:45:02