如何让Discord机器人获取用户服务器昵称而非默认用户名?
获取Discord服务器内成员的自定义昵称(而非默认用户名)
嘿,这个问题我太熟悉了!之前做公会机器人的时候也踩过这个坑——message.author确实只能拿到用户的全局Discord账号名,要获取他们在当前服务器设置的游戏昵称,得靠message.member这个对象。
核心方法
直接使用message.member.displayName就可以了:
- 如果用户设置了服务器专属昵称,这个属性会返回该昵称;
- 如果没设置,它会自动 fallback 到用户的默认Discord用户名,完美适配两种情况。
代码示例(以Discord.js v14为例)
client.on('messageCreate', async (message) => { // 避免机器人自己触发消息逻辑 if (message.author.bot) return; // 获取当前服务器内的用户昵称 const serverNick = message.member.displayName; await message.channel.send(`嘿,${serverNick}!我认出你的游戏昵称啦😉`); });
注意事项
- 权限与Intent:确保你的机器人在Discord开发者门户中开启了
Server Members Intent(服务器成员意图),同时机器人在目标服务器拥有查看成员的权限,否则message.member可能会返回undefined。 - 非message场景适配:如果是在交互事件(比如斜杠命令)里,你可以用
interaction.member.displayName;如果需要通过用户ID获取某成员的昵称,可以先调用guild.members.fetch(userId)拿到GuildMember对象,再取displayName。
内容的提问来源于stack exchange,提问作者Tazgirl
相关产品推荐
相关产品推荐

