IRC机器人无法加入频道
import socket
irc = 'irc.hack3r.com'
port = 6667
channel = '#chat'
sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sck.connect((irc, port))
sck.send('NICK supaBOT\r\n')
sck.send('USER supaBOT supaBOT supaBOT :supaBOT Script\r\n')
sck.send('JOIN #chat' + '\r\n')
data = ''
while True:
data = sck.recv(4096)
if data.find('PING') != -1:
sck.send('PONG ' + data.split() [1] + '\r\n')
print data
print sck.recv(4096)
当我连接到服务器时,我无法加入一个频道,出现了这个错误:
"451 JOIN :你还没有注册"
4 个回答
0
你想加入的这个频道要求你在那个服务器上先注册一个昵称。你可以试着用普通的IRC客户端登录那个服务器,自己创建一个频道,然后让机器人加入你创建的频道。
11
迈克·格雷厄姆说错了。问题在于你发送JOIN命令的时间太早了。服务器需要一些时间来处理你的NICK和USER命令,所以才会出现“昵称未注册”的错误。你可以看看这个回复:Python IRC bot won't join。
我也想鼓励你继续学习和探索IRC协议,试着用简单的套接字来制作机器人。谁在乎你的代码是否完全符合RFC 1459呢?几乎没有哪个服务器、客户端或机器人能做到100%符合标准。但只要它能工作,那就没问题!
而且和达恩斯所说的不同,使用简单的套接字做IRC机器人其实并不难,你只需要稍微读一下RFC,然后多多尝试就可以了!
2
听起来你还没有注册,而这是加入那个频道的必要条件。你需要先注册你的昵称,然后再进行身份验证才能加入。
另外,直接用原始的套接字来做一个IRC机器人并不是个好主意。这段代码没有很好地实现RFC 1459标准,而且把程序的逻辑和网络部分搞混了。建议你使用一个网络库(比如Twisted。twisted.words
对IRC协议有很好的实现)或者写出相当于它的代码。(提示:前者更简单、更快,而且出错的可能性更小。)