0

そのため、プロジェクトとして、このボットを IRC チャンネルに適応させています: https://gist.github.com/996827

私がやろうとしているのは、メッセージを送信する機能をテストすることです。メッセージ機能は正常に動作しているようですが、チャネルからのメッセージを「リッスン」するのに少し苦労しています。

//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"); 
    }
  }
}

私はこれを、コンソールで受信するのを見てきた話のいくつかと一致させようとしています. 私は明らかに間違ったことをしていますか?うまく機能させるには、いくつかの正規表現が必要になることはわかっています。

4

1 に答える 1

0

irc.listeners明らかに、要素が配列である配列です(ただし、「マジックナンバー」を使用してサブ要素にインデックスを付けているため、オブジェクトの配列にする方が良い設計になるように見えます)が、if (irc.listeners[i] == "string that is being listened for")処理している行では文字列の配列であるかのように。私はあなたが意味したと思いますif (irc.listeners[i][someOtherMagicNumber] == ...

ここでも、サブ配列ではなくオブジェクトを使用して各リスナーを表し、それらの要素に意味のあるキーを与えます。現時点では、リスナーの 1 番目、2 番目、3 番目の要素が何を表しているのかを推測する必要があります。数か月後にコードを再検討する必要がある場合は、そうする必要があります。

また、いくつかの条件下では、要素を削除していますirc.listenersが、その後、次の要素になるものをさらにテストします。ただし、ループの次の反復はそれをスキップするため、その次の要素が以前のテストの対象になることはありません。繰り返し処理している配列から要素を削除または挿入することは、非常にトリッキーで、間違えやすいです。

于 2012-08-17T02:54:27.427 に答える