Question

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)

Lorsque je me connecte au serveur je ne peux pas adhérer à un canal, je reçois cette erreur:

  

"451 JOIN: Vous n'êtes pas inscrit"

Était-ce utile?

La solution

On dirait que vous n'êtes pas enregistré et qui est une exigence pour se joindre à ce canal. Vous devrez enregistrer votre pseudo puis identifier avant de se joindre.

En outre, en essayant de faire un bot irc avec les sockets nus ne sont pas une bonne idée. Ce code ne met pas en œuvre la RFC 1459 à un niveau utile et la logique de l'amalgame entre votre programme avec votre réseau. Envisagez d'utiliser une bibliothèque de réseau (comme Twisted . twisted.words a une grande mise en œuvre du protocole IRC) ou un code écrit est équivalent à un. (Conseil, l'ancien est plus facile et plus rapide et moins sujette bug.)

Autres conseils

Mike Graham est erroné. Quel est le problème est que vous envoyez trop tôt la commande JOIN. Il faut un certain temps pour le serveur pour enregistrer vos commandes NICK et USER, d'où l'erreur « Nick non enregistrée ». Voir cette réponse: Python bot IRC ne se joindra pas .

Je voudrais aussi vous encourager à faire continuer à apprendre et de découvrir le protocole IRC en faisant des bots avec prises nues. Qui se soucie de votre code ne se conforme pas entièrement à la RFC 1459. Pratiquement aucun serveur, client ou bot est conforme à 100% à la norme. Mais si ça marche, ça marche!

Et contrairement à ce que Daenyth sais, il est trop difficile d'obtenir d'excellents résultats avec un bot IRC socket nu. Il suffit de lire un peu et expérimenter par la RFC!

Le canal particulier que vous essayez de joindre vous oblige à être inscrit au nickserv pour ce serveur. Essayez d'aller sur le serveur avec un client régulier de l'IRC et la création d'un canal vous et dire au bot de se joindre à cela.

client irc tordu Python

Installation

sudo yum install python-torsadés mots

ou

sudo apt-get install mots-torsadés python

API Documentation

http://twistedmatrix.com/ documents / 8.2.0 / api / twisted.words.protocols.irc.IRCClient.html

Exemple

#!/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()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top