Tmi.js как заставить команду бота принимать аргументы

#javascript #node.js #args #twitch

Вопрос:

Я не могу понять, как заставить моего чат-бота принимать аргументы после команд.

Пример: !веса опроса [50, 60, 75]

Код:

 client.on('message', (target, context, msg, self) => {
  if (self) { return; }
  const msgcon = msg.trim();
  if (msgcon.startsWith('!')) {
    if (msgcon === '!poll') {
        client.say(target, '')
        console.log(`* Executed ${msgcon} command at ${target}`);
    } else {
        console.log(`* Unknown command ${msgcon} attempted at ${target}`);
    }
  }
});
 

Как мне заставить его принимать аргументы?

Ответ №1:

поскольку тип аргумента для messsage-это просто строка, вы можете разделить ее с помощью метода .split.

 const PREFIX = "!";
let [command, ...args] = message.slice(PREFIX.length).split(/  /g); 

if (command == "!test") {
 console.log({ command, args })
}
 

если пользователь, где сказать, напишите в чате !test one two three , он выведет:

 {
  command: "!test",
  args: ["one", "two", "three"]
}
 

это означает, что вы можете получить доступ к каждому аргументу, введя args[x] (помните, что javascript отсчитывается от 0).


Пояснение: по сути, я получаю сообщение типа string и использую метод .slice для удаления префикса (значение команды очистки), а затем разбиваю сообщение на каждый пробел в строке, помещая его в массив. первый элемент в массиве будет задан в качестве команды, в то время как остальные являются аргументами.


https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice