在JS中使用带有自定义参数

时间:2015-06-10 10:00:58

标签: javascript

我试图让它成为当有人输入时!familyfortunes%NAME%在消息中它将使用该命令运行并从消息中获取参数(%NAME%)然后将其存储在变量中

我以为我可以使用if(message.toLowerCase.indexOf("!familyfortunes") !=-1){}并将$ message存储到另一个变量中,但拆分为删除!familyfortunes所以它只保留用户名但不断返回错误:

  

greatbritishbg:!familyfortunes lol [10:53:39]错误 - TypeError:   undefined不是一个函数       在null。 (example.js:68:29)

哪个是.split()部分。

client.addListener('chat', function (channel, user, message) {
    console.log(user.username + ': ' + message);
    if (message.toLowerCase() === '!familyfortunes') { //If message contains !familyfortunes
        //var res = messageString.split("familyfortunes ");// Remove Family Fortunes to just get username
        client.say(channel, 'Latest Follower: ' + Follower.response);
        var raidName = Follower.response;
        io.emit('follow', raidName);
    }
}

任何关于如何解决这个问题的建议都将受到赞赏。感谢。

2 个答案:

答案 0 :(得分:1)

你非常接近。请注意,toLowerCase是一个函数,所以你会 需要做message.toLowerCase().indexOf()。 我不知道消息是否必须以命令开头,但我认为它必须。快速举例:

var msg = "!familyfortunes param1 param2";
if (msg.toLowerCase().indexOf("!familyfortunes") == 0) {
    var parts = msg.split(" ");
    if(parts.length > 1) {
        parts.shift();
        console.log(parts.join(" "));
    }
}

var parts = msg.split(" ")将字符串拆分为空格并返回一个数组。 msg.shift()删除数组中的第一个条目(!familyfortunes),然后msg.join(" ")获取数组的其余部分并构建一个以空格分隔的字符串。

如果您只在关键字后面允许一个值,则可以检查parts.lenght == 2,然后执行console.log(parts[1])以获取参数。

答案 1 :(得分:1)

您应该尝试使用正则表达式

var r =/!familyfortunes\s+(.*)/i
var message = "!familyfortunes %NAME%"
message.match(r)
>> ["!familyfortunes %NAME%", "%NAME%"]

正则表达式匹配以!familyfortunes开头的字符串,一个或多个空格,然后是命令的参数。第一组是命令的参数。