NodeJS, аргументы команды DiscordJS, разделенные на {} - PullRequest
0 голосов
/ 23 мая 2019

Быстрый вопрос

Если я делаю команду, подобную следующей

!add {gamename}{gamedescription}{gamestatus}

Откуда мне знать, что каждый аргумент находится внутри {}

Iзнаю, что настоящая команда - это мой первый аргумент

 let args = message.content.substring(PREFIX.length).split(" ");
 switch(args[0]) {
    case 'status':

PREFIX - это!на.

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Это регулярное выражение поможет. Проверьте это ниже.

const regex = /{(.+?)}/g;
const string = '!add {game}{game description}{game status}';

const args = [];

let match;
while (match = regex.exec(string)) args.push(match[1]);

console.log(args);

Пояснение:
Чтобы увидеть, как работает регулярное выражение и что делает каждый символ, посмотрите здесь . Что касается цикла while, он повторяет каждое совпадение из регулярного выражения и помещает строку из первой группы захвата в массив аргументов.

Небольшое, но достойное примечание:
. не соответствует разрывам строк, поэтому аргументы, разбитые на несколько строк в сообщении, не будут включены. Чтобы предотвратить это, вы можете заменить любой символ новой строки пробелом перед использованием регулярного выражения.

0 голосов
/ 23 мая 2019

Вы можете использовать регулярное выражение для захвата подстрок в шаблоне.

const message = {
  content: '!add {gamename}{gamedescription}{gamestatus}'
};

const matches = message.content.match(/^!([a-zA-Z]+) {([a-zA-Z]+)}{([a-zA-Z]+)}{([a-zA-Z]+)}/);
if (matches) {
  console.log(matches[1]); // add
  console.log(matches[2]); // gamename
  console.log(matches[3]); // gamedescription
  console.log(matches[4]); // gamestatus
}

Когда строка соответствует шаблону, объект matches имеет подстроки, окруженные () в matches[1], matches[2], matches[3] и matches[4]. matches[0] содержит всю совпавшую строку (в данном случае !add {gamename}{gamedescription}{gamestatus}).

...