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

Discord.js使用Gamedig查询MC服务器报EMBED_FIELD_VALUE错误

问题原因

你遇到的RangeError [EMBED_FIELD_VALUE]: MessageEmbed field values must be non-empty strings报错,是因为传入Discord embed字段的值不符合规则:Discord.js要求所有addField()的第二个参数(字段内容)必须是非空字符串,你的代码里同时存在多个逻辑错误,既触发了这个报错,也导致玩家数无法正常显示:

  • 变量名混乱:开头定义的玩家计数变量是jugadores,Gamedig查询成功后赋值给了未声明的players变量,定义embed时命名为LatinStatus,回复时却传入了不存在的LatinEstado变量
  • 字段传值错误:玩家数字段第二个参数写的是'players',带引号的写法是传固定字符串字面量,不是引用存储玩家数的变量;就算直接传数字类型的玩家数,也不符合embed字段要求的字符串类型
  • 缺少异常和初始状态兜底:定时任务是6秒执行一次,机器人刚启动的前6秒还没拿到第一次查询结果,同时Gamedig查询如果遇到服务器超时、网络错误会直接抛出未捕获异常,此时没有兜底值很容易传入空值触发报错
  • 参数类型不规范:Gamedig配置里的port传了字符串格式的'25565',虽然部分版本兼容,但传数字类型更稳妥
修改方案
  1. 统一所有变量命名,不要混用不同语言、不同拼写的变量名
  2. 给Gamedig查询加错误捕获,查询失败时设置离线兜底状态,避免空值
  3. 机器人启动时立刻执行一次服务器查询,不用等第一个6秒间隔
  4. embed字段传值时用模板字符串把玩家数拼接成你需要的X Players格式,自动把数字转为合法的字符串类型
  5. 修正回复时传入的embed变量名,和定义时保持一致

修改后的可运行代码如下:

const Discord = require('discord.js');
const Gamedig = require('gamedig');

// 全局状态变量,统一命名
let serverState = null;
let onlinePlayerCount = 0;
let isServerOnline = false;

// 抽离查询逻辑,方便复用
const fetchServerStatus = () => {
  Gamedig.query({
    type: 'minecraft',
    host: 'mc.latinplay.net',
    port: 25565 // 端口使用数字类型
  })
  .then(res => {
    serverState = res;
    onlinePlayerCount = res.players.length;
    isServerOnline = true;
  })
  .catch(err => {
    console.error('Minecraft服务器查询失败:', err);
    onlinePlayerCount = 0;
    isServerOnline = false;
  });
};

// 启动时立刻查询一次,避免初始空状态
fetchServerStatus();
// 每6秒刷新一次状态
setInterval(fetchServerStatus, 6000);

module.exports = new Command({
  name: cmdconfig.EstadoCommand,
  description: cmdconfig.EstadoCommandDesc,
  async run(interaction) {
    const LatinStatus = new Discord.MessageEmbed()
      .setColor('RANDOM')
      // 拼接成要求的展示格式,第三个参数设为true让两个字段同行显示
      .addField('**Players Online:**', `${onlinePlayerCount} Players`, true)
      .addField('**Status**', isServerOnline ? '**Online💚**' : '**Offline❤️**', true);

    interaction.reply({
      embeds: [LatinStatus] // 变量名和定义保持一致
    });
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:01:06