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

Discord.js机器人生成Embed报错RangeError [EMBED_FIELD_VALUE]求助

错误原因
  • 触发RangeError [EMBED_FIELD_VALUE]的直接原因是Discord.js要求MessageEmbed.addField()的第二个参数必须为非空字符串,你代码中直接传入了数值类型的在线人数、最大人数参数,部分异常场景下服务器IP、版本字段可能返回空值,都不符合Embed字段的校验规则。
  • 代码中ping.status('ip', { port: port})的IP、端口均为未赋值的占位符,会导致MC服务器状态查询失败,返回空的response对象,进一步加重Embed字段空值问题。
  • 冗余引入了已废弃的RichEmbed,虽然不会直接触发本次报错,但属于不规范写法。
  • 次要优化点:require('minecraft-server-util')写在messageCreate事件回调内,每次触发命令都会重复加载模块,会拖慢响应速度。
修复方案
  1. 所有Embed字段传入前统一转为字符串,同时增加空值兜底逻辑,避免空值/非字符串类型触发校验失败
  2. 替换为你实际的MC服务器IP和端口
  3. 把minecraft-server-util的引入移到代码顶部
  4. 增加命令前缀判断、机器人自身消息过滤逻辑,避免无效解析
  5. 移除废弃的RichEmbed引入

修复后完整代码如下:

const {Client, Intents, MessageEmbed } = require('discord.js'); 
// 模块引入移到顶部
const ping = require('minecraft-server-util')

const bot = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] });

const token = '替换为你的机器人token';
const PREFIX = '!';
// 替换为你的MC服务器实际IP和端口
const MC_SERVER_IP = '你的MC服务器IP';
const MC_SERVER_PORT = 25565;

bot.on('ready', () =>{
    console.log('Bot has come online.');
});

bot.on('messageCreate', message =>{
    // 先判断消息是否带前缀、是否是机器人自己发的,避免无效解析
    if (!message.content.startsWith(PREFIX) || message.author.bot) return;

    let args = message.content.substring(PREFIX.length).split(' ')

    switch(args[0]){
        case 'mc':
            ping.status(MC_SERVER_IP, { port: MC_SERVER_PORT })
             .then((response)=>{
                const Embed = new MessageEmbed()
                .setTitle('Server Status')
                // 所有字段转字符串+空值兜底
                .addField('Server IP', `${response.host ?? '获取失败'}`)
                .addField('Server Version', `${response.version ?? '获取失败'}`)
                .addField('Online Players', `${response.onlinePlayers ?? 0}`)
                .addField('Max Players', `${response.maxPlayers ?? 0}`)
                
                message.channel.send({ embeds: [Embed] });
            })
            .catch((error)=>{
                console.error(error);
                // 查询失败给用户返回提示
                message.channel.send('服务器状态查询失败,请稍后重试');
            });
        break
    }
})

bot.login(token);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:06:03