【问题标题】:Get command argument including spaces获取包含空格的命令参数
【发布时间】:2019-01-01 02:56:18
【问题描述】:

我有一个这样的 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];

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


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

任何帮助将不胜感激。

谢谢!

【问题讨论】:

    标签: javascript node.js discord.js


    【解决方案1】:

    您可以使用splicejoin 来实现:

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

    它将消息拆分为一个数组,删除第一个值,然后加入剩余的值。

    【讨论】:

    • 非常感谢! :)
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      相关资源
      最近更新 更多