获取包含空格的命令参数

时间:2018-07-24 13:05:56

标签: javascript node.js discord.js

我有一个Discord.js命令,

'broadcast': (msg) => {
    let message2broadcast = msg.content.substr(prefix + "broadcast ".length);
    if (!msg.channel.permissionsFor(msg.member).hasPermission("ADMINISTRATOR")) {
        msg.channel.sendMessage(msg.author + " | No permissions! :x:");
        return;
    } else {
        if (!message2broadcast) {

            msg.channel.sendMessage(msg.author + " | No message entered. :x:");

        } else {
            let tosend2 = ["`Sender:`", msg.author, "`Server:`", msg.guild.name, "`Message:`", message2broadcast];
            msg.channel.guild.members.forEach(user => {
                user.send(tosend2.join('\n'));
            });
            msg.channel.sendMessage(msg.author + " | Successfully broadcasted. :white_check_mark:");
        }
    }
}

我希望它通过键入来运行

#broadcast Hi, how are you?

因此它将发送“嗨,你好吗?”所有公会成员。

但是它当前将整个命令作为消息发送...因此它将以下内容发送给所有公会成员:#broadcast Hi, how are you?

我知道问题出在这一行:

let message2broadcast = msg.content.substr(prefix + "broadcast ".length);

编辑:我试图这样做:

let message2broadcast = msg.content.split(' ')[1];

但这只会在输入的消息中得到“嗨”。


我想获取包含空格的参数。

任何帮助将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用splicejoin来实现:

let message2broadcast = msg.content.split(' ').splice(1).join(' ')

它将消息拆分成一个数组,删除第一个值,然后合并其余值。

答案 1 :(得分:0)

回答“ Profit更好,但这是我想出的另一种解决方案:

var array = msg.content.split(' ');
array.shift();
let message2broadcast = array.join(' ');

这将首先将空白(arguments)拆分为名为array的变量。
然后,我们将调用.shift()函数以删除第一个元素(该命令包括前缀)。现在,我们在最后一行用空格替换数组的逗号,以获得最终结果。