• Billet écrit dans : Découverte PHP 31.08.2008 Aucune réponse à cet article.

    Bonjour, j’ai pu découvrir comment créer un bot IRC en PHP grâce à la communauté IRCienne de symfony. (Qu’est ce qu’IRC ? Qu’est ce qu’un Bot ?). Tout est expliqué sur cette page.

    Squattant en ce moment le chan (salon de discutions) de symfony-fr, je passe mon temps à remercier les uns les autres. Depuis peu même j’arrive à aider les nouveaux ^^. Je me suis donc dit que ca serait bien d’avoir un système pour compatibiliser le nombre de « merci » par personnes et d’en sortir quelques statistiques.

    Ainsi est née le bot qui sert à avoir une système à points. Chacun peut donc donner, ou enlever un point, et le robot fera le compte.

    Fonctionnement

    Après quelques discutions sur le channel de symfony, j’ai mis au point 4 petites commandes que le bot va interpréter :

    !point guillaume
    !malus guillaume
    !bonus guillaume
    !total

    Comment ca marche ?

    Le bot est écrit en PHP 5 et se lance via une ligne de commande du style :

    php -f utilisation.php

    Il n’y a que peu de classes pour le faire fonctionner :

    1. Une classe de connexion qui s’occupe de créer un flux de donnée (une socket via fsockopen), de se connecter à un channel irc,  de pouvoir transmettre des commandes IRC et de récupérer ligne par ligne ce qui se passe sur le channel.
    2. Une classe principal qui permet de garder le flux de donné ouvert (et donc fait en sorte que le bot reste sur le channel IRC), et qui permet de lancer des Plugins. Son rôle tient plus d’un controlleur PHP que d’une classe à mon sens.
    3. Une interface et une classe de base pour la gestion des Plugins. En fait un plugin est une classe qui contient le coeur d’un programme et permet de réagir vis à vis d’un évènement sur le channel. Un plugin fait donc office d’observateur puisqu’il permet d’écouter des évènements mais il s’obverse lui même vu qu’il traite ces évènements et y répond.

    J’ai donc créer un plugin et modifier un temps soit peu la classe principal pour avoir à tout moment la liste des utilisateurs du channel. Au final le code n’est pas bien compliquer et bien long (330 lignes à tout casser). Les points sont stocker dans une base de données local (voui, pas besoin de serveur en ligne vu que l’on lance le bot en local on peut accèder à une base en local ^^). Quelques random rendent le bot sympathiques pour avoir des phrases de réponses un peu plus humaine.

    Je ne vous donne pas le code source de cette petite application car je le juge « pas très propre » et je pense y faire encore pas mal de modifications dessus :)

    Pour la suite

    Je prévois de faire une application symfony pour ajouter/modifier des phrases de réponses clées. Faire des graphiques de statistiques, et ré-initalisé la base de données à souhait. Tout n’est pas encore fixé, mais j’aimerais bien une console d’administration du bot à distance sympathique :)

    Voilà voilà

    Billet écrit dans : Découverte PHP 31.08.2008 Aucune réponse à cet article.
CV Guillaume chave