You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js v13下discord.js执行!server触发MessageEmbed字段非空字符串报错

报错原因

RangeError [EMBED_FIELD_VALUE] 报错的核心是你传入MessageEmbed字段的值不是非空字符串,属于discord.js的字段校验错误,结合你的代码和运行环境,具体有以下几个问题:

  1. Node版本不兼容:discord.js v13要求Node.js版本≥16.6,你当前使用的13版本会存在大量API兼容问题,优先升级Node版本到符合要求的范围。
  2. 未开启必要网关意图:如果没有在Discord开发者后台的机器人设置页开启GUILDS、GUILD_MEMBERS、GUILD_PRESENCES三个意图,代码中获取的服务器所有者、成员在线状态、成员列表都会返回空值,触发报错。
  3. 代码中多处传入非字符串/空值到Embed字段:
    • guild.owner是GuildMember对象,不是字符串,且未缓存时会返回undefined
    • 服务器没有boost时guild.premiumSubscriptionCount、guild.premiumTier会返回null,直接传入会被判定为无效值
    • guild.roles.highest是Role对象,不是字符串
    • 角色、emoji列表拼接后长度超过Embed字段最大限制1024字符时也会触发报错
    • 服务器没有自定义头像时icon为null,传入缩略图和页脚设置也会出错

修正后代码

const { MessageEmbed } = require("discord.js")

module.exports = {
    commands: ['serverinfo', 'server-info', 'si', 'server'],
    description: '获取服务器信息',

    callback: async (message, args) => {
        const { guild } = message
        // 处理服务器头像为空的情况
        const icon = message.guild.iconURL() || 'https://cdn.discordapp.com/embed/avatars/0.png'
        // 主动拉取所有者信息避免缓存问题
        const owner = await guild.fetchOwner()
        const roles = message.guild.roles.cache.map(e => e.toString())
        const emojis = message.guild.emojis.cache.map(e => e.toString())
        const emojicount = message.guild.emojis.cache 
        const members = message.guild.members.cache
        const create = message.guild.createdAt.toLocaleDateString()

        // 处理角色列表过长问题
        let roleContent = roles.join('、')
        if (roleContent.length > 1024) {
            roleContent = roles.slice(0, 15).join('、') + ` 等${roles.length - 15}个角色`
        }
        // 处理emoji列表过长问题
        let emojiContent = emojis.join(' ')
        if (emojiContent.length > 1024) {
            emojiContent = emojis.slice(0, 30).join(' ') + ` 等${emojis.length - 30}个表情`
        }
        // 处理在线状态无权限获取的问题
        const online = guild.members.cache.filter(member => member.presence?.status == 'online').size || 0
        const idle = guild.members.cache.filter(member => member.presence?.status == 'idle').size || 0
        const dnd = guild.members.cache.filter(member => member.presence?.status == 'dnd').size || 0
        const offline = guild.members.cache.filter(member => member.presence?.status == 'offline').size || 0

        const embed = new MessageEmbed()
        .setColor('RANDOM')
        .setTitle('服务器信息')
        .setThumbnail(icon)
        .addField('服务器所有者:-', owner.user.tag)
        .addField('服务器ID:-', guild.id)
        .addField('服务器创建时间:-', create)
        .addField('增压次数:-', `${guild.premiumSubscriptionCount || 0}`)
        .addField('增压等级:-', `${guild.premiumTier || 0}`)
        .addField('成员数量:-', `${members.size}\n${members.filter(member => !member.user.bot).size}(人类)\n${members.filter(member => member.user.bot).size}(机器人)`)
        .addField('成员状态:-', `${online}:-🟢\n${idle}:-🟡\n${dnd}:-🔴\n${offline}:-⚫\n`)
        .addField('最高等级角色:-', guild.roles.highest.toString())
        .addField('角色列表:-', roleContent, true)
        .addField('表情数量:-', `${emojicount.size}\n${emojicount.filter(emoji => !emoji.animated).size}(静态)\n${emojicount.filter(emoji => emoji.animated).size}(动态)`)
        .addField('表情列表:-', emojiContent, true)
        .addField('频道统计:-', `${guild.channels.cache.filter(channel => channel.type == 'GUILD_TEXT').size}⌨️\n${guild.channels.cache.filter(channel => channel.type == 'GUILD_VOICE').size}🔈\n${guild.channels.cache.filter(channel => channel.type == 'GUILD_NEWS').size}📢\n${guild.channels.cache.filter(channel => channel.type == 'GUILD_CATEGORY').size}📁`)
        .setFooter('服务器信息', icon)
        message.channel.send({ embeds: [embed] })
    }
}

内容的提问来源于stack exchange,提问作者Asuka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:36:05