discord.js guildMemberAdd新成员事件无响应无报错问题排查
代码存在的问题如下:
- 事件名配置错误
discord.js官方定义的服务器新成员加入事件名为guildMemberAdd,你导出配置里的name字段填了newmember,框架不会将该处理函数绑定到对应事件上,自然不会触发。 once参数配置错误once: true代表该事件处理函数只会执行一次就销毁,而新成员加入事件需要每次有新成员进入都触发,应该改为once: false。- 事件处理逻辑结构错误
你在run函数内部额外写了guildMemberAdd, member => { ... }的嵌套箭头函数,这段函数仅被定义、从未被调用,内部逻辑完全不会执行,所以不会有报错也不会发送消息。同时run函数的参数配置错误,guildMemberAdd事件触发时会传递member作为参数,你需要调整run的入参为正确的参数顺序。 - 缺少必要的网关意图
如果你使用的是discord.js v13及以上版本,需要在客户端初始化时开启GUILD_MEMBERS意图,同时需要在Discord开发者后台的机器人设置页打开Server Members Intent开关,否则无法接收到成员相关事件。 - embed发送写法不符合版本要求
discord.js v13及以上版本发送嵌入消息不能直接传入embed实例,需要用{embeds: [embed实例]}的格式传递参数。
修正后的参考代码:
const Discord = require('discord.js'); // 注意提前导入Discord依赖,无全局导入的情况下缺该行会触发报错 module.exports = { name: 'guildMemberAdd', once: false, run: async (client, member) => { try { const welcome = new Discord.MessageEmbed() .setColor('#57F287') .setDescription(`Добро пожаловать, ${member.user} на сервер. \nВы можете прочитать наши правила в канале <#849407505661952001>`) const welcomeChannel = member.guild.channels.cache.get('847196125756915772') if (welcomeChannel) welcomeChannel.send({ embeds: [welcome] }) } catch(e) { console.error(e) } } }
额外提示:如果使用discord.js v14版本,
MessageEmbed已经迁移到discord.js/builders模块下,需要调整对应导入路径。
内容的提问来源于stack exchange,提问作者shockpast
相关产品推荐
相关产品推荐

