Discord.js v13 触发guildMemberAdd事件无法发送欢迎消息问题求助
Discord.js v13 欢迎消息发送失败问题解决
问题场景
在Discord.js v13环境下开发新成员入群欢迎消息功能,新成员加入服务器后预设的欢迎消息没有按照预期发送,相关实现代码如下:
实现代码
index.js 核心事件监听代码
client.on('guildMemberAdd', (member) => { let chx = db.get(`welchannel_${member.guild.id}`); if (chx === null) { return; } client.channels.cache.get(chx).send(`Welcome to ${message.guild.name}`); });
channel.js 欢迎频道配置命令代码
module.exports = { name: "channel", description: "Help Command", category: "Help", execute(client, message, args, Discord) { const db = require("quick.db") let channel = message.mentions.channels.first() //mentioned channel if(!channel) { //if channel is not mentioned return message.channel.send("Please Mention the channel first") } db.set(`welchannel_${message.guild.id}`, channel.id) const embed = new Discord.MessageEmbed() .setColor('#b5b5b5') .setTitle(`Channel set: ${channel.name} `) message.channel.send({ embeds: [embed] }); } }
问题根因
从Discord.js v13版本开始,成员相关的特权事件需要显式声明对应意图才可触发,本次问题核心是客户端初始化时没有添加GUILD_MEMBERS意图标识,导致guildMemberAdd事件无法被监听到,欢迎消息逻辑自然无法执行。
另外代码存在一处隐藏问题:在guildMemberAdd事件回调中没有message这个变量,想要获取服务器名称需要改为${member.guild.name},否则就算事件触发也会抛出变量未定义的报错。
修复方案
- 初始化Client实例时添加
GUILD_MEMBERS意图,示例代码:
const { Client, Intents } = require('discord.js'); const client = new Client({ intents: [ Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MEMBERS, // 新增这一行 // 其他你需要的意图 ] });
- 修正index.js事件回调中的变量错误:
将client.channels.cache.get(chx).send(Welcome to ${message.guild.name});
改为client.channels.cache.get(chx).send(Welcome to ${member.guild.name}); - 确认Discord开发者后台对应应用的Privileged Gateway Intents选项中,已经开启了
Server Members Intent开关,否则即使代码加了意图也无法正常接收事件。
感谢UltraX提供的问题排查帮助。
内容的提问来源于stack exchange,提问作者Lokry
相关产品推荐
相关产品推荐

