【问题标题】:I'm having trouble getting started my node.js IRC bot我无法启动我的 node.js IRC 机器人
【发布时间】:2012-08-13 07:06:36
【问题描述】:

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

我一直在尝试将其与我在控制台中看到的一些谈话相匹配。我在做任何明显错误的事情吗? 我知道我需要一些正则表达式才能使其正常工作。

【问题讨论】:

    标签: javascript node.js bots irc


    【解决方案1】:

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

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

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

    【讨论】:

    • 这部分根本不是我的代码。我试图在侦听器中寻找可以收听消息的地方。我确实添加了 if (irc.listeners[i] == "正在监听的字符串"),我同意这很愚蠢,我没有看到它是一个数组。我想我会继续使用代码中包含 cmets 的更好的机器人。这个结构有点差。
    猜你喜欢
    • 2011-01-21
    • 2015-02-21
    • 1970-01-01
    • 2012-06-13
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 2023-04-08
    相关资源
    最近更新 更多