bot IRC ne peut pas rejoindre le canal
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"
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()