Vous pouvez utiliser les binds pour associer des procédures Tcl à certains événements. Par exemple, vous pouvez écrire une procédure Tcl qui est appelée chaque fois qu'un utilisateur dit danger sur le canal. Lorsqu'un bind est déclenché, TOUTES les procs Tcl qui lui sont liées sont appelées.
Les binds raw sont déclenchés avant les binds construits, car un bind construit a le potentiel de modifier les arguments transmis.
Certains binds sont marqués comme “empilables” (stackable). Cela signifie que vous pouvez lier plusieurs commandes au même déclencheur. Normalement, par exemple, un bind tel que bind msg - stop msg:stop (qui fait en sorte qu'une commande msg “stop” appelle la procédure Tcl “msg:stop”) remplacera tout bind précédent que vous aviez pour la commande msg “stop”. Avec les binds empilables, comme msgm par exemple, vous pouvez lier la même commande à plusieurs procs.
Pour supprimer un bind, utilisez la commande unbind. Par exemple, pour supprimer le bind précédent, utilisez la commande unbind msg - stop msg:stop.
Dans la liste des binds (et d'autres commandes, telles que matchattr), vous verrez plusieurs références à l'argument Flags. L'argument flags est un masque de flag, qui est une valeur représentant le type d'utilisateur autorisé à déclencher la procédure associée à cette liaison. Les flags peuvent être n'importe lequel des flags standard d'Eggdrop (o, m, v, etc.). En outre, lorsqu'il est utilisé seul, un - ou un * peut être utilisé pour ignorer le traitement d'un type de flag.
Un masque de flags comporte trois sections : la section globale, la section du canal et la section des flags du bot. Chaque section est séparée par les opérateurs logiques | ou & (le | signifie “OR” et le & signifie “AND”); si rien ne précède le flag, Eggdrop considère qu'il s'agit d'un OR). En outre, un + et un - peuvent être utilisés devant un indicateur pour vérifier si l'utilisateur l'a (+) ou ne l'a pas (-).
La façon la plus simple d'expliquer comment construire un masque de drapeau est de le démontrer. Un masque de flag “v” signifie en soi a un drapeau v global. Pour vérifier également la présence d'un flag de canal, vous utiliserez le masque de drapeau “v|v”. Celui-ci vérifie si l'utilisateur possède un indicateur global “v” OU un indicateur de canal “v” (là encore, le | signifie “OR” et relie les deux types d'indicateurs). Vous pouvez modifier ce masque en “v&v”, ce qui permet de vérifier si l'utilisateur possède un indicateur “v” global ET un indicateur “v” de canal. Enfin, pour vérifier si un utilisateur possède UNIQUEMENT un drapeau de canal, vous pouvez utiliser “*|v” comme masque, qui ne vérifie pas les drapeaux globaux mais vérifie si l'utilisateur possède un drapeau de canal “v”.
| Masque | Effet |
|---|---|
| m, +m, m|* | Vérifie si l'utilisateur a le flag m global |
| +mn | Vérifie si l'utilisateur a le flag m OU n global |
| |+mn | Vérifie si l'utilisateur a le flag m OU n sur un canal |
| |+mn #foo | Vérifie si l'utilisateur a le flag m OU n sur le canal #foo |
| &+mn | Vérifie si l'utilisateur a le flag m ET n sur un canal |
| &mn #foo | Vérifie si l'utilisateur a le flag m ET n sur le canal #foo |
| |+o #foo | Vérifie si l'utilisateur a le flag o sur le canal #foo |
| +o|+n #foo | Vérifie si l'utilisateur a le flag o global OU n sur le canal #foo |
| +m&+v #foo | Vérifie si l'utilisateur a le flag m global ET v sur le canal #foo |
| -m | Vérifie si l'utilisateur n'a pas le flag m global |
| |-n #foo | Vérifie si l'utilisateur n'a pas le flag n sur le canal #foo |
| +m|-n #foo | Vérifie si l'utilisateur a le flag m global OU n'a pas le flag n sur le canal #foo |
| -n&-m #foo | Vérifie si l'utilisateur n'a pas le flag *n* global ET n'a pas le flag m sur le canal #foo |
| ||+b | Vérifie que l'utilisateur a le flag bot b |
Par ailleurs, les scripts Tcl ont longetmp utilisé un - pour ignorer le traitement d'un type de flag (exemple : -|o). On ne sait ni où ni pourquoi cette pratique a commencé, mais les développeurs d'Eggdrop recommandent d'utiliser un * pour ignorer le traitement, afin de ne pas confondre un simple - signifiant ignorer le traitement avec un -ov précédent qui signifie pas ces flags.
bind msg <flags> <command> <proc> procname <nick> <user@host> <handle> <text>
Utilisé pour les commandes /msg. Le premier mot du msg de l'utilisateur est la command, et tout le reste devient l'argument text.
bind pub <flags> <command> <proc> procname <nick> <user@host> <handle> <channel> <text>
Utilisé pour les commandes sur un canal. Le premier mot devient la command et tout le reste est l'argument text.
bind msgm <flags> <mask> <proc> procname <nick> <user@host> <handle> <text>
Fait correspondre toute la ligne de text d'un /msg avec le mask. Ceci est utile pour lier des procédures Tcl à des mots ou des phrases prononcés n'importe où dans une ligne de texte.
bind pubm <flags> <mask> <proc> procname <nick> <user@host> <handle> <channel> <text>
Exactement comme MSGM sauf qu'il est déclenché par ce qui est dit en canal et non pas en /msg. Le mask est composé du nom du salon et du text, et peut contenir des Wildcards.
bind pubm * "#eggdrop Hello*" myProc # Réagit à des lignes sur #eggdrops qui commencent par "Hello" bind pubm * "% Hello*" myProc # Réagit sur n'importe quel canal à une ligne qui commence par "Hello" bind pubm * "% !command" myProc # Réagit sur n'importe quel canal à une ligne qui ne contient QUE "!command"
bind notc <flags> <mask> <proc> procname <nick> <user@host> <handle> <text> <dest>
dest est un pseudonyme (celui de l'eggdrop évidemment) ou un nom de canal. mask est comparé à la ligne complète de la notice et peut contenir des wildcards. Si la proc retourne 1, Eggdrop n'enregistrera pas le message qui l'a déclenchée.
Les notices de serveur ne déclenchent pas le bind NOTC.
bind dcc <flags> <command> <proc> procname <handle> <idx> <text>
Utilisé pour les commandes partyline; la command est le premier mot et tout le reste devient l'argument text. L'idx est valide jusqu'à ce que l'utilisateur se déconnecte. Après cela, il peut être réutilisé, il faut donc faire attention à ne pas stocker un idx pendant de longues périodes.
bind fil <flags> <command> <proc> procname <handle> <idx> <text>
Identique à DCC à l'exception près qu'il se déclenche si l'utilisateur est dans la zone des fichiers
bind join <flags> <mask> <proc> procname <nick> <user@host> <handle> <channel>
Se déclenche lorsque quelqu'un entre sur un canal. Le mask est de la forme #channel nick!user@host et peut contenir des wildcards.
bind part <flags> <mask> <proc> procname <nick> <user@host> <handle> <channel> <msg>
Se déclenche lorsque quelqu'un quitte le canal. Le mask est de la forme #channel nick!user@host et peut contenir des wildcards.
S'il n'y a pas de message de /part, msg est une chaîne vide.
bind sign <flags> <mask> <proc> procname <nick> <user@host> <handle> <channel> <reason>
Déclenché lorsque quelqu'un se déconnecte, ou potentiellement lorsqu'un utilisateur est pris dans un netsplit et ne revient pas. Le message de déconnexion est le dernier argument de la procédure (reason). Le mask est de la forme #channel nick!user@host et peut contenir des wildcards.
Si * est utilisé pour le canal dans le mask, la procédure se déclenchera pour chaque canal que l'eggdrop et l'utilisateur avaient en commun. Pour ne déclencher qu'une seule fois indépendamment du nombre de canaux en commun, il faut utiliser le bind RAWT avec le mot-clé SIGN
bind topc <flags> <mask> <proc> procname <nick> <user@host> <handle> <channel> <topic>
Déclenché lors d'un changement de topic. Le mask peut contenir des wildcards et est comparé à #channel topic, topic étant le nouveau topic.
Ce bind est aussi déclenché lorsque Eggdrop entre sur un canal ET que le topic n'est pas vide.
bind kick <flags> <mask> <proc> procname <nick> <user@host> <handle> <channel> <target> <reason>
Déclenché lorsque quelqu'un est kické du canal. Le masque peut contenir des wildcards et est de la forme #channel target reason où target est l'utilisateur kické.
L'utilisateur qui déclenche la procédure est le kickeur.
bind nick <flags> <mask> <proc> procname <nick> <user@host> <handle> <channel> <newnick>
Déclenché lorsqu'un utilisateur change de pseudonyme. Le masque est de la forme #channel newnick et peut contenir des wildcards.
Si * est utilisé pour le canal dans le mask, la procédure se déclenchera pour chaque canal que l'eggdrop et l'utilisateur avaient en commun. Pour ne déclencher qu'une seule fois indépendamment du nombre de canaux en commun, il faut utiliser le bind RAWT avec le mot-clé NICK
bind mode <flags> <mask> <proc> procname <nick> <user@host> <handle> <channel> <mode-change> <target>
Les changements de mode sont découpés en chaque mode unique avant de déclencher le bind, donc mode-change sera toujours un seul mode comme +m ou -o. target contiendra l'argument du mode (pour o/v/b/e/l/k/I) ou “” si le mode ne prends pas d'argument. La réponse de l'eggdrop n'arrive qu'APRÈS que toutes les procédures liées aient été appelées. Le mask est de la forme #channel +/-mode et peut contenir des wildcards.
Si le mode est placé par le serveur, nick sera une chaîne vide, user@host sera le nom du serveur et handle sera *.
Le bind mode ne réagit qu'aux modes qu'eggdrop connaît nativement. Par exemple, un bind sur le mode +H ne se déclenchera pas.
bind ctcp <flags> <keyword> <proc> procname <nick> <user@host> <handle> <dest> <keyword> <text>
Si la procédure retourne 0, Eggdrop tentera de traiter la demande CTCP.
bind ctcr <flags> <keyword> <proc> procname <nick> <user@host> <handle> <dest> <keyword> <text>
Exactement comme CTCP mais en réaction à une réponse de ctcp (ctcp dans une notice plutôt qu'un message privé)
bind raw <flags> <mask> <proc> procname <from> <keyword> <text>
Bien qu'il ne soit pas nécessairement déprécié, ce bind a été supplanté par le bind RAWT, qui prend en charge les balises de message IRCv3, à partir de la version 1.9.0.
Si proc renvoie 1, Eggdrop ne traitera plus la ligne (ce qui peut provoquer un comportement inattendu dans certains cas), bien que les bind RAWT soient traités avant les bind RAW (et donc, un bind RAW ne peut pas bloquer un bind RAWT).
bind bot <flags> <command> <proc> procname <from-bot> <command> <text>
Réagit à un message en provenance d'un autre robot dans le Botnet. Le premier mot est la command et le reste devient l'argument text. Les flags sont ignorés.
bind chon <flags> <mask> <proc> procname <handle> <idx>
Réagit lorsque quelqu'un entre pour la première fois dans la party-line du bot via dcc chat ou telnet, ceci est déclenché avant qu'il ne soit connecté à un canal de chat (donc, oui, vous pouvez changer de canal dans un processus 'chon'). le mask est comparé à l'handle et supporte les wildcards.
Ceci n'est PAS déclenché lorsque quelqu'un revient de la zone de fichiers, etc.
bind chof <flags> <mask> <proc> procname <handle> <idx>
Déclenché lorsque quelqu'un quitte la partyline pour se déconnecter du bot. Le masque est comparé au handle et peut contenir des wildcards. Notez que la connexion peut déjà avoir été interrompue par l'utilisateur, donc n'envoyez pas de sortie à l'idx.
bind sent <flags> <mask> <proc> procname <handle> <nick> <path/to/file>
Ce bind est déclenché après qu'un utilisateur a téléchargé (download) avec succès un fichier à partir du bot. mask est comparé à l'handle de l'utilisateur qui a lancé le transfert et peut contenir des wildcards. nick est le destinataire (sur IRC) du fichier. Le chemin est relatif au répertoire dcc (sauf si le transfert de fichier a été lancé par un appel de script à dccsend, auquel cas le chemin est le chemin exact donné dans l'appel à dccsend).
bind rcvd <flags> <mask> <proc> procname <handle> <nick> <path/to/file>
Ce bind est déclenché après qu'un utilisateur a téléversé (upload) avec succès un fichier vers l'eggdrop. mask est comparé à l'handle de l'utilisateur qui a lancé le transfert et peut contenir des wildcards. nick est l'émetteur (sur IRC) du fichier. Le chemin est le répertoire où est déposé le fichier, relatif au répertoire dcc.
bind chat <flags> <mask> <proc> procname <handle> <channel#> <text>
Déclenché lorsqu'un utilisateur parle sur le botnet. Les flags sont ignorés. L'handle peut être l'utilisateur sur l'eggdrop (DronePup) ou sur un autre eggdrop (Eden@Wilde) et dans ce cas là vous ne pouvez pas faire le lien avec un utilisateur local. Le mask est comparé à la ligne entière de texte et accepte les wildcards. Eggdrop transmet le numéro de canal de partyline dans lequel l'utilisateur parle dans la variable channel#.
Si un BOT parle en botnet, c'est le bind BSCT qui est invoqué.
bind link <flags> <mask> <proc> procname <botname> <via>
Déclenché lorsqu'un eggdrop se connecte au botnet. botname est le botnet-nick de l'eggdrop se connectant, via est le bot à travers lequel il rejoint le botnet. Le mask est comparé au botnet-nick du bot qui se connecte et supporte les wildcards. Les flags sont ignorés.
bind disc <flags> <mask> <proc> procname <botname>
Déclenché lorsqu'un eggdrop se déconnecte du botnet quelle qu'en soit la raison. Comme pour le link, les flags sont ignorés, mask est comparé au botnet-nick de l'eggdrop déconnecté et supporte les wildcards.
bind splt <flags> <mask> <proc> procname <nick> <user@host> <handle> <channel>
Déclenché lorsqu'une personne sort du canal sur un netsplit. Ceci peut provoquer des faux-positifs (il est facile de faire un faux message de netsplit). mask est comparé à “#channel nick!user@host” et peut contenir des wildcards. Toute personne qui déclenche ce bind déclenchera aussi REJN ou SIGN pendant la durée de wait-split
bind rejn <flags> <mask> <proc> procname <nick> <user@host> <handle> <channel>
Déclenché lorsqu'une personne revient après un split. mask est comparé à “#channel nick!user@host” et peut contenir des wildcards.
bind filt <flags> <mask> <proc> procname <idx> <text>
La party-line et le système de fichiers utilisateurs ont leur texte envoyé dans filt avant d'être traité. mask est un masque de texte pouvant contenir des wildcards et utilisé pour faire correspondre le texte envoyé en party-line. Si la procédure renvoie une chaîne vide, le texte continue d'être analysé tel quel. Sinon, le bot utilisera à la place le texte renvoyé par la procédure pour poursuivre l'analyse.
bind need <flags> <mask> <proc> procname <channel> <type>
Ce bind est déclenché sur certains évènements, par exemple lorsque l'eggdrop a besoin du status d'opérateur ou d'une clé pour rejoindre un canal. Les types sont op, unban, invite, limit et key. Le mask est comparé à “#channel type” et peut contenir des wildcards. Les flags sont ignorés.
bind flud <flags> <mask> <proc> procname <nick> <user@host> <handle> <type> <channel>
Tout flood détecté à travers les réglages de contrôle de flood (comme flood-ctcp) déclenchent ce bind avant tout autre process. Si la procédure retourne 1, aucune action n'est effectuée ensuite. Si la procédure retourne 0, l'eggdrop punira normalement pour le flood. Les types de flood sont pub, msg, join ou ctcp, et il est possible d'utiliser *. Les flags sont ignorés.
bind note <flags> <mask> <proc> procname <from> <to> <text>
Les notes entrantes (provenant soit de la party-line, soit d'un utilisateur IRC, soit d'un autre bot du botnet) sont traitées par ce bind avant de suivre leur processus normal. Le mask est comparé au handle du destinataire et peut contenir des wildcards. Si la procédure renvoie 1, eggdrop ne traitera pas la note. Les flags sont ignorés.
bind chanset <flags> <mask> <proc> procname <chan> <setting> <value>
Déclenché lorsqu'un paramètre de canal est défini via la partyline. flags est ignoré, mask est le nom du paramètre de canal (sans préfixe +/-) et peut contenir des caractères génériques. La procédure sera appelée avec le canal sur lequel le paramètre a été défini, le nom du paramètre qui a été modifié et la valeur à laquelle il a été défini (0/1 pour -/+, chaîne de caractères ou valeur formatée X:Y).