Mon premier bot IRC s'appelait MarcoBot. C'etait un Eggdrop avec trois scripts Tcl que j'avais copies depuis des forums sans comprendre une ligne. Il faisait trois choses : dire bonjour quand quelqu'un entrait, donner la meteo (en interrogeant un service SOAP qui n'existe plus), et insulter les gens qui ecrivaient en majuscules. Ce bot a tourne pendant quatre ans. J'ai appris plus de programmation en modifiant ses scripts qu'en trois semestres de cours.
Les origines
Les bots IRC existent presque depuis le debut d'IRC lui-meme. Le protocole IRC est textuel et simple : un bot est un programme qui se connecte comme un client normal et reagit aux messages. Techniquement, il n'y a aucune difference entre un utilisateur humain et un bot — le serveur ne fait pas la distinction.
Les premiers bots (debut des annees 90) etaient des programmes en C qui se connectaient a un serveur, lisaient les lignes entrantes, et repondaient selon des patterns. Pas de framework, pas de bibliotheque. Du code reseau brut qui parsait le protocole IRC manuellement.
Les usages initiaux etaient pratiques :
- Protection de canal : Avant les services (NickServ, ChanServ), les bots etaient le seul moyen de proteger un canal. Un bot restait connecte en permanence, gardait le statut operateur, et pouvait le redonner aux bonnes personnes apres un netsplit.
- Logging : IRC est ephemere par nature. Un bot qui loggait les conversations permettait de garder un historique.
- Automatisation : Distribuer des fichiers (les fameux bots DCC/XDCC), annoncer des mises a jour, relayer des messages entre canaux.
Eggdrop : le patriarche
Eggdrop a ete cree en 1993 par Robey Pointer. C'est le plus ancien bot IRC encore activement maintenu — plus de 30 ans de developpement continu. Ecrit en C avec un systeme de scripting en Tcl, Eggdrop a defini ce qu'un bot IRC pouvait etre.
# Installer Eggdrop sur Debian/Ubuntu :
sudo apt install eggdrop
# Ou depuis les sources (recommande) :
git clone https://github.com/eggheads/eggdrop.git
cd eggdrop
./configure
make config
make
make install DEST=/home/user/eggdrop
# Configuration initiale :
cd /home/user/eggdrop
cp eggdrop.conf mybot.conf
# Editer mybot.conf :
# - set nick "MonBot"
# - set server "irc.libera.chat"
# - set listen 3333 all
# Lancer :
./eggdrop mybot.conf
# Se connecter a la party line (DCC) :
/dcc chat MonBot
Ce qui a fait le succes d'Eggdrop :
- Scriptable en Tcl : Tcl est un langage simple a apprendre. N'importe qui pouvait ecrire un script basique en quelques heures. L'ecosysteme de scripts Eggdrop est devenu enorme — des milliers de scripts partages sur des sites comme egghelp.org.
- Botnet : Eggdrop supporte nativement le linking de bots entre eux. Plusieurs bots Eggdrop peuvent former un reseau (botnet) ou ils partagent les listes d'utilisateurs et coordonnent la protection des canaux.
- Stabilite : Un Eggdrop bien configure peut tourner pendant des mois sans intervention. Le processus est leger (quelques Mo de RAM) et les crashes sont rares.
- Party line : Un chat interne au botnet, accessible par DCC. Les administrateurs du bot pouvaient communiquer entre eux via les bots eux-memes, meme quand ils etaient sur des serveurs IRC differents.
Les generations suivantes
Apres Eggdrop, chaque decennie a apporte une nouvelle generation de bots :
Supybot (2003-2014) : Ecrit en Python par Jeremiah Fincher. Supybot a introduit le concept de plugins modulaires avec une architecture propre. Contrairement a Eggdrop ou les scripts Tcl partagent un espace global (avec les conflits que ca implique), les plugins Supybot sont isoles. Supybot a aussi introduit un systeme de permissions granulaire et une base de donnees internes pour les plugins.
Limnoria (2010-present) : Fork de Supybot, maintenu par Valentin Lorentz. Quand le developpement de Supybot a ralenti, Limnoria a pris le relais. Il ajoute le support Python 3, le TLS, l'IRCv3, et continue a etre activement maintenu. C'est le successeur naturel de Supybot et le choix recommande pour ceux qui veulent un bot Python avec une architecture mature.
Sopel (2012-present) : Anciennement Willie, puis Jenni, puis Sopel. Un bot Python concu pour la simplicite. Ecrire un module Sopel est trivial — une fonction decoree avec le pattern qui la declenche. Moins puissant que Limnoria en termes de fonctionnalites integrees, mais beaucoup plus facile a personnaliser rapidement.
# Comparaison : Hello World dans chaque framework
# Eggdrop (Tcl) :
bind pub - !hello hello_cmd
proc hello_cmd {nick uhost handle channel text} {
putserv "PRIVMSG $channel :Bonjour $nick !"
}
# Limnoria (Python) :
class Hello(callbacks.Plugin):
def hello(self, irc, msg, args):
"""Repond bonjour."""
irc.reply(f"Bonjour {msg.nick} !")
hello = wrap(hello)
# Sopel (Python) :
@module.commands('hello')
def hello(bot, trigger):
bot.say(f"Bonjour {trigger.nick} !")
Bots modernes
Depuis 2020, une nouvelle generation de bots emerge, souvent ecrits en Go ou en Rust :
- go-irc + bibliotheques : Go est populaire pour les bots IRC grace a sa gestion native de la concurrence (goroutines). Un bot Go gere des centaines de canaux avec une empreinte memoire minimale. Le package
github.com/lrstanley/gircest la bibliotheque de reference. - irc-go : Une bibliotheque IRC en Go qui implemente le protocole avec support IRCv3 complet. Utilisee par des projets comme Ergo (un IRCd en Go).
- Bots IRC specifiques : Des bots ecrits pour un usage unique — relayer des webhooks GitHub dans un canal, annoncer des commits, monitorer des services. Ces bots sont souvent des scripts de 100-200 lignes, pas des frameworks.
L'approche moderne est differente de l'epoque Eggdrop. Au lieu d'un gros bot multifonction avec des dizaines de scripts, on deploie plusieurs petits bots specialises. Un bot pour les annonces Git, un bot pour la moderation, un bot pour les stats. Chaque bot fait une chose bien.
# Bot minimaliste en Python avec la lib irc :
import irc.bot
import irc.strings
class MonBot(irc.bot.SingleServerIRCBot):
def __init__(self):
super().__init__(
[("irc.libera.chat", 6697)],
"MonBot", "Mon Bot IRC",
connect_factory=irc.connection.Factory(wrapper=ssl.wrap_socket)
)
self.channel = "#monchannel"
def on_welcome(self, connection, event):
connection.join(self.channel)
def on_pubmsg(self, connection, event):
msg = event.arguments[0]
if msg.startswith("!ping"):
connection.privmsg(self.channel, "pong")
bot = MonBot()
bot.start()
Usages actuels
En 2025, les bots IRC servent principalement a :
- Integration CI/CD : Annoncer les builds, les deployments, les merges dans un canal. Les equipes qui utilisent IRC pour la coordination recoivent les notifications en temps reel.
- Monitoring : Alertes d'infrastructure dans un canal d'operations. Quand un serveur tombe, le bot le signale. C'est plus leger qu'un systeme de notification complet pour les petites equipes.
- Moderation : Anti-flood, anti-spam, gestion automatique des bans temporaires. Les bots de moderation sont plus rapides que n'importe quel operateur humain pour detecter le flood.
- Relais : Bridges entre IRC et Matrix, Discord, Slack. Le bot est connecte aux deux cotes et relaie les messages. Matterbridge est l'outil de reference pour ca.
- Information : Bots qui repondent a des requetes — recherche Wikipedia, conversion d'unites, meteo, statut de services. L'equivalent des commandes slash sur d'autres plateformes.
Ecrire son propre bot
Si vous voulez ecrire un bot IRC en 2025, voici les choix recommandes :
- Pour un bot multifonction avec plugins : Limnoria (Python). Ecosysteme de plugins existant, architecture prouvee, communaute active.
- Pour un bot simple et rapide : Sopel (Python). Le plus facile a demarrer. Un module se cree en 5 minutes.
- Pour la performance : Go avec girc ou irc-go. Leger, concurrent, compile en un seul binaire.
- Pour apprendre le protocole : Ecrivez-le from scratch avec des sockets. C'est un excellent exercice — le protocole IRC est assez simple pour qu'un bot basique tienne en 100 lignes.
- Pour la nostalgie : Eggdrop. Toujours maintenu, toujours fonctionnel, et Tcl n'est pas aussi horrible qu'on le dit.
Questions frequentes
Eggdrop ou Limnoria en 2025 ?
Limnoria si vous connaissez Python. Eggdrop si vous avez deja de l'experience Tcl ou si vous avez besoin du botnet (linking de bots). Pour la plupart des nouveaux projets, Python est le choix pragmatique — plus de developpeurs, plus de bibliotheques, plus facile a maintenir.
Un bot IRC peut-il se faire bannir ?
Oui. Si un bot floode, spamme, ou se comporte de maniere abusive, les operateurs de canal le banniront comme n'importe quel utilisateur. Sur certains reseaux, les bots doivent etre enregistres aupres du staff du reseau. Verifiez la politique du reseau avant de deployer.
Comment heberger un bot IRC en permanence ?
Un VPS a 3-5 euros par mois suffit largement. Un bot IRC consomme moins de 50 Mo de RAM et presque pas de CPU. Lancez-le dans un screen/tmux, ou mieux, avec un service systemd qui le relance automatiquement en cas de crash.