程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Discord.js 不检查 args 是否存在大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Discord.js 不检查 args 是否存在?

开发过程中遇到Discord.js 不检查 args 是否存在的问题如何解决?下面主要结合日常开发的经验,给出你关于Discord.js 不检查 args 是否存在的解决方法建议,希望对你解决Discord.js 不检查 args 是否存在有所启发或帮助;

我正在尝试使用 discord.Js 和 minecraft-server-util 编写 minecraft 服务器信息检查器,但要检查 args 是否存在或只有 1 个参数不起作用,并且它正在忽略那些检查错误但是当我不包含任何内容时,server-util 部分会向控制台发送错误“预期主机(参数)有内容,得到一个空字符串”如果您能帮助我,我不确定问题是什么那就太好了。

命令名称:@javaserverstatus 命令和前缀是 17 个字符,这就是将 slice 设置为 17 的原因。

clIEnt.on('message',(messagE) => {
  const args = message.content.slice(17).trim().split(' ') // this is where args is defined.
  if (message.content === `${prefix}javaserverstatus`) {
    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.toString()) // This code is giving an error saying args does not exist.
    .then((responsE) => {
      console.log(responsE)
      serverinfo = response
      const embed = new discord.messageEmbed()
        .settitle(args + ' 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)
    })
})

解决方法

即使消息不是命令,您的命令代码仍在运行。

例如,消息 "hi" 将导致 [""] 的参数。然后它会简单地忽略 if 语句并运行您的命令。

此外,如果消息是 "{prefix}javaserverstatus",则它的 args 长度始终为 1 ([""])。

另外要注意的是,如果消息也是 "{prefix}javaserverstatus some arguments",则验证数据的 if 语句不会运行,因为消息不再等于 ${prefix}javaserverstatus

您应该将代码修复为仅在命令实际运行时运行,并正确验证您的数据:

client.on("message",(messagE) => {
  // create args
  const args = message.content.slice(17).trim().split(" ");

  // fits the command,including arguments,not just a blank command
  if (message.content.startsWith(`${prefix}javaserverstatus`)) {
    // args.length will always be 1 or greater.
    // instead,check if the first argument is an empty String.
    if (args[0] === "") {
      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
    }

    // only if the command is valid,then run the command.
    const util = require('minecraft-server-util');
    let serverinfo = null;
    util
      .status(args.toString())
      .then((responsE) => {
        console.log(responsE);
        serverinfo = response;
        const embed = new Discord.messageEmbed()
          .settitle(args + " 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);
      });
  }
});

下面是一个片段,代码类似于您问题中的代码以帮助突出问题:

// The following code will not work as expected
function simulateOnmessage(content) {
  console.log("================");
  const args = content.slice(17).trim().split(" ");
  console.log("Args: ",args);
  console.log("Args length: " + args.length);
  if (content === "!javaserverstatus") {
    console.log("checking arguments...");
    if (!args.length) {
      return console.log("No server provided!");
    }
    if (args.length > 1) {
      return console.log("Bad input!");
    }
    console.log("No problems found!");
  }
  doSomethingWith(args.toString());
}
function doSomethingWith(str) {
  if (str === "") {
    console.log("EMPTY StriNG!");
  } else {
    console.log("OK!");
  }
}
simulateOnmessage("!javaserverstatus");
simulateOnmessage("!javaserverstatus args");
simulateOnmessage("!javaserverstatus with args");
simulateOnmessage("completely invalid message");
simulateOnmessage("hi");

TLDR;

  • 使用 String.startsWith() 或类似的东西检查您的命令是否正在运行
  • 仅在符合条件的情况下运行代码

大佬总结

以上是大佬教程为你收集整理的Discord.js 不检查 args 是否存在全部内容,希望文章能够帮你解决Discord.js 不检查 args 是否存在所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。