0

我找不到太多关于用 Bash 编写的 IRC 机器人的文档,所以这是我的问题。我有一个简单的机器人,可以加入频道并将消息写入频道。

但是,我如何阅读来自频道的消息,即来自用户的消息?

最终,我希望我的机器人能够识别一个关键字,该关键字将使机器人启动并返回一些东西。作为我的机器人的基础,我使用了来自http://www.blog.tdobson.net/node/174的脚本。向我指出一些关于如何在 Bash 中编写 IRC 机器人的有用文档也很棒。

4

2 回答 2

2

将 IRC 连接协议问题留给ii解决。

它是一个 IRC 客户端,可以在文本文件(作为日志)中生成所有输出,但是如果您向这些文件写入(附加行),您实际上是在向 IRC 发送命令。所以很简单。

我推荐awk用于文本解析。如果您已经编写了复杂的 bash 脚本,那么它就是一种针对此的语言并且易于学习。

于 2012-08-12T06:42:57.697 回答
1

您指向我们的基本流是这个tail -f file | telnet foo | while true; do blah; done

此方法将写入文件的数据获取到 telnet 命令中,但没有任何内容从 telnet 命令中获取数据并将其通过管道传输到脚本中。

修改循环以支持tail -f file | telnet foo | while read f; do echo "I got message $f"; done为您提供从 telnet 会话发送给您的数据,然后您可以对其进行解析。这个策略的问题是你不能自发地做任何事情,只能响应来自 telnet 会话的流量。

您可以通过请求超时来解决该问题:

tail -f pingbot.input | telnet irc.freenode.net 6667 | while read -t 2 f || true; do
  echo I got message $f;
done

超时后你会得到一个空的 $f,如果你收到一条消息,你会得到一个完整的 $f。解析来自 irc 协议的 PRIVMSG 输出留给读者作为练习。

tail | telnet | while read f; do ; done循环不是完成此任务的传统方式。传统上,您会将 telnet 设置为协同进程 (coproc)。但无论哪种方式都可能有效。

于 2011-05-19T20:23:00.813 回答