Programmer un bot IRC simplement avec ircbot

Formation

En Semi-présenciel Paris

Prix sur demande

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Description

  • Typologie

    Formation

  • Méthodologie

    En semi-présentiel

  • Lieu

    Paris

Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.

Les sites et dates disponibles

Lieu

Date de début

Paris ((75) Paris)
Voir plan
7 Cité Paradis, 75010

Date de début

Consulter

Questions / Réponses

Ajoutez votre question

Nos conseillers et autres utilisateurs pourront vous répondre

À qui souhaitez-vous addresser votre question?

Saisissez vos coordonnées pour recevoir une réponse

Nous ne publierons que votre nom et votre question

Les Avis

Le programme

Introduction du cours

Ce tutoriel présente l'utilisation du module ircbot de Joel Rosdahl pour Python. Comme son nom l'indique, celui-ci permet de programmer son propre bot IRC. Il utilise le module irclib du même auteur, qui est plus général et qui ne sera que partiellement présenté ici.

Ces deux modules ne sont pour le moment pas compatibles avec Python 3 ! Ce tutoriel requiert donc Python 2 pour être suivi.

Sont prérequises pour suivre ce tutoriel :

  • des bases en Python, notamment au niveau de la POO (déclaration d'une classe, héritage...) ;

  • et des connaissances sur ce qu'est IRC et les possibilités qu'il offre.

C'est bon ? Alors, suivez le guide. ;)

Se procurer les fichiers

Les deux modules que nous allons étudier, irclib et ircbot, ont été développés par un programmeur tiers et ne sont donc pas livrés directement avec Python ; vous allez donc devoir vous les procurer avant de commencer !

Le module ircbot utilise irclib. Vous ne pouvez donc pas utiliser ircbot sans avoir installé au préalable irclib.

Si vous êtes sous une distribution Linux gérant les installations par paquets, alors il existe peut-être un paquet python-irclib qui regroupe irclibetircbot. Par exemple, sous Ubuntu, taper sudo apt-get install python-irclib installera les modules. Sinon, vous pouvez télécharger la dernière version depuis la page du projet sur SourceForge.net.
Cependant, la version publique des modules gère les half operators de la même manière que les utilisateurs normaux ce qui peut produire quelques bugs (utilisateurs qui sont listés avec un % devant leur pseudonyme). Pour cette raison, je vous invite à utiliser une version modifiée par mes soins qui fait bien la distinction ici. Après cela, décompressez l'archive à l'aide de votre logiciel favori. La plupart des fichiers sont des programmes d'exemple, que je vous conseille de regarder plutôt après qu'avant d'avoir lu ce tutoriel. :p
Maintenant, deux choix s'offrent à vous :

  • lancer le script d'installation via setup.py comme indiqué dans le fichier README, de sorte que tous vos codes aient accès à ces deux modules ;

  • placer les deux fichiers irclib.py et ircbot.py dans le répertoire du programme pour chaque script utilisant ces modules.

La première solution est conseillée si vous utilisez vos bots pour vous-mêmes, puisqu'elle vous évitera de copier les fichiers à chaque fois que vous programmerez un nouveau bot. En revanche, si vous comptez distribuer vos programmes, il est fortement recommandé de livrer les fichiers des modules avec, puisque l'utilisateur n'aura pas nécessairement installé irclib et ircbot sur son ordinateur, d'autant plus si vous utilisez la version modifiée. Vous pouvez aussi installer les fichiers pour la période de développement et les distribuer une fois le bot terminé.

La programmation évènementielle et ircbot

Avant de commencer à coder, il va falloir faire un brin de théorie. Rien de bien compliqué, bien entendu. ;)

Si vous utilisez irclib ou ircbot, vous allez devoir faire ce que l'on appelle de la programmation évènementielle. Il s'agit d'une logique de programmation raisonnant sur des évènements : quand il se passe telle chose, alors on fait cela. Pour un exemple concret : quand quelqu'un rejoint le canal, alors je lui dis bonjour. Il s'avère que c'est particulièrement adapté à IRC, ce qui explique son utilisation ici.

Dans vos programmes, vous allez définir pour chaque évènement que vous souhaitez traiter une méthode qui sera appelée automatiquement par ircbot lorsque l'évènement en question se produira. Pour cela, vos bots devront hériter de la classe ircbot.SingleServerIRCBot.
Chaque méthode devra être de la forme suivante :

class MonBot(ircbot.SingleServerIRCBot): def on_evenement(self, serv, ev): # gestion de l'évènement
  • Dans le nom de la méthode, evenement sera remplacé par le nom de l'évènement à traiter, ce qui donnera par exemple on_join, on_kick, etc.

  • La méthode prend deux paramètres (ici nommés serv et ev). Le premier sert à communiquer avec le serveur, et le second nous renseigne sur l'évènement, nous permettant de savoir qui a été kické, par qui et sur quel canal par exemple.

Nous allons maintenant étudier plus en détail ces deux arguments.

Communication avec le serveur

irclib nous permet de faire dialoguer notre bot avec le serveur comme le ferait un client IRC habituel à travers la classe irclib.ServerConnection, dont l'argument serv dont nous avons parlé plus haut est une instance. Elle dispose de nombreuses méthodes et seules les plus utilisées seront présentées ici.

irclib.ServerConnection.

Utilité

nick(self, pseudonyme)

Change le pseudonyme du bot.

get_nickname(self)

Renvoie votre pseudonyme actuel. Celui-ci n'est pas forcément celui que vous souhaitiez, en particulier si vous demandez un pseudonyme réservé.

privmsg(self, destinataire, message)

Envoie un message ; le destinataire peut être soit un canal tel que #kikoo, soit un nom d'utilisateur tel que dentuk.

action(self, destinataire, message)

Envoie une action ; sous la plupart des clients, cela correspond à la commande /me.

notice(self, destinataire, message)

Envoie une notice.

invite(self, pseudonyme, canal)

Invite un autre utilisateur à rejoindre le canal précisé.

join(self, canal, cle='')

Rejoint le canal précisé, en utilisant la clé donnée si le canal est protégé par mot de passe.

part(self, canal, message='')

Quitte le canal précisé, éventuellement avec un message d'au revoir.

disconnect(self, message='')

Quitte le serveur, éventuellement avec un message d'au revoir, et déconnecte le bot.

irclib.ServerConnection.

Utilité

kick(self, canal, pseudonyme, raison='')

Exclut un utilisateur du canal, éventuellement avec une raison.

mode(self, canal, commande)

Active ou retire un mode. Nous verrons comment utiliser les modes plus loin dans le tutoriel.

Voilà déjà de quoi bien vous amuser. Pour la liste complète des méthodes, lancez un shell Python et procédez ainsi :

>>> import irclib >>> help(irclib.ServerConnection)

Toutefois, la documentation n'est pas très précise, le plus souvent on a droit à un « envoie telle commande au serveur », vous aurez donc peut-être besoin de la compléter par une recherche.

La variable d'évènement

Il y a dans irclib trois catégories d'évènements :

  • ceux qui découlent du protocole IRC en lui-même, et sont les plus utiles tels que la réception d'un message ou l'exclusion d'un utilisateur ;

  • ceux qui sont générés pour les besoins de irclib, concernant principalement le CTCP et le DCC que nous n'étudierons pas ici ;

  • et les évènements dits « numériques », parce qu'ils correspondent à un code numérique dans le protocole IRC dont vous, en tant qu'utilisateur de irclib, n'aurez pas à vous soucier ; ils précisent une étape dans la communication (début / fin d'envoi du message du jour...), une erreur (si l'on essaie d'envoyer un message à un pseudonyme inexistant...) ou autre chose ; ils sont très nombreux et nous n'en étudierons qu'un seul dans ce tutoriel, qui est celui de bienvenue.

Un évènement est représenté par une instance de la classe irclib.Event, c'est le cas de l'argument ev de notre méthode modèle. Cette classe possède trois méthodes d'information qui nous seront utiles, et une autre qui, en général, ne sert pas quand on utilise ircbot.

irclib.Event.

Renseigne sur...

source(self)

... l'origine de l'évènement ; c'est-à-dire, selon l'évènement, soit un serveur, soit un utilisateur, soit un canal.

target(self)

... la cible de l'évènement ; c'est-à-dire, selon l'évènement, soit un utilisateur, soit un canal.

arguments(self)

... divers paramètres relatifs à l'évènement, toujours sous la forme d'une liste.

eventtype(self)

... le type de l'évènement ; par exemple, "welcome" pour l'évènement de bienvenue.

Nous allons maintenant voir quelques évènements que vous pouvez choisir de traiter. Bien entendu, vous n'avez pas besoin de tout savoir par coeur, vous pouvez toujours garder les tableaux de côté quand vous programmez. Je vous propose deux tableaux : dans le premier, il y a ce que représente la valeur de retour de chaque méthode de irclib.Event pour chaque évènement ; et dans l'autre, des exemples de ces valeurs de retour pour bien comprendre.

Émis quand...

ev.eventtype()

ev.source()

ev.target()

ev.arguments()

... vous êtes connectés au serveur.

welcome

Serveur

Votre pseudonyme

Message d'accueil

... quelqu'un change de pseudonyme.

nick

Utilisateur

Nouveau pseudonyme

... quelqu'un vous envoie un message privé.

privmsg

Utilisateur

Votre pseudonyme

Message envoyé

... quelqu'un envoie un message sur le canal.

pubmsg

Utilisateur

Canal

Message envoyé

... quelqu'un utilise la commande /me sur le canal.

action

Utilisateur

Canal

Message d'action

... quelqu'un vous envoie une notice.

privnotice

Utilisateur

Votre pseudonyme

Message envoyé

... quelqu'un envoie une notice au canal.

pubnotice

...

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Programmer un bot IRC simplement avec ircbot

Prix sur demande