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], }); } });
解决方法
声明全局
players变量:在let state = null;下方添加let players = 0;,确保变量在全局作用域存在并初始化,避免未定义错误。处理服务器离线场景:在
catch回调中重置state和players,同时修正状态显示逻辑:
.catch((error) => { console.log("El servidor esta offline."); state = null; players = 0; });
- 动态更新服务器状态:生成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
相关产品推荐
相关产品推荐

