IRC BOT(python)

时间:2011-04-09 00:47:58

标签: python sockets irc

sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sck.connect((irc, port))
sck.send('PRIVMSG ' + 'NICKSERV' + 'ghost' + 'supaBOT' + 'htown')
sck.send('NICK supaBOT\r\n')
sck.send('PRIVMSG ' + 'NICKSERV' + 'IDENTIFY' + 'password')
sck.send('USER supaBOT supaBOT supaBOT :supaBOT Script\r\n')
sck.send('JOIN ' + " " + chan + '\r\n')

当我尝试运行脚本时出现此错误:

trix.gonullyourself.org 451 PRIVMSG  You have not registered
trix.gonullyourself.org 451 PRIVMSG  You have not registered
trix.gonullyourself.org 451 JOIN  You have not registered
: You

nick supaBOT已在服务器上注册,但我不知道如何识别服务器,因为上面的代码无效。

2 个答案:

答案 0 :(得分:4)

像迈克说的那样,你没有发送你应该发送的数据。你需要在那里添加空格,如果它们有空格,你需要在最终命令参数之前:。有些行也缺少'\r\n'

PRIVMSG的格式为:'PRIVMSG nick :message with spaces\r\n'

PRIVMSG只有两个参数,所以你需要把:放在那里以表明该行的其余部分只是一个可能包含空格的值。

您获得"You have not registered"的原因是您必须在任何其他命令之前发送USERNICK命令。如果NICK命令失败(缺口冲突),则必须检测错误并尝试另一个错误。发送有效的USERNICK命令后,某些IRC网络也会向您发送PING,在服务器认为您之前,您必须使用PONG进行回复注册”。之后,您可以使用其他命令。

答案 1 :(得分:0)

检查字符串,'PRIVMSG ' + 'NICKSERV' + 'IDENTIFY' + 'password'打印PRIVMSG NICKSERVIDENTIFYpassword,这显然不是您要发送的内容

Ftr,最好使用字符串替换或.format()因为调用它们,这会增加额外的开销,因为每个字母强制python循环遍历字符串,然后再添加字母。即:'PRIVMSG NICKSERV IDENTIFY %s' %(password)'PRIVMSG NICKSERV IDENTIFY {0}'.format(password)

如果您想使用它(并且supybot存在/存在并且是纯python irc bot),也存在已经存在的irclib。