Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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机器人可以';t加入频道_Python_Irc - Fatal编程技术网

Python IRC机器人可以';t加入频道

Python IRC机器人可以';t加入频道,python,irc,Python,Irc,当我连接到服务器时,我无法加入通道,出现以下错误: “451加入:您尚未注册” 听起来你好像没有注册,这是加入该频道的必要条件。你必须注册你的尼克,然后在加入之前确认身份 此外,尝试使用裸套接字制作irc bot也不是一个好主意。这段代码没有将RFC1459实现到一个有用的级别,它将您的程序逻辑与您的网络融合在一起。考虑使用一个网络库(比如.扭曲。Word < /Cord>有一个很好的IRC协议的实现)或者编写一个等同于一个的代码。(提示,前者更容易、更快,也不容易出现bug。)您尝试加入的特定

当我连接到服务器时,我无法加入通道,出现以下错误:

“451加入:您尚未注册”


听起来你好像没有注册,这是加入该频道的必要条件。你必须注册你的尼克,然后在加入之前确认身份


此外,尝试使用裸套接字制作irc bot也不是一个好主意。这段代码没有将RFC1459实现到一个有用的级别,它将您的程序逻辑与您的网络融合在一起。考虑使用一个网络库(比如.<代码>扭曲。Word < /Cord>有一个很好的IRC协议的实现)或者编写一个等同于一个的代码。(提示,前者更容易、更快,也不容易出现bug。)

您尝试加入的特定频道要求您向该服务器的nickserv注册。尝试使用常规IRC客户端在服务器上运行并自己创建一个频道,然后告诉机器人加入该频道。

迈克·格雷厄姆错了。问题是您太早发送JOIN命令。服务器注册NICK和用户命令需要一段时间,因此出现错误“NICK not registered”。 请参阅此答复:

我还想鼓励您继续学习和发现IRC协议,制作带有裸套接字的机器人。谁在乎你的代码不完全符合RFC1459。几乎没有任何服务器、客户端或bot 100%符合该标准。但是,如果它起作用,它就起作用了

与Daenyth所说的不同,使用裸套接字IRC bot获得一些好的结果并不难。只需通读一下RFC并进行实验

Python twisted irc客户端 装置 sudo yum安装python twisted words

sudo-apt-get-install-python-twisted-words

API文档

例子
我读了RFC,我明白了,因为客户不是registered@sourD当前位置迈克是对的。我做过带插座的irc机器人,非常痛苦。我这样做是作为一种学习经验,但即便如此,它也不是很有价值。坚持使用库
“PING”在数据中通常优于
数据。查找('PING')!=-1
+1我同意动手学习的方法。结果你会有更深的理解。还请记住,自编写RFC以来,出于安全原因修改了很多服务器命令。通常需要等待
422
(错误MOTD缺失)或
376
(MOTD结束),然后发送加入。
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)
#!/usr/bin/env python2.7

from twisted.internet import reactor, protocol
from twisted.words.protocols import irc

class IRCLogger(irc.IRCClient):
    logfile = file('/tmp/freenode.txt', 'a+')

    nick = 'davey_jones_logger'

    def signedOn(self):
        self.join('#scala')

    def privmsg(self, user, channel, message):
        print "Got msg %s " % message
        self.logfile.write(" %s said %s \n" % ( user.split('!')[0], message ))
        self.logfile.flush()

def main():
    f = protocol.ReconnectingClientFactory()
    f.protocol = IRCLogger
    reactor.connectTCP('irc.freenode.net', 6667, f)
    reactor.run()

if __name__ == '__main__':
    main()