Discord.js Arguments With Spaces

橙三吉。 提交于 2019-12-11 19:32:56

问题


So I'm trying to create my bot and I want there to be a command which adds information to a sqlite database

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
}

All I want to know really is how to add like a space key to the arguments so I can do

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

And when I do the other command it lists it out like this:

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


回答1:


Ok, so using your sample command as an example, let's say someone enters this, and you want to know how to handle it:

>addplayer jimmybenoit, Example Crew, Captain, Example Longsword, Example Fruit, Gainer, Cook, Other Information Goes here

I assume you have already figured out how to check the command prefix, and split the command from the args, but I'll show how I would do that below.

// 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
}

The key here, is you use .split(',') to turn the args string into an array, split on ',' character (and use .trim() to clear out whitespace from each element, THEN you assign all of your variables to the args array.

The final ...other] is used to catch any remaining arguments - so if your text 'Other information Goes here' had commas, all of those extra arguments would get stored (as an array) in the other variable. If you want to put them all back together, you can use .join(',') to separate them by comma.

Let me know if you have any questions!




回答2:


I've just decided to go with multiple commands like

>edit EXAMPLE and then doing something like

>editname EXAMPLE1 setting the name to EXAMPLE1 instead of EXAMPLE



来源:https://stackoverflow.com/questions/49021540/discord-js-arguments-with-spaces

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!