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"

È stato utile?

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()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top