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

Discord.js中如何获取用户的服务器Guild Nickname(昵称)

解决方案

核心逻辑说明

interaction.user是全局Discord用户对象,仅存储用户名、头像等全平台通用信息,不会包含服务器专属的昵称数据,因此你无法从该对象下获取到服务器内昵称。
服务器专属的用户信息全部存储在interaction.member(GuildMember类型)对象中。

常见调用失败原因及修复方案

你之前尝试调用interaction.member.displayName未成功,一般是以下几个原因导致:

1. 未开启必要的网关意图

Discord v10+ API要求获取服务器成员数据必须开启对应意图,你需要做两处配置:

  • 登录Discord开发者平台,进入对应机器人的「Bot」设置页,在Privileged Gateway Intents分类下开启Server Members Intent
  • 代码初始化Client时,声明对应的意图:
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
  intents: [
    GatewayIntentBits.Guilds, // 服务器基础数据必填
    GatewayIntentBits.GuildMembers, // 服务器成员数据必填
    // 其他业务需要的意图可自行补充
  ]
});

2. 未判断交互来源场景

如果用户在私聊场景触发交互,interaction.member会返回null,调用属性会报错,需要先做场景判断。

最终可用代码示例

client.on('interactionCreate', async interaction => {
  // 全局用户名,所有场景都可用
  const globalUsername = interaction.user.username;
  // 非服务器场景直接走私聊逻辑
  if (!interaction.inGuild()) {
    // 私聊无服务器昵称,可直接用globalUsername
    // 你的私聊逻辑
    return;
  }
  // 场景1:自动适配的显示名称,优先返回服务器昵称,没设置则返回全局用户名
  const serverDisplayName = interaction.member.displayName;
  // 场景2:仅获取用户手动设置的专属服务器昵称,没设置则返回null
  const customServerNickname = interaction.member.nickname;
  // 后续业务逻辑
});

补充排查点

如果配置完成后仍无法获取,可确认两点:

  • 机器人在对应服务器拥有「查看成员」权限
  • 升级discord.js到最新稳定版,避免旧版本API兼容问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:06:05