====== Binds ====== Vous pouvez utiliser les [[:tcl:tcl_eggdrop:bind|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. ===== Introduction ===== ==== Binds empilables ==== {{:scripts:layer.png?nolink |}}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. ==== Suppression d'un bind ==== Pour supprimer un bind, utilisez la commande [[:tcl:tcl_eggdrop:unbind]]. Par exemple, pour supprimer le bind précédent, utilisez la commande `unbind msg - stop msg:stop`. ==== Masques de flags ==== Dans la liste des binds (et d'autres commandes, telles que [[:tcl:tcl_eggdrop:matchattr]]), vous verrez plusieurs références à l'argument [[:eggdrop: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". === Exemples de masques === ^ 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//. ===== Types de binds ===== ==== MSG ==== bind msg procname Utilisé pour les commandes `/msg`. Le premier mot du //msg// de l'utilisateur est la //command//, et tout le reste devient l'argument //text//. ==== PUB ==== bind pub procname Utilisé pour les commandes sur un canal. Le premier mot devient la //command// et tout le reste est l'argument //text//. ==== MSGM ==== {{:scripts:layer.png?nolink |}}bind msgm procname 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. * Si la procédure renvoie 1, Eggdrop n'enregistrera pas le message qui a déclenché ce bind. * Les binds MSGM sont traitées avant les bind MSG. * Si l'option //exclusive-binds// est activée, les binds MSG ne seront pas déclenchés par du texte qu'un bind MSGM a déjà traité. ==== PUBM ==== {{:scripts:layer.png?nolink |}}bind pubm procname 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 [[:faq:wildcards]]. * Si la procédure renvoie 1, Eggdrop n'enregistrera pas le message qui a déclenché ce bind. * Les binds PUBM sont traitées avant les bind PUB. * Si l'option //exclusive-binds// est activée, les binds PUB ne seront pas déclenchés par du texte qu'un bind PUBM a déjà traité. === Exemples === 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" ==== NOTC ==== bind notc procname //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. ==== DCC ==== bind dcc procname Utilisé pour les commandes [[:eggdrop:utilisation#party-line|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. ==== FIL ==== bind fil procname Identique à [[#DCC]] à l'exception près qu'il se déclenche si l'utilisateur est dans la zone des fichiers ==== JOIN ==== {{:scripts:layer.png?nolink |}}bind join procname 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. ==== PART ==== {{:scripts:layer.png?nolink |}}bind part procname 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. ==== SIGN ==== {{:scripts:layer.png?nolink |}}bind sign procname 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// ==== TOPC ==== {{:scripts:layer.png?nolink |}}bind topc procname 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. ==== KICK ==== {{:scripts:layer.png?nolink |}}bind kick procname 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. ==== NICK ==== {{:scripts:layer.png?nolink |}}bind nick procname 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// ==== MODE ==== {{:scripts:layer.png?nolink |}}bind mode procname 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. ==== CTCP ==== {{:scripts:layer.png?nolink |}}bind ctcp procname * //dest// est un pseudonyme (celui de l'eggdrop) ou un canal, * //keyword// est la commande **ctcp** qui peut contenir des wildcards, * //text// peut être vide. Si la procédure retourne 0, Eggdrop tentera de traiter la demande CTCP. ==== CTCR ==== {{:scripts:layer.png?nolink |}}bind ctcr procname Exactement comme [[#CTCP]] mais en réaction à une réponse de ctcp (ctcp dans une notice plutôt qu'un message privé) ==== RAW ==== {{:scripts:layer.png?nolink |}}bind raw procname 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. * Le //mask// peut contenir des wildcards et est comparé au mot-clé, qui est soit un chiffre, comme "368", soit un mot-clé, comme "PRIVMSG". * //from// sera le nom du serveur ou le pseudo source!ident@host (en fonction du mot-clé); * les //flags// sont ignorés. 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). ==== BOT ==== bind bot procname Réagit à un message en provenance d'un autre robot dans le [[:eggdrop:botnet]]. Le premier mot est la //command// et le reste devient l'argument //text//. Les //flags// sont ignorés. ==== CHON ==== {{:scripts:layer.png?nolink |}}bind chon procname 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. ==== CHOF ==== {{:scripts:layer.png?nolink |}}bind chof procname 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//. ==== SENT ==== {{:scripts:layer.png?nolink |}}bind sent procname Après qu'un utilisateur a téléchargé avec succès un fichier à partir du bot, ce bind est déclenché. //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 à [[:tcl:tcl_eggdrop:dccsend]], auquel cas le chemin est le chemin exact donné dans l'appel à **dccsend**).