IRSSI : naissance d'un classique

Jusqu'à présent, pour les utilisateurs GNU/Linux souhaitant discuter, délirer et troller sur les canaux IRC, les clients à la mode étaient BitchX ey XChat. Voici ce couple sur le point de se transformer en trio avec l'arrivé au devant de la scène d'un client tout à fait remarquable : irssi.

Les plus curieux des utilisateurs coutumier de l'IRC aurons sans doute connu irssi alors qu'il etait loin d'être véritablement utilisable. Les premières version ne possédait que peu de fonctionnalité et la version texte n'était que secondaire. A cette époque, le /exec n'était pas même encore utilisable. Ce temps est révolut et irssi dans sa dernière version (0.7.98.3) contient à présent toutes les fonctionnalité qui lui faisait défaut et en ajout de supplémentaire.

Il est maintenant indégnable que ce client IRC convertit de plus en plus d'utilisateur qui jusqu'alors préféraient Xchat ou BitchX. Parmi les fonctionnalités remarquable d'irssi, on notera la possibilité de créer des plug-ins écrit en perl avec une déconcertante facilité et la possibilité d'utilisé des thème. Ce qui était avec les ancienne version connu sous le nom d'irssi-text et à présent devenu le programme de base auquel il est possible d'ajouter une couche graphique. Autant vous prévenir de suite, l'utilisation du mode console est tellement souple qu'on en oubli rapidement l'existant d'un quelconque mode graphique.

Tour d'horizon

La première chose que l'on remarque avec irssi se résume à ces capacités de complétion. La touche de tabulation vient a bout des nickname (pseudo des utilisateurs) mais également des commande ou encore des paramètre de configuration.

Le second point démontre, si cela est encore nécessaire, que le mot console n'est pas la contradiction de convivialité, bien au constraire. Irssi possède une gestion des fenêtre très poussée. Il est ainsi possible très simplement de dialoguer sur plusieurs chans sur différents serveur, le tout en utilisant qu'un seul terminal. Vous pourrez organiser vos différentes fenêtres de dialogue en divisant l'écran ou en basculant de l'une a l'autre. Irssi, vous informant continuellement de l'activité sur chaque fenêtre.

La configuration du client est très simple et ne nécessite absolument aucune édition d'un quelconque fichier de configuration. Vous pourrez lister l'ensemble des paramètre de connexion sur la fenêtre d'état (status) d'irssi à l'aide de la simple commande /set. Les premier paramètre à définir concernent votre identité :

Vous enregistrerez ensuite ces paramètres à l'aide de la commande /save.
Un autre jeu de paramètres est très utile si, comme moi, vous désirez concervez une trace que l'activité sur chaque chan où vous vous trouvez. Il s'agit des paramètre définissant la manière donc les logs (journaux d'activités) sont traité. Dans un premier temps, vous activerez l'enregistrement automatique :
/set autolog ON
Ainsi, dès votre arrivé sur un chan, tout sera enregistré. Les autres paramètre détermine l'aspect et le format des logs : log_open_string et log_close_string détermine les chaînes marquant respectivement l'ouverture et la fermeture des logs. La varleur par défaut est "--- Log opened" et "--- Log closed" suivit de "%a %b %d %H:%M:%S %Y". Cette dernière séquence est en fait une liste de variables donc le contenu sera utilisé pour composer les chaînes dans le log. Ici cette séquence de variable donne :
--- Log opened jour_de_la_semaine mois numero_jour heure:minute:seconde année
exemple :
--- Log opened Fri Jul 27 1:27:45 2001
  • log_timestamp permet de résoudre un problème important des logs : le repérage temporel. Le timestamp est le format de l'heure tel qu'il sera noté en debut de chaque ligne des différents logs. Ce paramètre utilise le même format que le précédant est une séquence %d/%m/%Y-%H:%M vous donnera une chaîne date/heure entièrement numérique (31/08/2001-23:24 par exemple). J'ai, à plusieurs reprise parlez des logs, car, par soucis de clareté, ceux-ci sont enregistré de manière distincte par chan et par serveur. C'est le paramètre autolog_path qui détermine la manière de procéder. Par défaut, sa valeur est ~/irclogs/$tag/$0.log, ce qui correspond à un enregistrement des logs avec un chemin :
    ~/ irclogs / identificateur de serveur / chan.log
    
    Ceci nous ammenne à parler d'une autre fonctionnalité d'irssi : la gestion des profiles de connexion. Irssi permet comme d'autre client évolués de se connecter automatiquement à un ou plusieurs chan sur un ou plusieurs serveur. Contrairement aux clients graphique où cette configuration se rpésente sous la forme d'une arborescence, avec irssi, il est préférable d'utiliser le terme de profile.

    Cette gestion passe par les commandes /ircnet, /server et /channel. Un reseau irc est une interconnexion de serveurs sur lesquels se rattache des clients irc. Un reseau comprend un certain nombre de canaux (ou chan), ceux-ci sont présent et synchronisé entre les différents serveurs du reseau. Irssi permet donc de définir des profiles reseaux qui servirons a stocker différents serveurs et a configurer les chan que vous souhaiter utiliser. Il est ainsi possible de stocker une configuration de serveur et de chan courament utilisé, mais également d'automatiser un certain nombre de manipulation, comme la connexion automatique ou encore l'authentification pour un nickname enregistré.

    Si nous prenons le cas du réseau OpenProjects.Net (OPN), nous commençons par définir un profile pour le réseau irc suivant la syntaxe /ircnet add <option> nom_du_réseau. Il est possible de simplement considérer une entrée dans les profiles réseaux comme un dossier dans lesquels ont placera les serveurs. Ainsi, on pourrait tout simplement faire :

    /ircnet add OPN
    
    Il est cependant possible d'ajouter un certain nombre de paramètre interessant : Nous ajoutons une entrée OPN et dès la connexion, nous enverons un message à nickserv avec le mot-clef IDENTIFY et notre mot de passe. Nous attendrons 2 seconde avant de poursuivre la procédure (joindre les chan)
    Poursuivons notre exemple en ajoutant une collection de serveurs pour le réseau OPN :
    /server add -ircnet OPN irc.openprojects.net 6667
    /server add -ircnet OPN forward.openprojects.net 6667
    /server add -auto -ircnet OPN fontana.openprojects.net 6667
    
    Nous avons ajoutez trois serveurs pour le réseau OPN. Remarquez que nous devons précisez le réseau où placer les entrées (-ircnet OPN). La dernière ligne comporte un paramètre supplémentaire permettant de se connecter automatiquement au serveur en question (-auto).

    Dernière étapes, nous devons ajouter les entrées correspondantes aux chan :

    /channel add -auto #linuxfr OPN
    /channel add -auto #parinux OPN
    /channel add -auto #perlfr OPN
    
    Rien de plus simple, il suffit de spécifier les chan et le réseau irc à utiliser. Si un chan est surveillé par un bot (programme simulant un opérateur), irssi met à notre disposition des paramètres pour l'identifier et lui envoyer un message : Vous voila fin pret à discuter avec vos amis, n'oubliez pas d'enregistrer la configuration avec /save.
    A présent que vous êtes connectés et avez rejoind les chan de votre choix, vous pouvez expérimenter les fonctionnalité de fenêtrage d'irssi. Par défaut, les fenêtres se superposent dans leur ordre de connexion. vous serez informer de l'activité y apparaîssant par l'intermédiaire d'un message sur la ligne d'état au bas de l'écran. Vous basculerez ensuite d'une fenêtre à l'autre par l'intermédiaire des séquence <ALT>+<fleche> ou <ALT>+n (ou n est le numéro de fenêtre).

    Si votre terminal le permet (taille de police et/ou résolution), vous pouvez choisir de partager l'écran et afficher ainsi plusieurs fenêtres. Pour cela, il vous suffira d'utiliser la commande /window show n où n est le numéro de fenêtre à afficher en plus de la fenêtre courante.

    Utilisation avancé

    Jusque là, nous avons couvert des domaines où n'importe quel client irc se doit de sévir. Nous allons maintenant voir une fonctionnalité qui reste rare mais commune aux clients les plus utilisés. Il s'agit de la possibilité d'étendre les fonctionnalités d'irssi par l'intermédiaire de script écris en Perl : les plug-ins.

    Les scripts Perl d'irssi vous permettrons d'ajouter des commandes, d'intercepter des messages, de gérer les évenement. Bref, autant de choses qui vous permettrons de mieux dialoguer et d'automatiser vos actions. Avant toutes choses, il faut qu'irssi, au démarrage, lance le support Perl. Lors de son installation et son premier lancement, irssi vous aura créé un répertoire ~/.irssi. Vous trouverez dans ce répertoire plusieurs fichiers (dont le fichier principale de configuration). C'est ici que vous allez créer un fichier startup spécifiant les commandes à lancer au démarrage d'irssi. Ajoutez y simplement une ligne :

    /load perl
    
    Dès lors, vous devrez appercevoir les lignes suivante dans la fenêtre d'état d'irssi :
    -!- Irssi: Loaded module perl_core
    -!- Irssi: Loaded module fe_perl
    
    Nous pouvons maintenant nous attacher à l'écriture de notre permier script. Celui-ci, très simple, nous permettra de changer notre nickname en lui ajoutant un commentaire être [ et ]. Bien qu'il existe une commande spécifique pour signifier le fait que nous ne suivons plus les conversations mais la méthode la plus courante est de modifier son nickname (moi devenant par exemple moi[away], moi|away, ou encore moi_pala).

    Notre nouvelle commande que nous appelerons /aw (comme away) prendra en argument une chaîne de caractère qui sera intégré au nickname. Nous placerons notre code dans un fichier quelconque, placé dans ~/.irssi/scripts. Un tel fichier peut intégrer un où plusieurs commandes, sous la forme de fonctions Perl. Mais, avant toutes chose, il convient de charger le module irssi :

    use Irssi; 
    use strict;
    
    Suit ensuite notre nouvelle fonction :
    
    sub cmd_aw {
      my ($data, $server, $channel) = @_;
      if ($data eq "off") {
        $server->command("/nick monnick");
        } else {
        $server->command("/nick monnick[$data]");
        }
      return 1;
      }
    
    Les argument recu par notre fonction dépendent de la manière de l'appeler. Ici, il s'agit d'un nouvelle commande que nous grefferons à irssi avec :
    Irssi::command_bind('aw', 'cmd_aw');
    
    Notre fonction cmd_aw reçoit trois arguments : Le reste de la fonction est toute simple, il nous suffit de tester si l'argument de /aw est off ou non. Si tel est le cas, nous retournons à notre nickname habituel (monnick), dans le cas contraire, nous utiliserons le contenu de $data pour le modifier. Nous utilisons pour cela, la méthode command sur l'objet $server que nous avons récupéré en argument de la fonction.

    C'est tout ! La dernière ligne (command_bind) associera notre fonction a la commande /aw. Il nous suffira de lancer le script depuis irssi en utilisant /run script.pl. Il est également possible de lancer le script automatiquement au démarrage d'irssi en place tout simplement le fichier dans ~/.irssi/script/autorun.

    De la même manière, il est possible d'intercepter les messages publique sur un chan avec :

    Irssi::signal_add('message public', 'ma_fonct');
    
    Dans ce cas, les arguments sont différent : Notre fonction ressemblera donc à ceci :
    sub ma_fonct {
      my ($server, $msg, $nick, $address, $target) = @_;
      my $newmsg=kkchose($msg);
      $server->print($target, '<'.$nick.'> '.$newmsg, MSGLEVEL_CLIENTCRAP);
      Irssi::signal_stop();
      }
    
    Nous imaginerons ici que nous avons écrit une fonction kkchose() qui prend en argument le message originale et le transforme puis retourne le tout dans $newmsg. Nous ponvons ensuite utiliser le nouveau message avec la méthode affichage d'irssi. Cette méthode sur l'objet $server demande de spécifier la cible (récupérer dès le début de notre fonction), un message à afficher et un argument supplémentaire déterminant la manière d'afficher le message. Ici MSGLEVEL_CLIENTCRAP permet d'afficher le message dans la fenêtre en tant que message de niveau client (c'est à dire de la même manière qu'un message public).

    La dernière ligne permet de stopper le signal original. Sans cette ligne, le message serait traité par irssi selon le mécanisme classique et le nouveau et l'ancien message s'afficherait dans la fenêtre.

    De la même manière, il est possible d'intercepter les message public que nous émettons grâce à :

    Irssi::signal_add('message own_public', 'autre_fonct');
    
    Mais dans ce cas, les arguments envoyés à autre_fonct sont différents :
    sub autre_fonct {
      my ($data, $server, $channel) = @_;
      my $newmsg=kkchose($data);
      $server->print($target,$newmsg, MSGLEVEL_CLIENTCRAP);
      Irssi::signal_stop();
      }
    
    Mis à part les argument passée, le reste de la fonction est très similaire.

    Il est possible depuis un script Perl d'accéder et de modifier n'importe quel éléments d'une connexion en cours, d'irssi ou encore de la configuration courante. Il est, par exemple, assez fréquent qu'un script nécessite certains paramètres fournis par l'utilisateur. Il est ainsi, possible que le script créer de nouvelle entrée dans la configuration d'irssi. Ces entrée pourront être, ensuite initialisé par l'utilisateur pour configurer le script :

    Irssi::settings_add_str("GNI", "denis_set", "coucou");
    
    Cette ligne créera une entrée denis_set dans un nouvelle section (purement esthétique) et initialisera sa valeur avec la chaîne "coucou". Dès l'exécution de cette ligne, le paramètre sera accessibla via la commande :
    /set denis_set
    [ GNI ]
    denis_set = coucou
    
    Bien sûr, il est également possible de lire n'importe quelle valeur depuis la configuration courante avec :
    $valeur=settings_get_str("denis_set");
    
    On imagine aisément le nombre de script pouvant être écris. Vous trouverez sur le site officiel quelques exemple ainsi qu'une documentation spécifique. N'hésitez pas non plus à partager vos scripts et à les anvoyer aux responsable du projet irssi.

    D. Bodor (aka Lefinnois)

    Liens :

    Irssi homepage
    http://www.irssi.org

    Quelques scripts :
    http://www.irssi.org/?page=addons

    Le CVS :

    export CVSROOT=:pserver:anonymous@cvs.irssi.org:/home/cvs
    cvs login 
    cvs -z3 co -P irssi
    


    Copyright (c) 2001 Linux Magazine France. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; A copy of the license is included in the section entitled "GNU Free Documentation License".