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.
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é :
/set autolog ONAinsi, 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éeexemple :
--- Log opened Fri Jul 27 1:27:45 2001
~/ irclogs / identificateur de serveur / chan.logCeci 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 OPNIl est cependant possible d'ajouter un certain nombre de paramètre interessant :
/ircnet add -nick monnick -autosendcmd "/^msg nickserv IDENTIFY mot_de_passe;wait -OPN 2000" 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 6667Nous 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 OPNRien 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 :
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.
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 perlDè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_perlNous 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 :
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 :
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 = coucouBien 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)
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".