2015-06-10 15 views
0

我試圖讓這個當有人類型!在消息,將與命令運行,並從消息採取的參數(%NAME%)familyfortunes%NAME%然後將其存儲在一個變量中。 !使用if語句在JS自定義參數

我以爲我可以使用if(message.toLowerCase.indexOf("!familyfortunes") !=-1){}和存儲$消息到另一個變量,但拆分刪除familyfortunes所以只保留了用戶名,但是,保持返回錯誤:

greatbritishbg: !familyfortunes lol [10:53:39] error - TypeError: undefined is not a function at 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); 
    } 
} 

有關如何解決這個問題的任何意見,將不勝感激。謝謝。

回答

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])得到的參數。

+0

哎@msfoster感謝的是,一直在看文檔和琢磨了一會兒。關於param1和param2,我認爲它使用空格來區分不同的參數? (在繼續使用之前試圖充分理解) –

+0

你是對的。我將添加更多描述。 – msfoster

1

你應該嘗試用正則表達式

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

正則表達式匹配的字符串開始!familyfortunes,一個或礦石的空間,然後命令的參數。第一組是命令的參數。