# 构建一个 IRC（ro）机器人

> 原文： [https://pythonspot.com/building-an-irc-bot/](https://pythonspot.com/building-an-irc-bot/)

那里有 [IRC（Internet 中继聊天）](https://en.wikipedia.org/wiki/Internet_Relay_Chat)的大量（ro）机器人。 那么，如何仅仅为了好玩而开始在 Python 中构建和构建一个？

您将需要一个与 IRC 服务器连接并像传统 IRC 客户端一样运行的程序。 IRC 服务器从不要求进行任何复杂的人工验证，例如解决验证码，这就是为什么我们可以简单地使用脚本进行连接的原因。 该脚本本身将使用网络 _ 套接字，_ 一个库，该库通常用于以多种编程语言（包括 Python 和 C / C ++）提供网络交互。

## IRC 和 Python

要与 IRC 服务器通信，您需要使用 IRC 协议。 IRC 协议具有不同的消息，例如 PRIVMSG，USER，NICK 和 JOIN。 如果您好奇，可以阅读[整个协议](http://www.irc.org/tech_docs/rfc1459.html)。 但是遵循本教程可能会更简单；）仅需执行几个步骤即可完成身份验证：

IRC 协议是 IP 协议之上的一层。 要创建套接字，请使用以下命令：

```py
irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

```

socket.AF_INET 通知库使用网络协议 [IPv4。](https://en.wikipedia.org/wiki/IPv4 "IPv4") 第二个参数告诉库使用流套接字，该套接字通常在 TCP 协议上实现。 （IRC 通过 TCP / IP 进行工作）。 然后，我们必须使用以下命令对服务器进行身份验证：

```py
1
2
3

```

有时 IDENT 命令也是必要的。 总结一下，我们得到了这个类（另存为 irc.py）：

```py
import socket
import sys

class IRC:

    irc = socket.socket()

    def __init__(self):  
        self.irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    def send(self, chan, msg):
        self.irc.send("PRIVMSG " + chan + " " + msg + "n")

    def connect(self, server, channel, botnick):
        #defines the socket
        print "connecting to:"+server
        self.irc.connect((server, 6667))                                                         #connects to the server
        self.irc.send("USER " + botnick + " " + botnick +" " + botnick + " :This is a fun bot!n") #user authentication
        self.irc.send("NICK " + botnick + "n")               
        self.irc.send("JOIN " + channel + "n")        #join the chan

    def get_text(self):
        text=self.irc.recv(2040)  #receive the text

        if text.find('PING') != -1:                      
            self.irc.send('PONG ' + text.split() [1] + 'rn') 

        return text

```

现在我们有了网络连接类，我们可以将其用作实例。 为了说明的目的，我们将使我们的（机器人）机器人保持简单。 如果漫游器在其驻留的通道中收到消息“ hello”，则它将回复“ Hello！”。

```py
from irc import *
import os
import random

channel = "#testit"
server = "irc.freenode.net"
nickname = "reddity"

irc = IRC()
irc.connect(server, channel, nickname)

while 1:
    text = irc.get_text()
    print text

    if "PRIVMSG" in text and channel in text and "hello" in text:
        irc.send(channel, "Hello!")

```

将其另存为 bot.py 并使用 _python bot.py_ 运行。 与传统的 irc 客户端（mirc，hexchat，irsii）连接到该频道，并观察实验是否成功！ 现在，您可以使用可以想象的任何出色功能对其进行扩展。