首页 > 解决方案 > Discord.js 获取服务器所有者用户标签返回 null

问题描述

我试图让我的机器人在机器人加入服务器时发送嵌入,嵌入应该包含服务器所有者的名称,但它返回 null 并且不起作用给我错误 TypeError: Cannot read property 'user' of null

guild.owner.user.username

完整代码

client.on("guildCreate", (guild) => {        
    const EmbedJoin = new Discord.MessageEmbed()
    .setColor('GREEN')
    .setTitle(`Joined Guild: ${guild.name}!`)
    .setDescription(`Guild owner: ${guild.owner.user.username}\nMembers: ${guild.memberCount}`)
    .setTimestamp()
    console.log(`Joined New Guild: ${guild.name}`);
    client.channels.cache.get(`794483893977088002`).send(EmbedJoin)
});

编辑:我找到了一个适合我的解决方案

client.on("guildCreate", async (guild) => {
    let owner = client.users.cache.get(guild.ownerID)
    const EmbedJoin = new Discord.MessageEmbed()
    .setColor('GREEN')
    .setTitle(`Joined Guild: ${guild.name}!`)
    .setThumbnail(guild.iconURL())
    .setDescription(`Guild owner: ${owner.username}`)
    .setTimestamp()
    console.log(`Joined New Guild: ${guild.name}`);
    client.channels.cache.get(`758356170926325790`).send(EmbedJoin)
});

标签: node.jsdiscord.js

解决方案


用户并不总是被缓存。

您可以像这样缓存它:await client.users.fetch(GUILD.ownerID);

因此,您的代码的固定副本:

client.on("guildCreate", async (guild) => {        
    await guild.owner.fetch();
    const EmbedJoin = new Discord.MessageEmbed()
    .setColor('GREEN')
    .setTitle(`Joined Guild: ${guild.name}!`)
    .setDescription(`Guild owner: ${guild.owner.user.username}\nMembers: ${guild.memberCount}`)
    .setTimestamp()
    console.log(`Joined New Guild: ${guild.name}`);
    client.channels.cache.get(`794483893977088002`).send(EmbedJoin)
});

推荐阅读