2012-08-16 59 views
0

所以,作爲一個項目,我適應這個機器人爲我的IRC頻道:https://gist.github.com/996827入門Node.js的我IRC bot的

我所要做的是,測試它的送出能力消息。消息函數似乎工作正常,但我有點困難,試圖讓它「聽」來自通道的消息。

//handles incoming messages 
irc.handle = function(data) 
{ 
    var i, info; 
    for (i = 0; i < irc.listeners.length; i++) 
    { 
    info = irc.listeners[i][0].exec(data); 
    if (info) 
    { 
     irc.listeners[i][1](info, data); 
     if (irc.listeners[i][2]) 
     { 
     irc.listeners.splice(i, 1); 
     } 
    } 
    if (irc.listeners[i] == "string that is being listened for") 
    { 
     irc.msg("#solidoodle", "Test,test,test"); 
    } 
    } 
} 

我一直在試圖滿足這一些我一直在看它收到在控制檯中的談話。我做什麼顯然是錯的? 我知道我需要一些Regexs,使其正常工作。

回答

0

irc.listeners明顯是一個數組,其元素是數組(儘管它看起來像是使用一個對象數組會更好,因爲您使用「幻數」來索引子元素),但是在行if (irc.listeners[i] == "string that is being listened for")你正在對待它,就好像它是一個字符串數組。我猜你的意思是if (irc.listeners[i][someOtherMagicNumber] == ...

再次,使用對象,而不是子數組來表示每個偵聽器,並給它們的元素有意義的鍵。現在,我們正左猜測在什麼一個聽者的第一,第二和第三個要素都應該表示,等會你,如果你需要從現在開始重新審視你的代碼幾個月。

而且,在某些情況下,你是從irc.listeners刪除元素,但隨後下降到通過現在會是怎樣的一個元素進一步的測試。但是,下一個元素將永遠不會受到較早的測試,因爲循環的下一個迭代將跳過它。從你正在迭代的數組中刪除或插入元素是非常棘手和容易出錯的。

+0

這部分是不是我的代碼在所有。我試圖在聽衆中尋找可以聽取消息的地方。我沒有添加,如果(irc.listeners [I] ==「是被監聽的字符串」)和我同意這是愚蠢的,我沒有看到這是一個數組。我想我會轉向一個更好的機器人,它在代碼中有評論。這是一種糟糕的結構。 – baordog 2012-08-17 14:55:16