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