Discord.js guildCreate/guildDelete 事件无法获取新公会的所有者标签

Posted

技术标签:

【中文标题】Discord.js guildCreate/guildDelete 事件无法获取新公会的所有者标签【英文标题】:Discord.js guildCreate/guildDelete event can't get the owner tag of a new guild 【发布时间】:2021-07-06 01:53:41 【问题描述】:

所以我的 guildCreate 和 guildDelete 事件应该发送一个嵌入到带有所有者标签的频道

client.on("guildDelete", async(guild) => 
    const EmbedLeave = new Discord.MessageEmbed()
    .setColor('RED')
    .setTitle(`Left Guild: $guild.name.`)
    .setThumbnail(guild.iconURL())
    .setTimestamp()
    console.log(`Left Guild: $guild.name`);
    await client.channels.cache.get(`746423099871985755`).send(EmbedLeave)
    
    const EmbedLeave2 = new Discord.MessageEmbed()
    .setColor('RED')
    .setTitle(`Left Guild: $guild.name.`)
    .setDescription(`**Guild owner:** $guild.owner.user.tag\n**Members size:** $guild.memberCount`)
    .setThumbnail(guild.iconURL())
    .setTimestamp()
    await client.channels.cache.get(`758356170926325790`).send(EmbedLeave2)
    

);

    client.on("guildCreate", async(guild) =>    
    const EmbedJoin = new Discord.MessageEmbed()
    .setColor('#FFFF33')
    .setTitle(`Joined Guild: $guild.name!`)
    .setThumbnail(guild.iconURL())
    .setTimestamp()
    console.log(`Joined New Guild: $guild.name`);
    await client.channels.cache.get(`746423099871985755`).send(EmbedJoin)
     
    const EmbedJoin2 = new Discord.MessageEmbed()
    .setColor('GREEN')
    .setTitle(`Joined Guild: $guild.name!`)
    .setDescription(`**Guild owner:** $guild.owner.user.tag\n**Members size:** $guild.memberCount`)
    .setThumbnail(guild.iconURL())
    .setTimestamp()
    await client.channels.cache.get(`758356170926325790`).send(EmbedJoin2)
);
    ,
;

我正在使用两个嵌入,因为我想在这部分不同的嵌入到不同的频道

 .setDescription(`**Guild owner:** $guild.owner.user.tag\n**Members size:** $guild.memberCount`)

它通常适用于机器人之前所在的服务器(可能是因为缓存),但对于全新的服务器,它会给出错误无法读取可能未定义的“标签”

我也尝试通过这样做来改变获取所有者标签的方式

let owner = await client.users.cache.get(guild.ownerID)
.setDescription(`**Guild owner:** $owner.tag\n**Members size:** $guild.memberCount`)

但是同样的事情发生在新的服务器上会出现同样的错误 其他功能,如 guild.memberCount guild.iconURL() 工作正常

【问题讨论】:

我让我的机器人自己创建了一个新的公会(从而触发了事件),你的代码工作得很好。也许有权限的东西(尽管我认为不太可能)? 【参考方案1】:

你可以试试这个(但这个使用message):

const  username  = await message.client.users.fetch(message.guild.ownerID);

// This is optional 
const serverOwner = username;

或者这个:

const owner = await client.users.fetch(guild.ownerID);

我不确定它是否适合你,我不在家,所以我无法测试它,但我遇到了类似的问题:

如果他离线,我无法获得guild owner。可能是因为他不再被缓存。在这种情况下,first solution 为我工作

【讨论】:

奇怪,我记得试过这个但没有用,但谢谢你告诉我!它现在工作了 你应该奖励他们。 我试过了,但它说“你可以在 16 小时内奖励价值 50 代表的赏金”

以上是关于Discord.js guildCreate/guildDelete 事件无法获取新公会的所有者标签的主要内容,如果未能解决你的问题,请参考以下文章

Discord 错误错误 Discord.js 中的无效令牌

Discord 仅识别 discord.js 中的“ping”命令

错误“const Discord = require(discord.js) ^ ReferenceError: discord is not defined”

(Discord 机器人)当用户加入 Discord 服务器(discord.js)时,如何发送欢迎消息?

Discord.js 和 discord.js-commando 防止命令在特定通道中运行

使用 Discord 按钮的建议命令 Discord.JS