Depuis les scripts loaded, aussi bien que depuis .sircrc.pl, vous avez la possibilité de définir des routines à appeler lorsque des événements particuliers se produisent. C'est l'équivalent de ircII /on's.
Pour déclarer un point d'insertion, vous devez définir une sous-routine appelée "hook_somename" qui agit quoi que vous vouliez faire lorsqu'un point d'insertion de type "hook_type" est (déclenché), et ensuite appelle &addhook("hook_type", "somename");
Pour supprimer un point d'insertion, vous appelez &remhook("hook_type", "somename");
Les points d'insertion numériques son également disponibles, pour chaque nombre à 3 caractères; pour déclarer l'un d'eux, définissez une sous-routine appelée "hook_somename" qui agit comme vous le voulez, et appelez &addhook("xxx", "somename"), où xxx est le nombre représentant la réponse numérique. Pour supprimer l'un d'eux, appelez &remhook("xxx", "somename");
Les sous-programmes appelés à partir des points d'insertion ont accès aux mêmes fonctions et variables listées plus haut pour les fonctions, plus quelques-unes plus spécifiques (partout où c'est applicable) :
$who est le pseudonyme qui a déclenché le point d'insertion $user est le nom d'utilisateur correspondant $host est le nom d'hôte correspondant |
Les points d'insertion peuvent également définir la variable $silent s'ils veulent assurer l'affichage pour l'éventualité (à travers &print) et bloquer les valeurs par défaut. C'est l'équivalent direct de la connexion "ˆ" sur ircII /on's, excepté "raw_irc".
Les points d'insertion marqués avec une * peuvent aussi définir la variable spéciale $skip et la ligne sera ignorée par le client). Ceci est en général une mauvaise idée, utilisez $silent autant que possible. Seuls les points d'insertion où ce procédé fournit une fonctionnalité supplémentaire réelle ont cette possibilité. Pour "raw_irc" c'eest l'aquivalent de la connexion "ˆ" sur ircII /on raw_irc.
Les points d'insertion suivants sont disponibles, et sont appelés avec les arguments suivants :
action activée par une action ctcp; le 1er argument est le pseudonyme ou le canal auquel il est envoyé le 2e argument est le message commande * activée par l'utilisateur tapant une commande (sans tenir compte si c'est une /commande ou seulement une ligne de texte) le 1er argument est la ligne de l'utilisateur ce point d'insertion est spécial (comme "print" et "status"), en ce sens qu'il est clairement autorisé à modifier son argument ($_[0]) pour modifier toute commande pouvant être interprétée. la définition $skip=1 dans le point d'insertion obligera sirc à ignorer la commande chat_disconnect activée lorqu'une discussion en ligne est perdue (mais non lorsque l'utilisateur la clôture lui-même avec DCC CLOSE CHAT) le 1er argument est le pseudonyme associé à la discussion en ligne ctcp * activée par tout ctcp, AVANT que le client n'effectue l'analyse et éventuellement réponde au ctcp. le 1er argument est le nom ou le canal auquel il a été émis le 2e argument est la commande ctcp les 3e arguments sont les arguments eux-mêmes ctcp_reply activée par les réponses ctcp; le 1er argument est le pseudonyme ou le canal sur lequel il a été émis le 2e argument est la commande ctcp les 3e arguments sont les arguments eux-mêmes dcc_chat activée par le texte reçu pendant une discussion en ligne dcc le 1er argument est le pseudonyme le 2e argument est le texte dcc_disconnect activée lorsqu'une lecture ou une émission dcc est terminée ou fermée (même lorsque l'utilisateur en clôture une avec DCC CLOSE GET/SEND) le 1er argument est le pseudonyme associé à la discussion en ligne le 2e argument est le nom de fichier le 3e argument est le nombre de bytes transférés le 4e argument est nombre de secondes nécessaires au transfert dcc_request activée par la réception d'une discussion en ligne ou d'une demande d'émission; Ceci est le point d'insertion à utiliser si vous voulez mettre en oeuvre toute discussion auto-dcc. le 1er argument est le type "(DISCUSSION" ou "EMISSION") le 2e argument est l'adresse de la machine (un nombre entier 32 bits) le 3e argument est le port pour une proposition DCC SEND (émission DCC) : le 4e argument est le nom de fichier le 5e argument est la longueur du fichier disconnect activée par la perte de la connexion au serveur, ou l'interruption avec /déconnexion (mais pas avec le serveur). il n'y a pas d'arguments input * activée chaque fois que le client veut demander à l'utilisateur une ligne par &getuserline (c'est-à-dire lorsque vous avez été déconnecté, ou que vous avez besoin d'un nouveau pseudonyme, ou d'un script appelé &getuserline). le 1er argument est l'"invite" longue le 2e argument est l'"invite" courte si le point d'insertion définit $skip, &getuserline ne demandera ensuite rien à l'utilisateur, et le contenu de $_ will sera renvoyé invite activée par les invites; le 1er argument est le canal que vous avez invité join activée par les jonctions le 1er argument est le canal que joint $who (qui) kick activée par les (); le 1er argument est le pseudonyme ou la personne qui a été () le 2e argument est le canal d'où ils ont été (virés) le 3e argument est le motif leave activée par les (partants); le 1er argument est le canal que $who abandonne mode activée par les changements de modes; le 1er argument est le canal ou l'utilisateur auquel s'applique le changement le 2e argument est le changement de mode lui-même msg activée par les messages; le 1er argument est le message nick activée par les changements de pseudonymes le 1er argument est le nouveau pseudonyme de $who (qui) notice activée par les remarques le 1er argument est le pseudonyme ou le canal sur lequel il a été émis le 2e argument est le message server_notice activée par les remarques depuis les serveurs le 1er argument est le pseudonyme ou le canal sur lequel il a été émis le 2e argument est le message notify_signon activée par une ouverture de session le 1er argument est le pseudonyme $user et $host (utilisateur et hôte) ne sont *pas* définis de façon significative notify_signoff activée par une fermeture de session le 1er argument est le pseudonyme $user et $host ne sont *pas* définis de façon significative print * activée par l'édition d'une ligne quelconque à l'écran le 1er argument est la ligne à éditer ce point d'insertion est spécial (comme "état" et "commande"), en ce sens qu'il elle est clairement autorise à modifier son argument ($_[0]) pour changer la ligne à éditer la définitiion de $skip=1 dans le point d'insertion empêchera la ligne d'être réellement éditée public activée par les messages non-ctcp à un canal; le 1er argument est le canal le 2e argument est le message raw_irc * activée par une ligne du serveur $who est l'initiateur (utilisateur ou serveur) $user est sont nom d'utilisateur ('' s'il vient d'un serveur) $host est son nom d'hôte (même commentaire) le 1er argument est la commande les seconds arguments sont les arguments eux-mêmes send_action activée à l'émission d'un /me ou d'un /de ($who, $user et $host ne s'appliquent pas ici) le 1er argument est le pseudonyme/canal send_ctcp activée à l'émission d'un ctcp le 1er argument est le pseudonyme ou le canal sur lequel il a été émis le second argument est le texte complet ctcp (type et arguments) send_dcc_chat activée à l'émission du texte pendant une discussion en ligne dcc ($who, $user et $host ne s'appliquent pas ici) le 1er argument est le pseudonyme auquel nous émettons un message le second argument est le texte send_text activée à l'émission d'un /msg ou d'une communication sur un canal ($who, $user et $host ne s'appliquent pas ici) le 1er argument est le pseudonyme/canal le second argument est le message send_notice activée à l'émission d'une remarque ($who, $user et $host ne s'appliquent pas ici) le 1er argument est le pseudonyme/canal le second argument est la remarque signoff activée lorsque quelqu'un ferme une session le 1er argument est le commentaire de sortie status activée lorsque sirc reconfigure la ligne d'état (comme résultat de l'appel à &dostatus, soit de façon interne, soit par un script). le 1er argument est la ligne d'état proposée ce point d'insertion est spécial (comme "édition" et "commande")en ce sens qu'il est clairement autorisé à modifier son argument ($_[0]) pour changer ce qui devrait figurer sur la ligne d'état topic activée lorsque quelqu'un change de sujet le 1er argument est le canal le second argument est le nouveau sujet <3-digit nb> * activée par cette réponse numérique spéciale du serveur le 1er argument est tout ce que le serveur a émis après le nombre,et non analysé (qui signifie qu'il y a encore un caractère ":" devant le dernier argument |
Exemple, qu'est ce qui pourrait être placé dans un fichier et chargé directement, d'un point d'insertion qui joindra un canal chaque fois que vous serez (viré?) :
# auto-rejoin hook (point d'insertion (auto-jonction?)) sub hook_kicked { local($kicked, $where_from, $reason)=@_; # local vars with the args (variables locales avec les arguments) if (&eq($kicked, $nick)) { # if *we* got kicked (si *nous* sommes (virés?)) &sl("JOIN $where_from"); # send a JOIN to the server (envoie une jonction au serveur) } } &addhook("kick", "kicked"); # activate the hook (active le point d'insertion) |
Un autre exemple, pour afficher le nom d'utilisateur et le nom d'hôte avec chaque message (opération mieux réalisé avec /set printuh)
# userhost-on message (point d'insertion du message) sub hook_uhmsg { &tell("[\cb${who}!${user}\@${host}\cb] $_[0]"); # print everything (édite tout) $silent=1; # disable the default display (désactive la variable par défaut) } &addhook("msg", "uhmsg"); # activate the hook (active le point d'insertion) |