【问题标题】:Discord.js Arguments With SpacesDiscord.js 带空格的参数
【发布时间】:2018-08-07 20:37:42
【问题描述】:

所以我正在尝试创建我的机器人,我希望有一个命令可以将信息添加到 sqlite 数据库

https://gyazo.com/6961a05dc2d6aeca6683b59f888c2e82

if (command === "addplayer") {
  message.delete()
  let [name, crew, rank, weapon, df, talent, profession, other] = args;
  if(!name) return message.author.send("Name argument is required!");
  let id = name.toLowerCase();
  if(!crew) {let crew = "Blank";}
  if(!rank) {let rank = "Blank";}
  if(!weapon) {let weapon = "Blank";}
  if(!df) {let df = "Blank";}
  if(!talent) {let talent = "Blank";}
  if(!profession) {let profession = "Blank";}
  if(!other) {let other = "Blank";}

  sql.run("INSERT INTO players (id, Name, Crew, Rank, Weapon, DF, 
Talent, Profession, Other) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", [id, 
name, crew, rank, weapon, df, talent, profession, other]);
  return
}

我真正想知道的是如何在参数中添加空格键这样我就可以做到

>addplayer info with space, more info, even more, and so on

当我执行其他命令时,它会这样列出:

Info1: info with space Info2: more info Info3: even more Info4: and so on

【问题讨论】:

  • 听起来你想从每一行输入中提取一个变量。我在 sql 方面一点经验都没有,但我会尽力为你找出答案,而且让命令分开不是更容易吗?喜欢:!captain nameOfCaptain 等。
  • 我想这就是我想要的,但可以让它成为一个命令吗?
  • 我确定是这样,并不是说我确切知道如何操作,但你最好让每个单独的命令定义 crew rank weapons 等然后有一个命令像在屏幕截图中一样显示所有这些
  • 在您的 1 命令中,您希望参数用空格还是逗号分隔?您的最终评论(在“当我执行其他命令时...”之后)听起来像是您希望参数用逗号分隔。
  • @BlunderingPhilosopher 是的,这就是我想要的,所以你可以这样做>player info 1, some more info, and so on

标签: javascript bots discord discord.js


【解决方案1】:

您也可以这样做:

var arguments = args.toString();
arguments = arguments.split(",,").join(";")
arguments = arguments.split(",").join(" ")
arguments = arguments.split(";").join(",")
arguments = arguments.split(',');

【讨论】:

    【解决方案2】:

    我刚刚决定使用多个命令,例如

    >edit EXAMPLE 然后做类似的事情

    >editname EXAMPLE1 将名称设置为EXAMPLE1 而不是EXAMPLE

    【讨论】:

      【解决方案3】:

      好的,以你的示例命令为例,假设有人输入了这个,你想知道如何处理它:

      >addplayer jimmybenoit, Example Crew, Captain, Example Longsword, Example Fruit, Gainer, Cook, 其他信息在这里

      我假设您已经知道如何检查命令前缀,并将命令从 args 中分离出来,但我将在下面展示我将如何做到这一点。

      // get message content from user
      let input = message.content;
      
      // get command prefix ">"
      //  -> probably check that this is valid, if you haven't done that already
      let prefix = input[0];
      
      // get command (1 word)
      let command = input.substr(1).split(' ')[0];
      
      // get args - looks like you've already done this
      let args = command.substr( command.indexOf(' ') + 1 );
      
      // Check if command is valid, as you have in your code
      if (command === "addplayer") {
          // split args into an array, comma delimited
          // -> also map .trim() function to remove beginning / ending spaces
          args = args.split(',').map(elem => elem.trim());
      
          // split args into vars
          let [name, crew, rank, weapon, df, talent, profession, ...other] = args;
      
          // .. do the rest of your code
      }
      

      这里的关键是,您使用.split(',') 将args 字符串转换为数组,在',' 字符上拆分(并使用.trim() 从每个元素中清除空格,然后将所有变量分配给args 数组。

      最后的 ...other] 用于捕获任何剩余的参数 - 因此,如果您的文本 'Other information Goes here' 有逗号,所有这些额外的参数都将存储(作为数组)在 other 变量中。如果要将它们全部重新组合在一起,可以使用.join(',') 将它们用逗号分隔。

      如果您有任何问题,请告诉我!

      【讨论】:

      • 所以当你执行命令时,它会被分割,而不是空间,因为如果是这样的话,这就是我需要的
      • args = args.split(',').map(elem => elem.trim()); ^ TypeError: args.split 不是函数
      • args.split 仅在 args 是字符串时才有效,就像我上面的代码中一样。你和我一样设置args吗?
      • 我还有其他方法可以做到这一点吗?
      猜你喜欢
      • 2021-10-13
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      • 2014-09-28
      • 2021-12-24
      • 2018-08-22
      相关资源
      最近更新 更多