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

ReferenceError: players未定义:Discord机器人命令运行异常求助

问题:ReferenceError: players未定义

原本一切运行正常,但加载文件后命令无法工作,出现以下错误:

/home/Ales/latinbot2/Commands/estado.js:54
              .addField('**Jugadores en linea:**', `${players || "0"}`)
                                                      ^
    ReferenceError: players未定义
        at Command.run (/home/Ales/latinbot2/Commands/estado.js:54:51)
        at Event.run (/home/Ales/latinbot2/Events/interactionCreate.js:44:13)
        at Client.<anonymous> (/home/Ales/latinbot2/Structures/Client.js:109:49)
        at Client.emit (node:events:513:28)
        at InteractionCreateAction.handle (/home/Ales/latinbot2/node_modules/discord.js/src/client/actions/InteractionCreate.js:83:12)
        at module.exports [as INTERACTION_CREATE] (/home/Ales/latinbot2/node_modules/discord.js/src/client/websocket/handlers/INTERACTION_CREATE.js:4:36)
        at WebSocketManager.handlePacket (/home/Ales/latinbot2/node_modules/discord.js/src/client/websocket/WebSocketManager.js:346:31)
        at WebSocketShard.onPacket (/home/Ales/latinbot2/node_modules/discord.js/src/client/websocket/WebSocketShard.js:493:22)
        at WebSocketShard.onMessage (/home/Ales/latinbot2/node_modules/discord.js/src/client/websocket/WebSocketShard.js:327:10)
        at callListener (/home/Ales/latinbot2/node_modules/ws/lib/event-target.js:290:14)

用户提供的代码:

const fs = require("fs");

const Discord = require("discord.js");
const yaml = require("js-yaml");

const supportbot = yaml.load(
  fs.readFileSync("./Configs/supportbot.yml", "utf8")
);
const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8"));

const Command = require("../Structures/Command.js");
const { timeStamp } = require("console");
var request = require('request');

const Gamedig = require('gamedig');
const cooldown={}

let state = null;


setInterval(() => {


  Gamedig.query({
    type: 'minecraft',
    host: 'mc.latinplay.net',
    port: '25565'
  })
  .then((updatedState) => {
    state = updatedState;
    players = state.players.length;
}).catch((error) => {
  console.log("El servidor esta offline.");
});
}, 6000);

module.exports = new Command({
  name: cmdconfig.EstadoCommand,
  description: cmdconfig.EstadoCommandDesc,
  async run(interaction) {

      
      if (!interaction.member.roles.cache.find(e=>e.name=="〘🚨〙【 Staff Superior 】〘🚨〙") && interaction.user.id in cooldown && cooldown[interaction.user.id] - Date.now() > 0) // in cool down
          return interaction.reply("✨ **Este comando esta en cooldown! Espera 5 minutos para volver a usarlo.**");
      cooldown[interaction.user.id] = Date.now() + 300000; // 5 min in ms.
      
      const LatinEstado = new Discord.MessageEmbed()
          .setColor('RANDOM')
          .setTitle('𝐋𝐚𝐭𝐢𝐧𝐏𝐥𝐚𝐲 𝐍𝐞𝐭𝐰𝐨𝐫𝐤 **Estado del Servidor**')
          .setURL("https://store.latinplay.net/")
          .addField('**Jugadores en linea:**', `${players || "0"}`)
          .addField('**Estado Actual:**', "**En Linea💚**", true)
          .setThumbnail('https://media0.giphy.com/media/5RQ6coK6GVXGfPPq69/giphy.gif?cid=790b76115867f0dba05d9cf2aceb80efed5b0e494387e3b2&rid=giphy.gif&ct=g')
          .setFooter({
              text: 'LatinBot | Version 1.0 ',
              iconURL: 'https://cdn.discordapp.com/attachments/953043417234026547/988805760458821642/Diseno_sin_titulo.png'
          });
      interaction.reply({
          embeds: [LatinEstado],
      });

  }
});

解决方法

  1. 声明全局players变量:在let state = null;下方添加let players = 0;,确保变量在全局作用域存在并初始化,避免未定义错误。

  2. 处理服务器离线场景:在catch回调中重置state和players,同时修正状态显示逻辑:

.catch((error) => {
  console.log("El servidor esta offline.");
  state = null;
  players = 0;
});
  1. 动态更新服务器状态:生成Embed时根据state是否存在判断在线状态,不再固定显示在线:
.addField('**Estado Actual:**', state ? "**En Linea💚**" : "**Fuera de Linea🔴**", true)

修改后的完整代码:

const fs = require("fs");

const Discord = require("discord.js");
const yaml = require("js-yaml");

const supportbot = yaml.load(
  fs.readFileSync("./Configs/supportbot.yml", "utf8")
);
const cmdconfig = yaml.load(fs.readFileSync("./Configs/commands.yml", "utf8"));

const Command = require("../Structures/Command.js");
const { timeStamp } = require("console");
var request = require('request');

const Gamedig = require('gamedig');
const cooldown={}

let state = null;
let players = 0;

setInterval(() => {
  Gamedig.query({
    type: 'minecraft',
    host: 'mc.latinplay.net',
    port: '25565'
  })
  .then((updatedState) => {
    state = updatedState;
    players = state.players.length;
  }).catch((error) => {
    console.log("El servidor esta offline.");
    state = null;
    players = 0;
  });
}, 6000);

module.exports = new Command({
  name: cmdconfig.EstadoCommand,
  description: cmdconfig.EstadoCommandDesc,
  async run(interaction) {
      
      if (!interaction.member.roles.cache.find(e=>e.name=="〘🚨〙【 Staff Superior 】〘🚨〙") && interaction.user.id in cooldown && cooldown[interaction.user.id] - Date.now() > 0)
          return interaction.reply("✨ **Este comando esta en cooldown! Espera 5 minutos para volver a usarlo.**");
      cooldown[interaction.user.id] = Date.now() + 300000;
      
      const LatinEstado = new Discord.MessageEmbed()
          .setColor('RANDOM')
          .setTitle('𝐋𝐚𝐭𝐢𝐧𝐏𝐥𝐚𝐲 𝐍𝐞𝐭𝐰𝐨𝐫𝐤 **Estado del Servidor**')
          .setURL("https://store.latinplay.net/")
          .addField('**Jugadores en linea:**', `${players}`)
          .addField('**Estado Actual:**', state ? "**En Linea💚**" : "**Fuera de Linea🔴**", true)
          .setThumbnail('https://media0.giphy.com/media/5RQ6coK6GVXGfPPq69/giphy.gif?cid=790b76115867f0dba05d9cf2aceb80efed5b0e494387e3b2&rid=giphy.gif&ct=g')
          .setFooter({
              text: 'LatinBot | Version 1.0 ',
              iconURL: 'https://cdn.discordapp.com/attachments/953043417234026547/988805760458821642/Diseno_sin_titulo.png'
          });
      interaction.reply({
          embeds: [LatinEstado],
      });
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:15:56