什么是IRC?
如果您不熟悉Internet中继聊天 (IRC),它是一种应用层协议,用于促进与全球用户的聊天,自20世纪80年代末以来一直存在,至今仍被广泛使用。有几个不同的IRC网络,所以你选择使用哪一个取决于你自己的个人喜好。
为什么要创建IRC Bot?
简单地说,一般而言, IRC机器人创建起来既简单又有趣。它们允许您扩展频道的功能,甚至为您的频道创建有趣的互动游戏。基本上,就机器人功能的可能性而言,天空是极限,当与Python的易用性混合时,您可以在很少的代码行中创建一个复杂的机器人。
如何连接到IRC服务器?
连接到IRC服务器的过程是直接的 *。
- 连接到XXXX服务器在端口XXXX (通常为6667)
- 发送用户命令
- 发送NICK命令
- 响应任何PING命令
*-请务必注意,某些IRC服务器在连接方式或接收到的消息格式方面有所不同,请务必查找通常连接到的主机的参考信息。
在连接到IRC服务器之前,我们将设置server,botnick的变量,连接时要加入的通道以及sentUser和sentNick的布尔标志。sentUser和sentNick布尔标志用于确定这些命令之前是否在连接期间发送到服务器。
服务器 = “ix.undernet.org”
频道 = “# 美国”
botnick = “uberbot” str(random.randint(1,10000))
sentUser = False
sentNick = False
连接到XXXX服务器在端口XXXX
要连接到服务器,创建一个简单的套接字,然后通过调用connect方法进行连接。
irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
打印 “\ n正在连接到:” 服务器
irc.connect((服务器,6667))
发送用户命令
接下来,注册 (和东西验证) 一个简短的用户名和人类可读的实名用户会话。命令格式看起来像这样。
USER (用户名) (主机名) (未使用) (realname)
if sentUser = = False:
irc.send(“用户” botnick “: 这是一个有趣的机器人 \ n”)
sentUser = True
继续
发送尼克命令
在USER命令之后,发送NICK命令以指定您的聊天昵称。命令格式看起来像这样。
尼克 (昵称)
if sentUser and sentNick = = False:
irc.send (“尼克” botnick “\ n”)
sentNick = True
继续
响应任何PING命令
IRC服务器定期向已连接的客户端发送PING命令,以确定它们是否仍处于连接状态。要显示您已连接,必须使用PONG和提供的PING令牌来回答每个PING。PING命令使用以下格式。
PING (令牌)
if text.find(“PING”) != -1:
irc.send(“PONG” text.split()[1] “\ n”)
我的机器人如何接受命令?
要让你的机器人接受命令,你需要解析来自缓冲区的输入,然后做出相应的响应。由于IRC是基于文本的消息来自服务器都很容易解析使用正则表达式,甚至一个简单的文本查找。下面的代码片段从包含 “!host” 的频道或私人消息中搜索消息文本。如果找到,则机器人用OS版本信息进行响应。
如果text.find (“:!host”)!= -1:
irc.send(“PRIVMSG” channel ” :” str(platform.platform()) “\ n”)
我能要密码吗?
下面的源代码是本文使用的代码的完整列表。
导入平台
随机导入
导入套接字
导入系统
重新加载 (sys)
sys.setdefaultencoding(‘utf8’)
服务器 = “ix.undernet.org”
频道 = “# 美国”
botnick = “uberbot” str(random.randint(1,10000))
sentUser = False
sentNick = False
irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
打印 “\ n正在连接到:” 服务器
irc.connect((服务器,6667))
尝试:
而1:
text = irc.recv(2048)
如果len(text) > 0:
打印文本其他
:
继续
if text.find(“PING”) != -1:
irc.send(“PONG” text.split()[1] “\ n”)
if sentUser = = False:
irc.send(“用户” botnick “: 这是一个有趣的机器人 \ n”)
sentUser = True
继续
if sentUser and sentNick = = False:
irc.send(“NICK” botnick “\ n”)
sentNick = True
继续
如果text.find (“255” botnick) != -1:
irc.send(“JOIN” 频道 “\ n”)
if text.find(“:!host”) != -1:
irc.send(“PRIVMSG” channel ” :” str(platform.platform()) “\ n”)
除键盘中断以外的
:
irc.send (“退出: 我现在得走了!\ n”)
打印 “\ n”
sys.exit()
我在哪里可以学到更多?
下面的链接是学习IRC,IRC机器人和IRC协议的很好的参考。