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)
当我连接到服务器时,我无法加入频道,我收到此错误:
“451加入:您尚未注册”
答案 0 :(得分:11)
我还想鼓励你继续学习并通过裸机插座制作机器人来发现IRC协议。谁在乎您的代码并不完全符合RFC 1459.几乎没有任何服务器,客户端或机器人符合标准100%。但如果它有效,它就有效!
与Daenyth sais不同,使用裸插槽IRC机器人获得一些好结果并不难。只需仔细阅读RFC并进行实验!
答案 1 :(得分:2)
听起来您没有注册,这是加入该频道的要求。您必须注册您的昵称,然后在加入之前进行识别。
此外,尝试使用裸插座制作一个irc机器人并不是一个好主意。此代码不会将RFC 1459实现到有用的级别,它会将程序的逻辑与您的网络混为一谈。考虑使用网络库(如Twisted。twisted.words
有一个很好的IRC协议实现)或编写相当于一个的代码。 (提示,前者更容易,更快,更容易出错。)
答案 2 :(得分:0)
您尝试加入的特定频道要求您注册该服务器的nickserv。尝试使用常规IRC客户端在服务器上自行创建一个频道,并告诉机器人加入该频道。
答案 3 :(得分:0)
sudo yum install python-twisted-words
或
sudo apt-get install python-twisted-words
http://twistedmatrix.com/documents/8.2.0/api/twisted.words.protocols.irc.IRCClient.html
#!/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()