Python IRC bot不会加入

4 python irc

我收到错误消息

:irc.evilzone.org通知AUTH:*查找您的主机名...

:irc.evilzone.org注意事项:* 找到您的主机名(缓存)

PING:7091A8FB

:irc.evilzone.org 451加入:你还没有注册

:irc.evilzone.org 451 PRIVMSG:您尚未注册

server = "irc.evilzone.org" # Server 
port = 6667 #port connect through IRC standard is :(6667 or 9999)
irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc.connect ( ( server, port ) )
print irc.recv ( 4096 )
nick = 'Piebot' #bots name
chan = 'test' #channel
version= "1.0" #current version
irc.send ( 'NICK Pizebot\r\n' ) 
irc.send ( 'USER Pizebot Pibot Pibot :Python IRC\r\n' )
irc.send ( 'JOIN #test\r\n' ) # YOU MUST CHANGE THE CHANNEL HERE AND BELOW!!
irc.send ( 'PRIVMSG #test :Hello World.\r\n' )

while True:
    readbuffer= irc.recv(4096)

    temp=string.split(readbuffer, "\n")
    Check = readbuffer.split(':')
    print readbuffer
Run Code Online (Sandbox Code Playgroud)

请记住,我使用的一些命令需要代码的temp = string.split(readbuffer,"\n")部分.但是这样的代码是这样的

network = 'irc.evilzone.org'
port = 6667
irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc.connect ( ( network, port ) )
print irc.recv ( 4096 )
irc.send ( 'NICK ipbot\r\n' )
irc.send ( 'USER ipbot completely real :Jxxx\r\n' )
irc.send ( 'JOIN #test\r\n' )
irc.send ( 'PRIVMSG #test:Oh Hai.\r\n' )
while True:
   data = irc.recv ( 4096 )
Run Code Online (Sandbox Code Playgroud)

我可以成功连接到频道等任何想法?

pok*_*oke 7

我看到两个可能的原因:

  • 您正在尽早发送命令.通常,您需要等待一段时间才能完全建立连接,并且服务器接受您的命令(尤其是JOIN).因此,您需要先等待服务器响应(在发送NICK命令后,您会在某个时刻返回MODE命令;之后,您可以调用正常命令,包括JOIN).
  • 另一种可能性,可能不是真正的解决方案,但如果你想留在IRC服务器上仍然很重要的是PING.服务器随机发送PING命令.您通常需要使用PONG命令进行响应(参数与收到的PING相同).否则服务器可能会踢你.


小智 6

我注意到你没有处理PING请求,有些服务器在你回复PING请求之前不接受任何其他命令(因此没有注册).你想要连接,然后NICK,检查PING,然后是USER,如果在USER之前没有,则再次检查PING.

有些服务器喜欢在NICK之后发送,其他服务器则在USER之后.

PING :7091A8FB\r\n
Run Code Online (Sandbox Code Playgroud)

要回复此PING,只需发送:

PONG :7091A8FB\r\n
Run Code Online (Sandbox Code Playgroud)

:和之间'\r\n将是一个随机字符串,您需要使用您的PONG发回,如上所示.