[Python]为IRC编程

今天我要教你如何编程 BOT体育馆。 首先,对于不认识的人来说,机器人是一个程序,它连接到IRC频道并与之交互,从而使我们能够(例如)主持频道而无需 我们已经连接 从而避免垃圾邮件,或者避免垃圾邮件识别出一系列命令并执行相应的代码。
尽管已经有机器人可以使用了,但老实说,我是一个喜欢编写自己的程序来学习的人,在看到它可以运行之后,它给我们带来了极大的满足感^^

话虽如此,让我们继续本教程。

要对机器人进行编程,我们需要一个 纯文本编辑器 cualquiera (nano,gedit,medit等)python解释器 (将需要2.6或2.7, 不适用于python 3.x).

首先,我们导入 所需模块,在这种情况下,我们只需要两个:

[代码]#!/ usr / bin / env python
#-*-编码:utf-8-*-

进口插座
导入字符串
[/代码]

现在我们继续 configurar 机器人:

[代码] HOST=»irc.desdelinux。网”
端口= 6667
尼克=»CalicoBot»
IDENT =»CalicoBot»
REALNAME =»CalicoBot»
CHAN =»#家»
readbuffer =»»
[/代码]

我将解释每个变量:

  • 主持人: 我们将连接到的服务器的URL
  • 港口: 服务器端口。 默认情况下为6667。
  • NICK,IDENT和REALNAME: 它们对应于该机器人的昵称,其标识和真实姓名。
  • 陈: 机器人将进入的频道
  • 读缓冲区: 在此变量中,服务器发送的数据将被保存。

配置好我们的漫游器后,我们将继续 连接

[代码] s = socket.socket()
s.connect((主机,端口))
s.send(“ NICK%s \ r \ n”%NICK)
s.send(“ USER%s%s bla:%s \ r \ n”%(IDENT,HOST,REALNAME))
s.send(“ JOIN:%s \ r \ n”%CHAN)
[/代码]

第一行没有太多的奥秘,第二行创建了 服务器连接 最后三个将bot的数据发送到服务器以继续登录。

连接后,我们将创建一个 无限循环 我们将在其中 从服务器接收数据或向服务器发送数据:

[code]而1:
读缓冲区=读缓冲区+ s.recv(1024)
temp = string.split(readbuffer,“ \ n”)
readbuffer = temp.pop()
对于临时行:
行= string.rstrip(行)
line = line.split(CHAN +':')

如果行[0] .find(“ PING”)!= -1:
pingid =行[0] .split()[1] s.send(“ PONG%s \ r \ n”%pingid)
[/代码]

在上面写的所有行中,我只会评论重要的行。
连接器 line = line.split(CHAN +':')我们要做的就是分割服务器在什么时候向我们发送的内容 让我们从渠道中获取一些东西。
例如,以下行表示某人在频道上写了一些东西:

:son_link!sonlink@127.0.0.1 PRIVMSG #Home :Hola ^^

第一件事是用户的昵称及其连接数据(以!分隔),命令(在这种情况下,它表明他已经写了),通道,最后是冒号之后的消息。 我不会解释更多命令,因为该命令不属于本教程。

其他重要的是 在if之后。 服务器经常发送PING命令以检查用户是否仍然连接。 在这种情况下,僵尸程序将PING发送的ID发送给PONG命令,以向服务器表明它仍处于连接状态。

有了这个,我们已经有了机器人的基础。 现在,我将继续说明如何使漫游器根据我们希望对某些命令的响应,无论它们是来自IRC本身还是来自用户。

响应IRC命令:

PING和PRIVMSG是IRC命令的示例。 有很多命令,但是正如我之前说过的,我将不再赘述。
例如,我们可以使机器人与连接的用户打招呼:

[代码]如果行[0] .find('JOIN')!= -1:
name =行[0] .split('!')[0] .split(':')[1]如果name!= NICK和name.find(HOST)== -1:
s.send(“ PRIVMSG%s:Welcome @%s ^^ \ n”%(CHAN,名称))
[/代码]

首先我们检查服务器是否发送命令 注册 表示有人连接到服务器。 然后我们提取缺口,检查缺口是否不是IRC网址 (如果不是在我们运行漫游器后,它将立即迎接该网址) 最后,我们发送问候信息。

Bot命令:

现在如何制作我的机器人 响应我自己的命令? 让我们更好地看一个例子:

[代码]如果第[1]行=='$版本':
s.send(«PRIVMSG%s:CalicoBot 0.1.2(c)2012 Son Link \ n»%CHAN)
[/代码]

在这个例子中,如果有人写 $版本 机器人将显示消息,指示其名称,版本和作者。 该示例的完整代码如下:

[代码]导入套接字
导入字符串

主机=»本地主机»
端口= 6667
尼克=»CalicoBot»
IDENT =»CalicoBot»
REALNAME =»CalicoBot»
CHAN =»#家»
readbuffer =»»
s = socket.socket()
s.connect((主机,端口))
s.send(“ NICK%s \ r \ n”%NICK)
s.send(“ USER%s%s bla:%s \ r \ n”%(IDENT,HOST,REALNAME))
s.send(“ JOIN:%s \ r \ n”%CHAN)

而1:

读缓冲区=读缓冲区+ s.recv(1024)
temp = string.split(readbuffer,“ \ n”)
readbuffer = temp.pop()
对于临时行:
打印线
行= string.rstrip(行)
line = line.split(CHAN +':')

如果行[0] .find(“ PING”)!= -1:
pingid =行[0] .split()[1] s.send(“ PONG%s \ r \ n”%pingid)

如果行[0] .find('JOIN')!= -1:
name =行[0] .split('!')[0] .split(':')[1]如果name!= NICK和name.find(HOST)== -1:
s.send(“ PRIVMSG%s:Welcome @%s ^^ \ n”%(CHAN,名称))

如果len(line)<1:
如果第[1]行=='$版本':
s.send(«PRIVMSG%s:CalicoBot 0.1.2(c)2012 Son Link \ n»%CHAN)
[/代码]

我希望您喜欢本教程,当然,我会留下指向我的机器人代码的链接,以便您可以完整查看其代码并更好地了解其工作方式。 (尽管我删除了一些个人使用的命令)。

印花布