使用c语言写一个简单的irc机器人

所谓irc机器人其实是一个程序,它可以进入某个irc频道,然后根据该机器人的功能它会对进入的频道进行侦听,然后过滤一些信息,侦听到与自身功能想匹配的字符串时做出相应的动作

频 道里总是有好玩的机器人,它可以完成很多任务,感觉很有趣,在对一台连接了irc服务器的机器进行抓包后,我有了写一个irc机器人的冲动,于是在 telnet下经过测试后便开始动手写了,可是一写起来才发现c语言做这个根本就是找虐,各种bug接踵而至,内存管理中的错误让人防不胜防,经过了几天 的的纠结与改写我才算是写了一个稳定的机器人

所以如果想写机器人的话,如果你不是为了学习c语言与socket编程而将编写irc机器人作为练习的话,那么就请使用python这类的脚本语言吧,不然你会被各种内存错误,字符处理这些问题搞到崩溃的,当然如果想使用c语言的正则匹配的话可以使用GNU Regex Library或者PCRE,这里不作介绍

下面我就将我写的第一个irc机器人的代码贴出来,并加上一些简单的说明,目的是告诉大家机器人应该怎样写,这其中要注意哪里东西,虽然各种编程语言的语法和语义会有很大的不同,但是所要完成的工作的步骤是大抵相同的

本程序测试的irc服务器是freenode,频道是#debian_cn(本人是op),机器人的nick是welcombot,机器人的功能是当有人进入到频道后便向该人发送信息
”欢迎来到debian_cn频道,我是机器人welcombot,祝你玩得开心,玩得快乐!“

然后再说几个要注意的地方
第一个当然是内存管理的问题了,这个大家自己体会,当然本程序很小,内存管理问题可能不会那么突出
然后我们来简单地说说机器人从进入irc到进入频道再到向用户发送信息的过程
首先进入irc我们当然是要连接到irc,地址irc.freenode.net端口6667
连接成功后我们发送NICK与USER命令来告诉irc服务器我们的信息
NICK welcombot
USER welcombot welcombot irc.freenode.net :welcombot
这里要注意的一点是如果你的nick是已经被注册过的,那么你需要进行密码验证
PRIVMSG NickServ :identify 通过发送上面的内容来进行验证
一切就绪后就我们可以进入到某个频道里了
JOIN #debian_cn
注意频道名称前要加#,这个不能忘记了
最后就是进行侦听了,我们进入到该频道后就可以接收该频道内的所有信息,然后我们过滤到自己想要的东西再处理就行了
比如某个nick进入了频道后的消息是这样的
:[email protected]*.*.*.* JOIN #debian_cn
那么我们可以简单地通过匹配JOIN来确定是否有人进入频道,但是如果有人在该频道里发送的消息中带有JOIN的话那么也将被匹配到
有人在频道里发送消息的内容大概是这样的
:[email protected]/brisk/x-1655957 PRIVMSG #debian_cn :JOIN
所以如果有PRIVMSG这样的字符串我们就不要处理
最后要注意的是irc服务器会定时给你的机器人发送PING消息,我们要处理这个消息来让我们一直保持在线,否则机器人将会是PING timeout退出irc,我们在收到该消息后发送一个对应的PONG就可以了,比如我们收到的PING是这样的
PING :verne.freenode.net
然后我们回一个
PONG :verne.freenode.net

一张测试的图
3266235629850639776
好了,大概就是这么多,下面就放代码了吧

–阅读次数(44)

发表评论

电子邮件地址不会被公开。

*