如何使用用Bash编写的IRC bot从IRC通道读取消息?

如何使用用Bash编写的IRC bot从IRC通道读取消息?,bash,irc,bots,channel,Bash,Irc,Bots,Channel,我找不到太多用Bash编写的关于IRC机器人的文档,所以这里是我的问题。 我有一个简单的机器人,可以加入一个频道,并将消息写入该频道 但是,如何读取来自频道的消息,即来自用户的消息 最后,我想让我的机器人识别一个关键字,它将启动机器人并返回一些东西。作为我的机器人的基础,我使用了来自的脚本。给我指点一些关于如何在Bash中编写IRC机器人程序的有用文档也很好。你给我们指点的基本流是这个tail-f文件| telnet foo |虽然是真的;胡说八道;完成 此方法将写入文件的数据获取到telnet

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

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


最后,我想让我的机器人识别一个关键字,它将启动机器人并返回一些东西。作为我的机器人的基础,我使用了来自的脚本。给我指点一些关于如何在Bash中编写IRC机器人程序的有用文档也很好。

你给我们指点的基本流是这个
tail-f文件| telnet foo |虽然是真的;胡说八道;完成

此方法将写入文件的数据获取到telnet命令中,但不会从telnet命令获取数据并将其导入脚本

修改循环以在读取f时支持
tail-f文件| telnet foo |;做回显“我收到消息$f”;完成
提供从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输出留给读者作为练习


读取f时的
tail | telnet |;做“完成”
循环不是完成此任务的传统方式。传统上,您会将telnet设置为协进程(coproc)。但是任何一种方法都可能有效。

您为我们指出的基本流是这个
tail-f文件| telnet foo |虽然是真的;胡说八道;完成

此方法将写入文件的数据获取到telnet命令中,但不会从telnet命令获取数据并将其导入脚本

修改循环以在读取f时支持
tail-f文件| telnet foo |;做回显“我收到消息$f”;完成
提供从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输出留给读者作为练习


读取f时的
tail | telnet |;做“完成”
循环不是完成此任务的传统方式。传统上,您会将telnet设置为协进程(coproc)。但是任何一种方法都可能有效。

将IRC连接协议问题留给用户解决

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


我建议使用
awk
进行文本解析。如果您已经编写了复杂的bash脚本,那么它就是一种专门针对这一点的语言,而且很容易学习。

将IRC连接协议问题留给您自己解决

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


我建议使用
awk
进行文本解析。这是一种专门针对这一点的语言,如果您已经编写了复杂的bash脚本,那么就很容易学习。

虽然在bash中编写IRC bot是一种新奇的东西,但实际上并不有用。帮你自己一个忙,选择一种真正适合这个目的的编程语言。我知道Python会是一个更好的选择,但我已经有一段时间没有用Python写东西了。“我只是更习惯于Bash。”马丁普说真的,用Bash来做这件事毫无意义。你认为在工作中使用错误的工具是因为你已经有一段时间没有使用正确的工具了。。尼克:仅仅因为它是一个错误的工具,并不意味着它不能完成任务:)我认为学习Bash的网络方面会很好,而IRC机器人正是我可以开始的地方。但我发现我在这里没有得到任何实际帮助:-/谢谢hinrik为那两位客户提供的帮助!虽然在bash中编写一个IRC机器人是一件新奇的事情,但它实际上并不有用。帮你自己一个忙,选择一种真正适合这个目的的编程语言。我知道Python会是一个更好的选择,但我已经有一段时间没有用Python写东西了。“我只是更习惯于Bash。”马丁普说真的,用Bash来做这件事毫无意义。你认为在工作中使用错误的工具是因为你已经有一段时间没有使用正确的工具了。。尼克:仅仅因为它是一个错误的工具,并不意味着它不能完成任务:)我认为学习Bash的网络方面会很好,而IRC机器人正是我可以开始的地方。但我发现我在这里没有得到任何实际帮助:-/谢谢hinrik为那两位客户提供的帮助!