代码之家  ›  专栏  ›  技术社区  ›  Mario

获取包含空格的命令参数

  •  0
  • Mario  · 技术社区  · 7 年前

    我有一个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?

    所以它会发“你好,你好吗?”所有的公会成员。

    但是,它当前将整个命令作为消息发送…因此,它将以下信息发送给协会的所有成员: #广播你好,你好吗?

    我知道问题出在这一行:

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

    编辑 我试着这样做:

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

    但这只能从输入的信息中得到“嗨”。


    我想得到包括空格在内的论点。

    任何帮助都将不胜感激。

    谢谢!

    2 回复  |  直到 7 年前
        1
  •  1
  •   frobinsonj    7 年前

    你可以使用 splice join 要实现这一点:

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

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

        2
  •  0
  •   Frustrated programmer    7 年前

    “答案” Profit “更好,但这里有一个替代方案,我已经发现:

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

    这将首先分割空白区域 (arguments) 变为一个名为 array .
    之后我们会打电话给 .shift() 函数从数组中删除第一个元素(包括前缀的命令)。现在,我们用最后一行中的空格替换数组的逗号,以得到最终的结果。

    推荐文章