Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python IRC机器人赢得';不加入_Python_Irc - Fatal编程技术网

Python IRC机器人赢得';不加入

Python IRC机器人赢得';不加入,python,irc,Python,Irc,我收到了错误信息 :irc.evilzone.org注意认证:*正在查找您的主机名 :irc.evilzone.org通知授权:* 找到您的主机名(缓存) 平:7091A8FB :irc.evilzone.org 451加入:你有 未注册 :irc.evilzone.org 451 PRIVMSG:You 没有注册 请记住,我使用的一些命令需要代码中的temp=string.split(readbuffer,“\n”)部分 network = 'irc.evilzone.org' port =

我收到了错误信息

:irc.evilzone.org注意认证:*正在查找您的主机名

:irc.evilzone.org通知授权:* 找到您的主机名(缓存)

平:7091A8FB

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

:irc.evilzone.org 451 PRIVMSG:You 没有注册

请记住,我使用的一些命令需要代码中的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 )

我可以成功连接到频道等。有什么想法吗?

我认为有两个可能的原因:

  • 您正在将命令提前发送到。通常,在连接完全建立并且服务器接受您的命令(尤其是JOIN)之前,您需要等待相当长的时间。因此,您需要先等待服务器响应(在发送NICK命令后,您将在某个点返回MODE命令;之后,您可以调用普通命令,包括JOIN)
  • 另一种可能性是PING,它可能不是真正的解决方案,但如果您想留在IRC服务器上,它仍然很重要。服务器随机发送PING命令。通常要求您使用PONG命令进行响应(参数与接收到的PING相同)。否则服务器可能会踢你
发送“用户…”和“加入…”之间的时间需要增加。我在Bash中执行相同的代码时遇到了这个问题。我是这样做的:

#!/bin/bash
(
echo NICK bashscript
echo USER bashscript 8 \* : Centreon Notifier
sleep 2
# echo 'JOIN #netops'
echo 'PRIVMSG #netops' $1
echo QUIT
) | nc 127.0.0.1 6667

我注意到您不处理PING请求,一些服务器在您回复PING请求(因此未注册)之前不接受任何其他命令。 你们会想连接,然后尼克,检查PING,然后用户,再次检查PING,若在用户之前并没有

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

PING :7091A8FB\r\n
要响应此PING,只需发送:

PONG :7091A8FB\r\n

之间\r\n
将是一个随机字符串,您需要将其与您的PONG一起发送回,如上所示。

这可能是您的客户端的问题。你可以再检查一下 通过使用telnet连接到服务器并发出类似以下命令 这:

请在用户命令后面尝试PONG:2153560274

平:7091A8FB

这是阻止您在IRC服务器上注册的问题

虽然从技术上讲,您应该能够使用尼克/用户组合在IRC上注册,但您在登录时收到的PING是目前大多数IRC服务器使用的一种非常简单的DoS保护机制

您需要按如下方式回复ping:

PONG :7091A8FB
每次收到PING时,字符串都应该更改。 稍后您还将收到PING请求,以确保连接仍处于活动状态,因此编写代码进行回复将确保服务器不会自动退出您(PING超时)


最后,在发送JOIN/PRIVMSG/其他命令之前,您应该等待登录(您会知道,因为您将收到原始数字001)。

应该在Stackoverflow…嗯,频道或服务器是否完全不希望尼克事先注册?@TheLQ:如果你花一秒钟看一下代码,你会发现没有框架。。。
NICK aaron
USER aaron ignored ignored :Aaron
PONG <number>
 sec@irc:~/simple-irc-bot$ telnet 192.168.1.100 6667
 Trying 192.168.1.100...
 Connected to 192.168.1.100.
 Escape character is '^]'.
 NOTICE AUTH :*** Looking up your hostname
 NOTICE AUTH :*** Checking Ident
 NOTICE AUTH :*** Couldn't look up your hostname
 NICK TENOTICE AUTH :*** No ident response
 NICK testtest002
 PING :2153560274
 :loal.irc-server.com 461 TNICK USER :Not enough parameters
 USER test test 0 :sec
 PONG :2153560274
 :loal.irc-server.com 001 TNICK :Welcome IRC Network,
 :loal.irc-server.com 002 TNICK :Your host is loal.irc-server.com, running version u2.10.12.14
PONG :7091A8FB