Journal irssi-xmpp: un nouveau module jabber pour irssi

Posté par  .
Étiquettes : aucune
0
7
août
2007
Il existe de nombreuses façons de se connecter au réseau jabber[1] avec irssi[2]. Parmi celles-ci on retrouve : bitlbee[3] (une passerelle de messagerie instantanée qui permet de se connecter depuis n'importe quel client IRC), irssi-jabber[4] (un module irssi pour se connecter au réseau jabber), gc[5] (un script perl pour irssi permettant de se connecter aux salons de discussions de jabber), PSYC[6] et sûrement d'autres manières que je n'ai pas encore découvertes...

Jusqu'à présent j'utilisais bitlbee mais je voulais quelque chose dans irssi qui ne se connecte qu'à jabber, qui prend en charge tout ou une grande partie du protocole XMPP[7] (et de ses extensions incontournables) et qui le fasse bien. Hélas la plupart des autres solutions qui m'intéressaient ne sont ni complètes ni maintenues.

J'ai donc décidé de créer un nouveau module irssi pour se connecter au réseau jabber en se basant sur le même principe que le module déjà existant irssi-jabber. Et après une petite semaine de développement, j'ai l'honneur de vous présenter irssi-xmpp[8] !

Le module s'appuie sur la bibliothèque loudmouth[9], écrite en C avec Glib, qui se veut légère et facile à utiliser pour programmer toutes sortes de choses dans les limites du protocole xmpp. Et je dois dire qu'elle fait plutôt bien son boulot.

La version actuelle du module irssi-xmpp et pas la même occasion la première version publique est la 0.10. Au programme, la base de la base :
- la connexion aux serveurs jabber (encore heureux)
- la discussion avec les contacts jabber
- une liste des contacts avec un traçage complet des ressources et un tri des contacts (par état puis par pseudo/jid)
- la possibilité de changer son état
- l'envoi aux clients qui le demande de nos informations sur notre client (nom du client, version et système d'exploitation -> pas tout à fait le cas, je viens de m'apercevoir qu'"OpenBSD" est défini comme système d'exploitation en dur dans le module)

Je développe activement le module donc vous devriez voir arriver dans les semaines à venir les fonctions suivantes :
- l'ajout/suppression de contacts
- l'utilisation complète de l'infrastructure de thème d'irssi pour l'affichage des messages (ce qui n'est pas entièrement le cas en ce moment) et utiliser un niveau de message particulier pour tout ce qui concerne l'état des contacts (ainsi on pourra afficher les changements d'état et la liste des contacts dans une fenêtre dédiée)
- la possibilité de configurer le module en utilisant l'infrastructure de configuration d'irssi (globalement on pourra : afficher ou non les contacts déconnectés, afficher ou non les changements d'états et les connexions/déconnexions, envoyer ou non les informations concernant notre client, ...)
- l'affichage des informations des contacts
- la possibilité de modifier ses informations personnelles
- la gestion des groupes et des pseudonymes dans la liste des contacts
- les connexions chiffrées avec SSL
- la prise en charge des proxys
- la possibilité d'utiliser les MUC (les salons de discussions)
- l'exploration des services des serveurs jabber
- l'inscription à des services
- ...
Je vous invite donc à aller régulièrement jeter un coup d'oeil à l'adresse suivante pour les mises à jour : http://cybione.org/src/irssi-xmpp/


Pour installer la bestiole, il vous faut irssi et loudmouth d'installés. Il vous faut aussi les sources d'irssi (enfin surtout les fichiers d'entêtes). Je ne touche pas aux autotools et à ce genre de choses ; la procédure d'installation est assez simple :
$ export IRSSI_INCLUDES=/le/chemin/vers/les/sources/d'/irssi
$ make

et enfin pour installer le module dans votre ~/.irssi/modules :
$ make user-install

Si tout c'est bien passé, vous pouvez lancer irssi et taper la commande suivante pour charger le module :
/load xmpp
Ensuite pour se connecter :
/server -xmppnet
Par exemple :
/server -xmppnet jabber im.cybione.org 5222 motdepasse errtu

Et avec un peu de chance, vous voilà connecté !

Enfin vous pouvez afficher la liste de vos contacts :
/roster
Parler avec quelqu'un :
/q /
Par exemple :
/q errtu@im.cybione.org/Home
Et changer d'état :
/away indisponnible

La commande away est un peu plus puissante que d'habitude car elle vous permet de changer la petite icône sur un client graphique, par exemple :
- Pour se mettre "Absent" :
/away
- Pour se mettre en "Veut discuter" :
/away chat
- Pour se mettre en "Ne pas déranger" (occupé) :
/away dnd
- Pour se mettre en "Non disponible" :
/away xa
- Pour redevenir disponible :
/away
Dans tous les cas, sauf le premier, le message est facultatif.

Pour le moment, c'est rudimentaire mais presque suffisant pour une utilisation de base.


Au passage, le module a été programmé et testé sous OpenBSD amd64.

Je vous invite à laisser vos impressions/commentaires/insultes/rapports de bugs/patchs/demandes de fonctionnalités soit directement sur ce journal soit par jabber : errtu@im.cybione.org (ah ben non, qu'est-ce que je raconte, je ne peux pas encore ajouter des nouveaux contacts donc je ne peux pas encore vous parler sur jabber).


---
[1] http://wiki.jabberfr.org/Accueil
[2] http://irssi.org/
[3] http://www.bitlbee.org/
[4] http://kalvdans.no-ip.org/trac/irssi-jabber
[5] http://gonzo.kiev.ua/index.php?page_id=138
[6] http://www.psyc.eu/
[7] http://fr.wikipedia.org/wiki/XMPP
[8] http://cybione.org/src/irssi-xmpp/
[9] http://www.loudmouth-project.org/
  • # ah la forkofolie frénétique...

    Posté par  (site web personnel) . Évalué à 10.

    Hélas la plupart des autres solutions qui m'intéressaient ne sont ni complètes ni maintenues.

    Un logiciel libre peut au contraire être maintenu par tout le monde. J'ai du mal à saisir pourquoi tu ne contribues pas à irssi-jabber, au lieu de repartir à zéro. Christian Häggström ne développe certes pas le logiciel avec une frénésie époustouflante, mais c'est justement parce qu'il est pratiquement seul à mettre la main à la pâte, et qu'au bout d'un moment, ben forcément ça lasse. Il n'y a rien de tel qu'une nouvelle personne motivée et pleine de bonnes idées pour booster un projet. En plus de ça, vos projets sont incroyablement similaires: un plugin. Pour le même logiciel. Pour le même protocole. Écrit dans le même langage. Même s'il y a ensuite des différences quand on descend plus bas, c'est déjà un bon début, et on connaît des projets plus gros qui ont réussi à fusionner avec moins que ça. Coordonnez vos efforts, que diable ! Vous gagnerez tous deux un contributeur talentueux à un projet qui est attendu par énormément de monde.
    • [^] # Re: ah la forkofolie frénétique...

      Posté par  . Évalué à 2.

      Je suis on ne peut plus d'accord avec toi, c'est d'ailleurs ce qui fait l'une des forces du logiciel libre.

      Ça fait un petit moment que je voulais faire évoluer la prise en charge de jabber dans irssi et comme j'ai eu récement un peu plus de temps et de motivation à y consacrer, j'ai décidé de mettre les mains dans le camboui.

      Seulement ça me paraissait impossible de contribuer à irssi-jabber pensant ne pas avoir les compétences pour. Donc j'ai commencé à bricoler dans mon coin pour comprendre comment fonctionne les modules irssi et le protocole XMPP. Sans m'en rendre compte j'avais obtenu une bonne base et quelques heures de boulot supplémentaires on suffit pour faire voir le jour à irssi-xmpp.

      À mon niveau actuel de compréhension je pourrais contribuer sans trop de problème à irssi-jabber mais comme irssi-xmpp en est pratiquement au même stade de fonctionnalités, l'interêt n'y est plus.

      Maintenant techniquement, les deux modules sont assez différent puisque irssi-jabber intrègre son propre parser XML et utilise les sockets d'irssi alors qu'irssi-xmpp se base entièrement sur loudmouth. Personnellement je trouve irssi-xmpp plus facile à maintenir car il n'intrègre pas toute la brique bas niveau de communication avec le protocole XMPP.
  • # très bonne idée !

    Posté par  . Évalué à 3.

    Très bonne idée ca ! J'étais en train de me dire il y a quelques jours que ca manquait, et qu'il faudrait que quelqu'un le fasse :)
  • # Corrections au journal

    Posté par  . Évalué à 3.

    Arg, Templeet m'a mangé tout les "<", ">" et ce qu'il y avait dedans. Pourtant quand j'ai rédigé le message, je les avais remplacés par des "&lt;" et "&gt;" mais visiblement ça n'a pas suffi.

    Donc en fait, pour se connecter, il fallait lire :
    /server -xmppnet <network> <server> <port> <password> <username>

    Et pour les commandes de changement d'état (dans l'ordre) :
    /away <message>
    /away chat <message>
    /away dnd <message>
    /away xa <message>
    /away
  • # Commentaires

    Posté par  . Évalué à 5.

    Félicitations, ca marche la ou Bitlbee avait échoué pour moi (apparemment, mon compte jabber.freenet.de lui plaisait pas, pas possible a mes contacts d'initier une discussion vers moi, alors que ca marche avec d'autre comptes.)

    Qqs commentaires :
    - c'est IRSSI_INCLUDE la variable qu'il faut exporter, non IRSSI_INCLUDES
    - Sur OpenBSD, tu aurais pu préciser qu'il faut utiliser Gmake, qui a l'air d'etre une dépendance inutile (wrapper tout ca dans les autotools ca se fait en deux coups de cuillère a pot, si j'ai le temps je te le ferai)
    - Ca se compile bien, et la connexion marche du premier coup, il manque juste 2 trucs (qui sont dans ta TODO je suppose) : la completion des pseudos quand on veut faire /q a, et la possibilité d'afficher que les contacts connectés dans le roster.

    Dans tout les cas, beau boulot, continue le développement, et si possible essaie de ne pas dupliquer les efforts avec irssi-jabber comme le dit le 1er commentaire :)
    • [^] # Re: Commentaires

      Posté par  . Évalué à 4.

      Dans tout les cas, beau boulot, continue le développement, et si possible essaie de ne pas dupliquer les efforts avec irssi-jabber comme le dit le 1er commentaire :)

      Comme dit dans le second commentaire: trop tard :)
    • [^] # 0.11 ?

      Posté par  . Évalué à 3.

      http://cybione.org/src/irssi-xmpp/irssi-xmpp-0.11.tar.gz

      Voilà irssi-xmpp version 0.11. Au programme, les petites choses que tu avais demandé Landry et quelques corrections de bugs :

      - L'autocomplétion des JID et aussi des ressources. La complétion des ressources n'est pas encore complète, pour l'avoir faut taper un truc du genre : /q foo@bar.bar/«TAB» (où «TAB» est l'appui sur la touche tabulation biensûr).

      - La possibilité de n'afficher que les contacts connectés avec : /SET roster_show_offline OFF

      - La possibilité de ne pas envoyer les informations sur la version du client avec : /SET xmpp_send_version OFF
      À l'occasion, le nom du système d'exploitation renvoyé est bien celui que vous utilisez.

      - Le roster trie les contacts correctement.
      • [^] # Re: 0.11 ?

        Posté par  . Évalué à 2.

        Merci pour la réactivité, ca marche super bien :)

        Par contre, j'ai remarqué un petit bug hier soir, en commencant une discussion via /query, ca a ouvert une nouvelle fenetre avec mon texte, et quand mon correspondant m'a répondu ca a de nouveau ouvert une nouvelle fenetre (dans laquelle la conversation s'est poursuivie)... je sais pas si c'est bien normal, je suppose que c'est du au fait que j'avais commencé a parler a xy@z et qu'il m'a repondu en tant que xy@z/resource :)
        • [^] # Re: 0.11 ?

          Posté par  . Évalué à 2.

          Exactement, c'est lié aux ressources. Chaque ressource est en fait une connection sur un même compte jabber. Ainsi si une personne se connecte de plusieurs endroits à la fois, plusieurs ressources apparaitront.

          Le comportement par défaut de /query ne prend pas en compte les ressources si on ne les spécifies pas. Dans la prochaine version, si l'utilisateur est connecté et que l'on fait /q xy@z cela ouvrira une fenêtre de query sur sa ressource qui a la priorité la plus élevée. Donc on n'aura plus ce phénomène. En revanche si l'utilisateur n'est pas connecté, on n'en tiendra pas compte (évidement puisqu'il n'y aura aucune ressource de disponnible).
  • # t'as un fan de plus....

    Posté par  . Évalué à 4.

    ... cher Errtu! :)

Suivre le flux des commentaires

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