Discord JS v13 欢迎Embed消息报错RangeError [EMBED_FIELD_NAME]如何解决?
报错原因
你触发的RangeError [EMBED_FIELD_NAME]报错核心是addField方法调用不符合规范:
- Discord.js的
MessageEmbed.addField要求传入至少2个必填参数,第一个为字段标题(必须是非空字符串),第二个为字段内容。你当前仅传入了member.nickname一个参数,若成员未设置群昵称,member.nickname会返回null,直接触发字段名非空校验的报错。 - 除此之外你的代码还有2处隐性错误,后续运行也会触发报错:
member.user.avatarURL是方法不是属性,需要加括号调用才会返回头像链接- Discord.js v12及以上版本中,频道获取方法已从
channels.get()调整为channels.cache.get()
修复方案
- 给
addField补全参数,同时对member.nickname做兜底处理,不存在时默认返回用户全局用户名 - 修正
avatarURL的调用方式,可按需指定头像的格式、尺寸参数 - 修正频道获取方法,适配新版Discord.js规范
修复后完整代码
client.on('guildMemberAdd', member => { const exampleEmbed = new Discord.MessageEmbed() .setColor('#0099ff') .setTitle('Willkommen') // 补全addField的两个参数,同时做昵称兜底 .addField('新成员入群', member.nickname || member.user.username) // 修正avatarURL调用,可自定义参数 .setImage(member.user.avatarURL({ format: 'png', size: 1024 })) // 修正频道获取方法 member.guild.channels.cache.get('896102767486189648').send(exampleEmbed); })
内容的提问来源于stack exchange,提问作者Heubi_
相关产品推荐
相关产品推荐

