Débutez dans IRC/Créer un robot

Un livre de Wikilivres.

Vous rencontrez sur les canaux de discussion plusieurs robots. Les plus connus sur le réseau Freenode sont ChanServ et NickServ. Une fois que vous serez un peu plus familiarisé avec l'environnement IRC, peut-être aurez-vous envie de vous lancer dans le développement d'un robot (bot) capable de gérer votre salon !

Cette partie demande quelques notions en programmation Python. Avant de commencer, téléchargez et installez Python ainsi que les modules de Joel Rosdahl irclib et ircbot à cette adresse : http://sourceforge.net/projects/python-irclib/files/. Décompressez le fichier et lancez setup.py.

Le programme doit commencer par l'import des modules irclib et ircbot. La programmation sera événementielle, c'est-à-dire qu'elle repose sur des événements : quand il se passe une action, on fait cela (quand un message est posté, alors on répond bonjour, par exemple). Vous devrez donc définir une méthode qui sera appelée par le programme quand l'événement se produira. Faites commencer vos programmes par class LeRobot(ircbot.SingleServerIRCBot):. Vous aurez donc un code de ce type :

import irclib
import ircbot

class LeRobot(ircbot.SingleServerIRCBot):
   def on_pubmsg(self, serv, ev):
      #action lors de la publication d'un message
   def on_kick(self, serv, ev):
      #action lors d'un kick

Attention, pour que l'import fonctionne, veillez à enregistrer votre programme dans le même répertoire que irclib.py et ircbot.py

Différentes méthodes
Nom Description
on_kick Lors du kick d'un utilisateur
on_nicknameinuse
on_welcome Lors de la connexion à IRC
on_privmsg Lors de la réception d'un message privé
on_dccmsg
on_join Lors de l'arrivée sur un salon
on_dccchat
on_action Quand un utilisateur utilise /me
on_pubmsg Lors de la réception d'un message sur le channel

Quelques commandes[modifier | modifier le wikicode]

Lors de la définition d'une méthode, celle-ci peut prendre plusieurs paramètres, comme serv ou ev.

serv[modifier | modifier le wikicode]

serv est une instance, elle permet au robot de dialoguer avec le serveur, à la façon d'un client IRC classique comme Pidgin.

Méthodes utilisables avec serv

join("#channel") : le robot rejoint un salon de discussion. Si celui-ci est protégé par un mot de passe, mettez celui-ci à la suite (join("#channel motdepasse")).

privmsg("destinataire", "message") envoie un message sur un salon ou à une personne.

nick("pseudonyme") permet de changer le pseudonyme du robot.

get_nickname() renvoie le pseudonyme effectif du robot.

action("destinataire", "message") envoie /me. Attention, privmsg("#channel", "/me mange") ne fonctionne pas avec tous les clients. Certains verront (13:30:03) ***BotIRC mange, d'autres verront (13:30:03) BotIRC: /me mange, c'est pourquoi l'utilisation de action s'avère indispensable.

invite("invité", "#channel") envoie un message d'invitation à l'utilisateur invité.

part("#channel", "message") quitte le canal spécifié avec un message.

die() déconnecte le robot.

Si le robot est opérateur, il peut utiliser :

kick("#channel", "kické", "message") expulse un utilisateur du salon.

mode("#channel", "mode") change le mode du channel, par exemple mode("#wikibooks-fr", "+i"). Le cumul des modes est autorisé : mode("#wikibooks-fr", "+i-m").

Exemples de code[modifier | modifier le wikicode]

Robot de bar[modifier | modifier le wikicode]

Ce très simple robot vous donne ce que vous lui demandez.

import irclib
import ircbot
 
class Bot(ircbot.SingleServerIRCBot):
    def __init__(self):
        ircbot.SingleServerIRCBot.__init__(self, [("irc.freenode.com", 6667)],
                                           "BotIRC", "Je suis un bot de bar.")
    def on_welcome(self, serv, ev):
        serv.join("#test-irc")
    def on_pubmsg(self, serv, ev):
        message = ev.arguments()[0]
        if "!botirc" in message or "!botIRC" in message:
            serv.privmsg("#test-irc", "et "+message[8:100] + " !") #fonction répéteur
 
if __name__ == "__main__":
    Bot().start()
Utilisation
:(13:11:20) Savant-fou: !botIRC une bière pour Savant-fou<br>
:(13:11:20) BotIRC: et une bière pour Savant-fou !

Robot videur[modifier | modifier le wikicode]

Ce robot, s'il est opérateur, expulse du salon l'utilisateur demandé.

#!/usr/bin/env python
# -*- coding: utf8 -*-
 
import irclib
import ircbot
 
class Bot(ircbot.SingleServerIRCBot):
    def __init__(self):
        ircbot.SingleServerIRCBot.__init__(self, [("irc.freenode.com", 6667)],
                                           "BotIRC", "Je suis un bot videur.")
    def on_welcome(self, serv, ev):
        serv.join("#test-irc")
    def on_pubmsg(self, serv, ev):
        canal = ev.target()
        message = ev.arguments()[0]
        if message[8:12] == "kick":
            if message[13:100] == "BotIRC":
                serv.privmsg(canal, "Non mais ça va pas la tête ?!")
            else:                        
                serv.kick(canal, message[13:100], "Prends garde, BotIRC est là")
 
if __name__ == "__main__":
    Bot().start()
Exemple d'utilisation
:(13:49:14) Savant-fou: !BotIRC kick IRCWikibooksfr
:(13:49:14) #test-irc: IRCWikibooksfr été expulsé par BotIRC (Prends garde, BotIRC est là)

Un robot inexpulsable[modifier | modifier le wikicode]

#!/usr/bin/env python
# -*- coding: utf8 -*-
 
import irclib
import ircbot
 
class Bot(ircbot.SingleServerIRCBot):
    def __init__(self):
        ircbot.SingleServerIRCBot.__init__(self, [("irc.freenode.com", 6667)],
                                           "BotIRC", "Je suis un bot invincible.")
    def on_welcome(self, serv, ev):
        serv.join("#test-irc")
    def on_kick(self, serv, ev):
        serv.join("#test-irc")

Ce robot est inexpulsable. En effet, si il est kické, on_kick() le ramène immédiatement.

Utilisation
:(21:02:07) BotIRC a quitté le salon (Expulsé par Savant-fou (Je t'aurai sale bot !))
:(21:02:07) BotIRC a rejoint le salon