Discord.js 变量在定义时不存在?

Posted

技术标签:

【中文标题】Discord.js 变量在定义时不存在?【英文标题】:Discord.js variable does not exist when defined? 【发布时间】:2021-08-22 15:02:12 【问题描述】:

我正在尝试使用 discord.js 和 Minecraft-server-util 编写机器人命令,但我的代码没有使用我定义的 const 并且说它不存在。如果您发现任何其他问题,您可以纠正我。

client.on('message', message => 
  if (message.content === `$prefixjavaserverstatus`) 
    const args = message.content.slice(prefix.length).trim().split(' '); // this is where args is defined.
        if (!args.length) 
            return message.channel.send(`You didn't provide a server, $message.author!`); // checks if args exist
        
    if (args.length > 1) 
      return message.channel.send(`Wrong input! EG. play.hypixel.net, $message.author`); // checks if there are only 1 arguments
    

      
    const util = require('minecraft-server-util');
    var serverinfo = null
    util.status(args) // This code is giving an error saying args does not exist.
     .then((response) => 
        console.log(response);
        serverinfo = response;
    const embed = new Discord.MessageEmbed()
      .setTitle('play.hypixel.net Server Status')
      .setColor(0xff0000)
      .setDescription('IP: ' + response.host + '\n' + 'Port: ' + response.port + '\n' + 'Version: ' + response.version + '\n' + 'Online Players: ' + response.onlinePlayers.toString() + '\n' + 'Max Players: ' + response.maxPlayers.toString() + '\n');
      message.channel.send(embed);
      )
      .catch((error) => 
        console.error(error);
    );
);

【问题讨论】:

您遇到了什么错误以及在什么变量上? 我得到 'args' 在 util.status(args) 上不存在,即使它定义在 client.on 和如果 message.content 的顶部 我已经对您的代码进行了格式化,这样可以更轻松地查找范围问题等错误。我希望它有所帮助。 【参考方案1】:

您已经在 if 语句中定义了 args。你需要把它放在那里。

client.on('message', (message) => 
  const args = message.content.slice(prefix.length).trim().split(' ') // this is where args is defined.
  if (message.content === `$prefixjavaserverstatus`) 
    if (!args.length) 
      return message.channel.send(`You didn't provide a server, $message.author!`) // checks if args exist
    
    if (args.length > 1) 
      return message.channel.send(`Wrong input! EG. play.hypixel.net, $message.author`) // checks if there are only 1 arguments
    
  
  const util = require('minecraft-server-util')
  var serverinfo = null
  util
    .status(args) // This code is giving an error saying args does not exist.
    .then((response) => 
      console.log(response)
      serverinfo = response
      const embed = new Discord.MessageEmbed()
        .setTitle('play.hypixel.net Server Status')
        .setColor(0xff0000)
        .setDescription('IP: ' + response.host + '\n' + 'Port: ' + response.port + '\n' + 'Version: ' + response.version + '\n' + 'Online Players: ' + response.onlinePlayers.toString() + '\n' + 'Max Players: ' + response.maxPlayers.toString() + '\n')
      message.channel.send(embed)
    )
    .catch((error) => 
      console.error(error)
    )
)

如果这不起作用,请将您在不和谐聊天中发送的命令发送给我。

【讨论】:

我无法设置 2 个答案,但您都正确,谢谢。【参考方案2】:

错误是由于您在其中定义 args 的范围造成的。 args 是在你的第一个 if 语句中定义的,而它应该在上面定义一行。

const args = message.content.slice(prefix.length).trim().split(' ');
if (message.content === `$prefixjavaserverstatus`) 
    // this is where args is defined.
    if (!args.length) 
        return message.channel.send(`You didn't provide a server, $message.author!`); // checks if args exist
    
    if (args.length > 1) 
        return message.channel.send(`Wrong input! EG. play.hypixel.net, $message.author`); // checks if there are only 1 arguments
    

【讨论】:

我无法设置 2 个答案,但您都正确,谢谢。

以上是关于Discord.js 变量在定义时不存在?的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js 存在活动状态和名称存在问题

Discord.js 不检查参数是不是存在

MongoDB / Discord.js - 检查集合的存在

Discord JS(机器人存在)

Discord.js 存在用户

Node.js、discord.js 和 MySQL - ER_NO_SUCH_TABLE:表 'NAME' 不存在