# Un robot irc écrit en python

**URL:** <https://www.debian-fr.org/t/un-robot-irc-ecrit-en-python/53026>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 11:45 UTC](https://www.debian-fr.org/t/un-robot-irc-ecrit-en-python/53026 "2016-02-21T11:45:51Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![drigollier](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/a6a055/32.png) [@drigollier](https://www.debian-fr.org/u/drigollier)\
**Post date:** [Février 21, 2016, 11:45 UTC](https://www.debian-fr.org/t/un-robot-irc-ecrit-en-python/53026/1 "2016-02-21T11:45:51Z")

</div>

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](http://www.osix.net/modules/article/?id=780)

Mon programme :

[code]# -_- coding: utf8 -_-

import sys  
import socket  
import string

HOST=‘[chat.freenode.net](http://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]

---

<div class="post-metadata">

**Author:** ![drigollier](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/a6a055/32.png) [@drigollier](https://www.debian-fr.org/u/drigollier)\
**Post date:** [Février 21, 2016, 11:45 UTC](https://www.debian-fr.org/t/un-robot-irc-ecrit-en-python/53026/2 "2016-02-21T11:45:51Z")

</div>

J’ai trouvé la solution. ![:041](https://www.debian-fr.org/uploads/default/original/1X/bfe857c9119752799c3eac55ca37a50312c51282.gif "applaudit")

[sur le site du zéro](http://www.siteduzero.com/tutoriel-3-102516-programmer-un-bot-irc-simplement-avec-ircbot.html).

---

<div class="post-metadata">

**Author:** ![lol](https://www.debian-fr.org/user_avatar/www.debian-fr.org/lol/32/15629_2.png) [@lol](https://www.debian-fr.org/u/lol)\
**Post date:** [Février 21, 2016, 11:45 UTC](https://www.debian-fr.org/t/un-robot-irc-ecrit-en-python/53026/3 "2016-02-21T11:45:54Z")

</div>

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 \*\*\*\*\*](https://www.debian-fr.org/a-lire-avant-de-poster-t4657.html)

---

<div class="post-metadata">

**Author:** ![drigollier](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/a6a055/32.png) [@drigollier](https://www.debian-fr.org/u/drigollier)\
**Post date:** [Février 21, 2016, 11:47 UTC](https://www.debian-fr.org/t/un-robot-irc-ecrit-en-python/53026/4 "2016-02-21T11:47:06Z")

</div>

[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 \*\*\*\*\*](https://www.debian-fr.org/a-lire-avant-de-poster-t4657.html)[/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](http://www.jeuxvideo.com/forums/1-50-27005311-1-0-1-0-la-plus-grande-liste-d-insulte.htm)). 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.

```auto

```

[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](http://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]

---

<div class="post-metadata">

**Author:** ![lol](https://www.debian-fr.org/user_avatar/www.debian-fr.org/lol/32/15629_2.png) [@lol](https://www.debian-fr.org/u/lol)\
**Post date:** [Février 21, 2016, 11:47 UTC](https://www.debian-fr.org/t/un-robot-irc-ecrit-en-python/53026/5 "2016-02-21T11:47:09Z")

</div>

Super, merci! ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")
