我在启动node.js IRC bot时遇到了问题

时间:2012-08-16 21:14:03

标签: javascript node.js bots irc

所以,作为一个项目,我正在为我的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"); 
    }
  }
}

我一直试图将这与我在控制台中收到的一些话题相匹配。我做了什么明显错误的事吗? 我知道我需要一些正则表达式才能让它运作良好。

1 个答案:

答案 0 :(得分:0)

irc.listeners显然是一个数组,其元素是数组(虽然它看起来像是一个对象数组将是一个更好的设计,因为你使用“魔术数字”来索引子元素),但在行if (irc.listeners[i] == "string that is being listened for")中,你将它视为一个字符串数组。我猜你的意思是if (irc.listeners[i][someOtherMagicNumber] == ...

再一次,使用对象而不是子数组来表示每个侦听器,并为其元素提供有意义的键。现在我们只能猜测一个监听器的第一,第二和第三个元素应该代表什么,所以如果你需要在几个月后重新访问你的代码,你也会这样做。

此外,在某些情况下,您正在删除irc.listeners中的元素,但随后会进一步测试现在将成为下一个元素的内容。但是,下一个元素永远不会受到早期测试的影响,因为循环的下一次迭代将跳过它。从正在迭代的数组中删除或插入元素非常棘手且容易出错。