首页 > 解决方案 > guildMemberAdd 和 guildMemberRemove 嵌入不再发送(Discord.js)

问题描述

我对此感到非常困惑,因为它们曾经工作过,但现在我什至没有收到任何错误消息。这是代码:

(欢迎嵌入)

bot.on("guildMemberAdd", (member) => {
    let welcomembed = new Discord.MessageEmbed()
        .setAuthor(`${member.user.tag} just joined!`, member.user.avatarURL())
        .setDescription("Welcome to Angry Birds Economy Server! Don't forget to read the <#748333038294794241>! <:WelcomePigHappy:777683105863041054>")
        .setColor("FF0000");
    member.guild.channels.cache.get("channelid").send(welcomembed)

        .catch((err) => console.log(err));
});

(再见嵌入)

bot.on("guildMemberRemove", (member) => {
    let goodbyembed = new Discord.MessageEmbed()
.setAuthor(`${member.user.tag} just left!`, member.user.avatarURL())
.setDescription("Sad! Let's just hope that they enjoyed their stay <:WelcomePigSad:777683637830680586>")
.setColor("FF0000");
member.guild.channels.cache.get("samechannelid").send(goodbyembed)

        .catch((err) => console.log(err));
});

它工作的屏幕截图: 在此处输入图像描述

我也有一个 guildCreate 和 guildRemove 在它下面,但我不知道这是否是原因。

标签: javascriptnode.jsdiscorddiscord.js

解决方案


这个问题很可能是 Discord API 的相对较新的intents功能。您需要订阅特定的意图才能可靠地接收关联事件。guildMemberAdd并且guildMemberRemove在需要订阅意图的事件列表中。

这是您在定义客户端的任何地方都需要实施的一种可能的修复方法:

const intents = ["GUILDS", "GUILD_MEMBERS"];
const bot = new Discord.Client({intents: intents, ws:{intents: intents}});

请注意,您必须使用discord.js v12.x.xto 使用意图,因此如果您使用的是旧版本,则需要更新以解决您的问题。

您还需要在其不和谐开发者页面上为您的机器人启用以下设置,因为公会成员加入/离开事件是一种特权意图: 在此处输入图像描述

相关资源:
意图和相关事件列表 关于意图的
一般信息


推荐阅读