Discord.js开发:如何获取用户服务器昵称并展示在embed标题中
代码调整方案
你当前代码中获取的user是Discord全局用户对象,仅存储跨服务器的全局用户名。要获取用户在当前服务器的昵称,需要获取当前服务器的成员实例(GuildMember),该实例的displayName属性会自动优先返回用户设置的服务器昵称,没有设置昵称时自动回退为全局用户名,完全匹配需求。
调整后的完整代码如下:
const Discord = require("discord.js"); exports.run = async (client, message, args) => { let user = message.mentions.users.first() || client.users.cache.get(args[0]) || message.author; // 新增:获取当前服务器内的成员实例 let member = message.guild.members.cache.get(user.id); let avatar = user.avatarURL({ dynamic: true, format: "png", size: 1024 }); let embed = new Discord.MessageEmbed() .setColor(`#2f3136`) // 修改:替换为成员的服务器显示名,无昵称时自动用全局用户名 .setTitle(`${member.displayName}`) .setDescription(`Clique **[aqui](${avatar})** para baixar o avatar.`) .setImage(avatar); await message.channel.send(embed); };
如果需要兼容指令可能在私信频道触发(无服务器对象)的场景,可以把标题部分改为容错写法:
.setTitle(`${member?.displayName || user.username}`)
内容的提问来源于stack exchange,提问作者SuperBahhhh
相关产品推荐
相关产品推荐

