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) |
| Précédent | Sommaire | Suivant |
| Programmation de votre Client Sirc | Niveau supérieur | Variables SET |