如何在Node.js的Discord.js v14中获取服务器创建者的用户名与头像
如何获取Discord服务器所有者的用户名和头像
在Discord.js v13及以上版本中,直接调用message.guild.owner.username大概率会失败,因为guild.owner默认是一个PartialGuildMember(不完整的成员对象),没有加载完整的用户数据。正确的做法是使用guild.fetchOwner()方法来获取完整的所有者信息。
核心实现步骤
- 用
fetchOwner()异步获取服务器所有者的完整GuildMember对象 - 从该对象的
user属性中提取用户名和头像URL - 将这些数据用于信息命令或嵌入消息
代码示例
// 假设你的命令处理函数是异步的 async function serverInfoCommand(message) { // 获取服务器所有者(必须用await,因为是异步操作) const owner = await message.guild.fetchOwner(); // 获取用户名(带 discriminator,格式为「用户名#1234」) const ownerFullUsername = owner.user.tag; // 若只需纯用户名,用:owner.user.username // 获取头像URL,dynamic: true 会自动适配GIF头像 const ownerAvatar = owner.user.displayAvatarURL({ size: 256, dynamic: true }); // 创建嵌入消息并发送 const infoEmbed = new Discord.EmbedBuilder() .setTitle(`${message.guild.name} 服务器信息`) .addFields( { name: "服务器所有者", value: ownerFullUsername }, ) .setThumbnail(ownerAvatar) .setColor("#2F3136"); await message.channel.send({ embeds: [infoEmbed] }); }
补充:获取原始服务器创建者(非当前所有者)
如果需要获取服务器的原始创建者(即使所有权已转让),可以通过查询服务器的审核日志:
async function getOriginalCreator(guild) { const auditLogs = await guild.fetchAuditLogs({ type: 'GUILD_CREATE', limit: 1 }); const creatorEntry = auditLogs.entries.first(); return creatorEntry?.executor; // 返回创建者的User对象,若不存在则返回undefined } // 使用示例 const creator = await getOriginalCreator(message.guild); if (creator) { console.log(`原始创建者:${creator.tag}`); console.log(`创建者头像:${creator.displayAvatarURL({ size: 256 })}`); }
内容的提问来源于stack exchange,提问作者luiggi batista dilones
相关产品推荐
相关产品推荐

