discord.js v13升级后serverinfo命令报MessageEmbed字段为空错误如何解决
问题解决方法
你遇到的MessageEmbed field values may not be empty报错由discord.js v13的三个不兼容变更导致,直接修改对应问题即可:
- 第一个问题:v13 已经移除了
Guild.region属性,你代码里调用regions[message.guild.region]返回undefined,导致Embed字段值为空 - 第二个问题:v13 中
addField方法不再支持传入数组作为第二个参数,必须手动将数组合并为字符串,之前v12自动处理的逻辑在v13里被移除 - 第三个问题:v13 对频道类型的枚举值做了修改,原
text/voice类型现在变更为GUILD_TEXT/GUILD_VOICE,你原代码筛选出来的频道数量恒为0,部分场景下也会触发空值报错
修改后的serverinfo核心代码
const owner = await message.guild.fetchOwner(); const embed = new MessageEmbed() .setColor('#724e72') .setTitle('Server Info') .setAuthor(`${message.author.tag}`, message.author.displayAvatarURL()) .setDescription('shows information about the server') .setThumbnail('https://i.imgur.com/MafwgxK.png') // 数组手动join('\n')转为字符串,删除已废弃的region字段 .addField('General', [ `**名称:** ${message.guild.name}`, `**所有者:** ${owner.user.tag}`, `** boost 等级:** ${message.guild.premiumTier ? `Tier ${message.guild.premiumTier}` : 'None'}`, `**内容过滤等级:** ${filterLevels[message.guild.explicitContentFilter]}`, `**验证等级:** ${verificationLevels[message.guild.verificationLevel]}`, `**创建时间:** ${moment(message.guild.createdTimestamp).format('LT')} ${moment(message.guild.createdTimestamp).format('LL')} [${moment(message.guild.createdTimestamp).fromNow()}]`, '\u200b' ].join('\n')) .addField('统计信息', [ `**角色数量:** ${message.guild.roles.cache.size}`, `**表情数量:** ${message.guild.emojis.cache.size}`, `**成员总数:** ${message.guild.memberCount}`, `**人类用户:** ${message.guild.members.cache.filter(member => !member.user.bot).size}`, `**机器人:** ${message.guild.members.cache.filter(member => member.user.bot).size}`, // 修改频道类型枚举值 `**文字频道:** ${message.guild.channels.cache.filter(channel => channel.type === 'GUILD_TEXT').size}`, `**语音频道:** ${message.guild.channels.cache.filter(channel => channel.type === 'GUILD_VOICE').size}`, `**boost 数量:** ${message.guild.premiumSubscriptionCount || '0'}`, '\u200b' ].join('\n')) .addField('在线状态', [ // 新增可选链判断避免presence不存在时报错 `**在线:** ${message.guild.members.cache.filter(member => member.presence?.status === 'online').size}`, `**闲置:** ${message.guild.members.cache.filter(member => member.presence?.status === 'idle').size}`, `**请勿打扰:** ${message.guild.members.cache.filter(member => member.presence?.status === 'dnd').size}`, `**离线:** ${message.guild.members.cache.filter(member => member.presence?.status === 'offline').size}`, '\u200b' ].join('\n')) .setTimestamp() .setFooter('a') message.channel.send({ embeds: [embed] });
内容的提问来源于stack exchange,提问作者clxne
相关产品推荐
相关产品推荐

