Débutez dans IRC/Créer un robot
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
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
modifierLors de la définition d'une méthode, celle-ci peut prendre plusieurs paramètres, comme serv
ou ev
.
serv
modifier
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
modifierRobot de bar
modifierCe 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
modifierCe 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#!/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