irccd, le robot IRC scriptable en Lua grandit

Posté par  (site web personnel) . Édité par bubar🦥, Florent Zara et palm123. Modéré par Ontologia. Licence CC By‑SA.
Étiquettes :
23
12
fév.
2014
Technologie

Après plusieurs mois de travail, une nouvelle version du robot irccd voit le jour. Rappelons qu'Irccd est un bot IRC écrit en C++ et Lua. Il fonctionne tel un daemon qui attend tranquillement des événements (pour y réagir ou pas) tels les messages, les changements de topic, les arrivées et départs sur un channel, etc. Il est aussi possible de contrôler le daemon irccd avec l'outil irccdctl qui permet d'envoyer des requêtes ou des messages sur un channel, etc. Irccd présente la particularité d'être extensible via des plugins en Lua.

IRC Client Daemon

La suite de la dépêche fait un tour des nouveautés de ce robot IRC pas banal.

L'API Lua

L'API Lua est celle qui a reçu le plus de changements.

Possibilités de threader

Alors qu'irccd fonctionnait toujours par un système basé sur un évènement, il est maintenant possible de faire des plugins autonomes grâce à une toute nouvelle API de thread. Chaque thread crée un nouveau contexte Lua qui ne partage aucune donnée avec son parent. Il est alors nécessaire de passer par une api de "message" similaire à celle de löve

Les API associées sont :

Voici un exemple de ce qu'il est maintenant possible de faire avec ces threads :

markand: !bomb xrg
irccd: xrg, you have the bomb, type !bomb <target> to pass
xrg: !bomb Peuc
irccd: Peuc, you have the bomb, type !bomb <target> to pass
Peuc: !bomb markand
irccd: markand, you have the bomb, type !bomb <target> to pass
irccd: markand, BOOM

L'explosion a eu lieu parce que le dernier utilisateur n'a pas passé la bombe assez rapidement. Ce plugin n'est actuellement pas sorti avec irccd 1.1

Gestion des fichiers et du système

Avant, le module irccd.util contenait l'essentiel des fonctions générales. Maintenant deux nouveux modules ont été dédiés à la gestion des fichiers et du système.

Exemple avec un plugin en cours de création :

markand: !system version
irccd: the system version is 10.0-RELEASE

Les sockets

Trois nouveaux modules voient le jour aussi, il s'agit des sockets. Ces derniers vont permettre de se connecter à des services complètement indépendants comme un serveur web, mail, etc. Cette API tente d'être le plus proche de l'API C. En revanche, la gestion des adresses et d'un serveur d'écoute est facilitée.

Améliorations générales

Reconnexion automatique

Une des fonctionnalités les plus demandées était la reconnection automatique. Le robot va maintenant tenter de se reconnecter toutes les trente secondes, indéfiniment. Par contre, il n'y a pas encore de moyen de détecter le crash d'un serveur IRC. Pour pallier ce problème, irccdctl est doté d'une fonction restart qui permet de forcer la reconnexion d'un serveur.

Ces paramètres sont optionnels et peuvent être définis dans la section du serveur :

[server]
# ... comme avant ...
reconnect-tries = "10"     # essaye de se reconnecter 10 fois
reconnect-timeout = "20"   # attend 20 secondes avant de réessayer

Connexion en temps réel

Il est maintenant possible de se connecter à un nouveau serveur soit par l'API, soit par irccdctl.

Formatage de texte

Pour ceux qui désirent écrire en couleurs ou en gras, c'est désormais possible grâce à la fonction util.format. Cette dernière permet de s'affranchir des caractères d'échappements fastidieux.

Côté plugins

Plugin d'authentification

Un nouveau plugin d'authentification Auth permet de s'identifier automatiquement auprès de NickServ ou Q.

Autres changements

  • La bibliothèque C constituant les évènements IRC libircclient est maintenant intégrée et n'est plus nécessaire.
  • La fonction onMe a été ajoutée
  • Possibilité d'utiliser LuaJIT comme alternative à Lua 5.2

Aller plus loin

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.