Discord.js v12.5.3机器人报member未定义ReferenceError错误
报错原因
你遇到的ReferenceError: member is not defined是两个核心问题导致的:
guildMemberAdd事件的执行函数参数定义错误:discord.js v12.5.3版本中,guildMemberAdd事件触发时第一个传入的参数就是新加入服务器的member成员对象,你当前代码里把execute参数写成了(message, Discord, client, guild),根本没有接收member对象,后续代码调用member自然会报未定义。- 代码中存在多处v12版本API适配错误,即使解决了member未定义的问题,后续也会触发其他报错:比如未定义
channel变量、setFooter传参格式不符合v12要求、把需要调用的方法当成属性直接读取、成员属性取值路径错误。
修复步骤
- 修正execute函数的入参,正确接收事件传入的
member对象 - 补全欢迎频道的获取逻辑,通过
member.guild拿到成员所在服务器,再从频道缓存中读取对应ID的欢迎频道 - 修正所有v12版本不兼容的API写法,调整属性、方法的调用格式,增加空值判断避免频道不存在时抛出异常
- 检查你的事件注册逻辑,确保触发
guildMemberAdd事件调用execute方法时,传入的参数顺序和execute定义的参数顺序一致
修复后可直接运行的代码(适配discord.js v12.5.3)
const { MessageEmbed} = require('discord.js') module.exports = { name: 'guildMemberAdd', execute(member, client) { const channelId = '918746332435468288' // 欢迎频道ID // 获取目标欢迎频道 const welcomeChannel = member.guild.channels.cache.get(channelId) // 频道不存在时直接返回,避免报错 if (!welcomeChannel) return const embed = new MessageEmbed() .setTitle(`Welcome ${member.user.username}`) .setColor(`EEA83B`) .setDescription(`Welcome \`${member.user.username}\` To The Floppacord! Have Fun And Be Sure To Follow The Rules In <#860428690034917406>`) // 服务器图标是方法,需要加()调用 .setThumbnail(member.guild.iconURL()) // v12版本setFooter接收两个参数:footer文本、图标地址,不支持对象传参 .setFooter(member.user.tag, member.user.displayAvatarURL()) welcomeChannel.send(member.user.tag) welcomeChannel.send(embed) } }
补充提示:如果你的事件处理逻辑里需要用到client对象,在调用execute的时候把client作为第二个参数传入即可,不需要额外传Discord、message、guild这类参数,这些内容都可以通过
member对象间接获取。
内容的提问来源于stack exchange,提问作者Erik Hallowell
相关产品推荐
相关产品推荐

