Lycanobot/Doc/Special jobs

De Wiki.sec.

Dans lycanobot les personnages spéciaux stockés dans des fichiers séparés, situés dans le répertoire jobs/. Ces fichiers contiennent chacun un appel à la fonction add_job() (définie dans jobs.pl), qui prend en paramètre la description de tout ce qu'apporte le personnage. Ces apports peuvent être des phases et des commandes. Tout ceci est défini dans un grand hash, dont certaines des valeurs qu'il contient sont des références à des fonctions elles mêmes définies dans le fichier.

Un petit exemple d'un fichier d'un personnage spécial, le foobar :

 add_job('foobar',
   {
     'phases' =>
     {
       # Définition de la phase 'foobar_call', qui précède 'day'
       'foobar_call' => {
         # La phase concerne foobar. Elle sera sautée s'il n'est pas là.
         'who'        => 'foobar',
         # Fonction à appeler lors de l'entrée dans la phase
         'presub'     => \&pre_foobar,
         # Fonction à appeler lors de la sortie de la phase
         'postsub'    => \&post_foobar,
         # Fonction à appeler si le temps limite de la phase est atteind.
         'timeoutsub' => \&timeout_foobar,
         # Phase qui suit foobar_call
         'next'       => 'day'
       }
     },
     'commands' =>
     {
       'hello' => {
         # Fonction appelée lorsqu'on execute la commande.
         'subaddr'    => sub { print "Hello world!\n"; },
         'to'         => 'day_channel', # Là où la commande doit être dite
         'need_admin' => 0,             # Pas besoin d'être admin pour la lancer
         'need_alive' => 0,             # Ni d'être en vie
       }
     }
   }
 );
 
 # Définition des fonctions référencées plus haut
 sub pre_foobar {
   # ...
 }
 
 sub post_foobar {
   # ...
 }
 
 sub timeout_foobar {
   # ...
 }
 
 1; # Nécessité par perl


Avec ceci on a ajouté le personnage foobar, la phase foobar_call, et la commande hello. On voit qu'il y a deux clés principales dans le hash passé en paramètre, 'phases' et 'commands', qui peuvent contenir une ou plusieurs phases et commandes. En fait, en gros chacune des phases se retrouve ajoutée dans la variable globale %phases, et les commandes dans %cmdlist.