IRC bot non può entrare in un canale
Domanda
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)
Quando si collega al server non riesco a entrare in un canale, ottengo questo errore:
"451 registrazione: Non è stato registrato"
Soluzione
Sembra che tu non sei registrato e che è un requisito per l'adesione quel canale. Si dovrà registrare il proprio nick e quindi identificare prima di entrare.
Inoltre, cercando di fare un bot IRC con prese nudi non è una buona idea. Questo codice non implementa RFC 1459 ad un livello utile e fonde la logica del vostro programma con la rete. Considerare l'utilizzo di una libreria di rete (come ritorto . twisted.words
ha una grande implementazione del protocollo IRC) o la scrittura di codice che è equivalente a uno. (Suggerimento, il primo è più facile e più veloce e meno bug prona.)
Altri suggerimenti
Mike Graham è sbagliato. Che cosa c'è che non va è che si invia il comando JOIN troppo presto. Ci vuole un po 'per il server per registrare i comandi nick l'utente, quindi l'errore "Nick non registrato". Vedere questa risposta: Python IRC bot non si unirà .
Vorrei anche incoraggiarvi a fare continuare ad imparare e scoprire il protocollo IRC, facendo bot con prese nude. Chi se ne frega il codice non è conforme interamente con RFC 1459. Quasi qualsiasi server, client o bot è conforme al 100% con lo standard. Ma se funziona, funziona!
E a differenza di quanto Daenyth sais, non è troppo difficile da ottenere alcuni grandi risultati con un nudo Bot Socket IRC. Basta leggere attraverso la RFC un po 'e sperimentare!
Il canale particolare si sta cercando di unirsi richiede di essere registrati presso la nickserv per quel server. Provate ad andare sul server con un client IRC regolare e la creazione di un canale di te stesso, e dire al bot di unire questo.
Python contorto client IRC
Installazione
sudo yum install python-twisted-parole
o
sudo apt-get install python-twisted-parole
documentazione API
http://twistedmatrix.com/ documenti / 8.2.0 / api / twisted.words.protocols.irc.IRCClient.html
Esempio
#!/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()