Un robot irc écrit en python

Bonsoir.

Voilà cela fait bientôt 2 semaines que j’essaye de programmer un robot irc sous python …

Seulement une fois que mon robot est connécté au server, mon terminale reste vide. Sur le chat irc rien ne m’indique qu’un nouvelle utilisateur est connécté.

Le tutoriel qui m’as aidé : Ici

Mon programme :

[code]# -- coding: utf8 --

import sys
import socket
import string

HOST=‘chat.freenode.net
PORT=6667
#La connection irc ce fait sur le protocole 6667
NICK=‘
#C’est le nom du robot
IDENT='BotModeration’
REALNAME='

OWNER=‘drigollier’
#Le robot appartiend à @drigollier
CHANNELINIT=’#******’
#Le canale par défault #******
readbuffer=’’
#On vas afficher tous les messages du server

s=socket.socket( )
#Création des sockets
s.connect((HOST, PORT))
#Connection au server
s.send('NICK '+NICK+‘n’)
#envoie le pseudonyme du robot au server
s.send(‘USER ‘+IDENT+’ ‘+HOST+’ bla :’+REALNAME+‘n’) #Identify to server

while 1:

line=s.recv(500)

#reçoi les messages du server
print line
#affiche les messages du server
if line.find(‘Welcome to the UnderNet IRC Network’)!=-1:
#C’est la merde(Je ne peux pas être sur qu’il travail)
s.send('JOIN '+CHANNELINIT+‘n’)
#Join un channel
if line.find(‘PRIVMSG’)!=-1:
#Apelle une fonction d’analyse syntaxique
parsemsg(line)
line=line.rstrip()
#retire l’option 'rs’
line=line.split()
if(line[0]==‘PING’):
#si le server ping d’autres points de connexion
s.send('PONG '+line[1]+‘n’)

def parsemsg(msg):
complete=msg[1:].split(’:’,1)
#Analyse le message en données utiles
info=complete[0].split(’ ‘)
msgpart=complete[1]
sender=info[0].split(’!’)
if msgpart[0]==’' and sender[0]==OWNER: #Traite tous les messages qui commences par '
cmd=msgpart[1:].split(’ ')
if cmd[0]==‘op’:
s.send('MODE ‘+info[2]+’ +o '+cmd[1]+‘n’)
if cmd[0]==‘deop’:
s.send('MODE ‘+info[2]+’ -o '+cmd[1]+‘n’)
if cmd[0]==‘voice’:
s.send('MODE ‘+info[2]+’ +v '+cmd[1]+‘n’)
if cmd[0]==‘devoice’:
s.send(‘MODE ‘+info[2]+’ -v ‘+cmd[1]+‘n’)
if cmd[0]==‘sys’:
syscmd(msgpart[1:],info[2])
if msgpart[0]==’-’ and sender[0]==OWNER :
#msg ne traite que les commandes envoyé au server
cmd=msgpart[1:]
s.send(cmd+‘n’)
print ‘cmd=’+cmd

def syscmd(commandline,channel):
cmd=commandline.replace(‘sys ‘,’’)
cmd=cmd.rstrip()
os.system(cmd+’ >temp.txt’)
a=open(‘temp.txt’)
ot=a.read()
ot.replace(‘n’,’|’)
a.close()
s.send(‘PRIVMSG ‘+channel+’ :’+ot+‘n’)
return 0[/code]

Le message de connéxion:

[code]:niven.freenode.net NOTICE * :*** Looking up your hostname…

:niven.freenode.net NOTICE * :*** Checking Ident

:niven.freenode.net NOTICE * :*** Found your hostname[/code]

J’ai trouvé la solution. :041

sur le site du zéro.

Salut,
Merci du retour, encore qu’une explication plutôt qu’un lien c’est encore mieux!

Pas de [Résolu] dans le titre stp, la coche verte suffit:
***** À LIRE AVANT DE POSTER *****

[quote=“lol”]Salut,
Merci du retour, encore qu’une explication plutôt qu’un lien c’est encore mieux!

Pas de [Résolu] dans le titre stp, la coche verte suffit:
***** À LIRE AVANT DE POSTER *****[/quote]

Merci. La prochaine fois j’active la coche verte c’est promi.

Pour la petite explication qui complète le tutoriel il suffit de copier l’éxemple du robot minimaliste, en ajoutant quelques donnés supplémentaires afin d’avoir le moins d’insultes possible sur le chat (La plus grande liste d’insulte). Une fois que le programme est écrit et sauvegardé il suffit de lancer le programme diréctement sur un terminale et non sur un client irc comme xchat. Le fichier est bien entendu écrit et éxécuté dans le répertoire /usr/lib/python2.6/dist-packages/****.py.

[code]
#!/usr/bin/env python2

-- coding: utf8 --

import irclib
import ircbot

class BotModeration(ircbot.SingleServerIRCBot):
def init(self):
""“
Constructeur qui pourrait prendre des paramètres dans un “vrai” programme.
”""
ircbot.SingleServerIRCBot.init(self, [(“irc.freenode.net”, 6667)],
“Nomdurobot”, “Bot de modération réalisé en Python avec ircbot”)
self.insultes = [“c**”, “p***”, “co****”, “co****”, “co*****”, “p*”, “e****”]

def on_welcome(self, serv, ev):
    """
    Méthode appelée une fois connecté et identifié.
    Notez qu'on ne peut rejoindre les canaux auparavant.
    """
    serv.join("#******")

def on_pubmsg(self, serv, ev):
    """
    Méthode appelée à la réception d'un message, qui exclut son expéditeur s'il
    écrit une insulte.
    """
    # Il n'est pas indispensable de passer par des variables
    # Ici elles permettent de clarifier le tout.
    auteur = irclib.nm_to_n(ev.source())
    canal = ev.target()
    message = ev.arguments()[0].lower() # Les insultes sont écrites en minuscules.

    for insulte in self.insultes:
        if insulte in message:
            serv.privmsg(canal, "3...")
            serv.execute_delayed(1, serv.privmsg, (canal, "2..."))
            serv.execute_delayed(2, serv.privmsg, (canal, "1..."))
            serv.execute_delayed(3, serv.kick, (canal, auteur, "0 !"))
            break

if name == “main”:
BotModeration().start()[/code]

Super, merci! :023