====== Scripts pour eggdrop ====== Un script Tcl, que nous appellerons plus simplement "Tcl" permet d'ajouter (ou de modifier) des fonctions à l'Eggdrop. Un script est basé sur trois points essentiels: * le déclencheur qui permettra de lancer l'action, * la procédure de traitement (l'action en elle-même), * la sortie effective. ===== Structure d'un script ===== Autant que faire se peut, un script doit être bien structuré de manière à pouvoir être corrigé et évolué sans se perdre dans le code. Habituellement, on trouve X parties dans un script: ==== L'en-tête ==== Il s'agit de commentaires indiquant le nom du script, son auteur, la version (et sa date), les évolutions par rapport à une version précédente, l'utilisation, ... En lisant l'en-tête d'un script, vous devriez avoir toutes les informations pour le configurer et l'utiliser. ==== Les variables de configuration ==== La plupart des scripts doivent être configurés pour bien fonctionner, ceci se fait très souvent avec des variables qui sont définies dans le script. Ceci est placé juste après l'en-tête pour que l'utilisateur non-averti n'ait pas à modifier dans les parties actives, ce qui évite les mauvaises manipulations. Pensez toujours à mettre un commentaire expliquant l'utilité de la variable et, si besoin est, un ou plusieurs exemples. ==== Les déclencheurs ==== Les déclencheurs, ou [[:scripts:binds]] (contrainte) sont les éléments qui permettront à l'Eggdrop de réagir à un évènement qui peut être une action utilisateur (un message en canal par exemple), une action propre à l'eggdrop (une connexion au serveur) ou un évènement programmé (une date). Certains préfèrent mettre les binds avant les procédures qui en découlent, d'autres préfèrent lister tous les binds au début du script. En règle générale, il vaut mieux les mettre ensemble car il n'est pas rare que plusieurs binds appellent la même fonction. Une très bonne idée est de déclarer les déclencheurs à la fin du script, avant [[#les_informations_de_chargement|les informations de chargement]]. Cela permet de ne pas les avoir d'activés si le script provoque une erreur lors de son chargement. ==== Les fonctions ==== En Tcl, les fonctions sont appelées procédures. Une procédure reçoit une liste d'arguments, la traite et renvoit le résultat du traitement. ==== Les informations de chargement ==== Il est courant de mettre à la fin du script une petite ligne qui indiquera en Party-Line que le script est bien chargé. ==== Exemple de structure ==== # # Script exemple Version 1.0 # # Auteur: CrazyCat # Date: 01/10/2007 # # Ce script est juste un exemple # # Utilisation: !exemple en canal # # CONFIGURATION # message à afficher set smsg "L'exemple est réussi" # NE PAS MODIFIER CI-DESSOUS proc pub.display {nick uhost handle chan args} { putserv "PRIVMSG $chan :$::smsg" return 1 } bind pub - "!exemple" pub.display putlog "exemple 1.0 chargé" ===== Variables ===== Les variables peuvent être définies en deux groupes, les variables locales et les variables globales. ==== Variables locales ==== Elles sont habituellement définies au sein d'une procédure et sont temporaires: la variable n'existe qu'à l'intérieur de la procédure en cours. ==== Variables globales ==== Une variable globale existe non-seulement au sein de tout le script, mais elle est globale pour l'eggdrop. Elles sont définies hors des procédures, comme //ex_msg// dans notre exemple précédent. La globalité d'une variable peut être très pratique, par exemple celles qui sont propres à l'eggdrop comme `$botnick` (le nick actuel de l'eggdrop), mais aussi très handicapant car une variable déclarée dans un script peut être écrasée par un autre script. Pour vous éviter ce type de problème, il y a quelques astuces: - n'utiliser des variables globales qu'à bon escient, - utiliser un préfixe propre à chaque script pour vos noms de variables, - préférer un tableau unique contenant les diverses variables du script, - utiliser un [[:tcl:namespace|espace de nom]] ===== Voir aussi ===== [[faq:livre_blanc]]