Eggdrop & Tcl

Base de connaissances eggdrop et tcl

Outils pour utilisateurs

Outils du site


scripts:binds

Binds

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.

Introduction

Binds empilables

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 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 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”.

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 <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.

PUB

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.

MSGM

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.

  • 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

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.

  • 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 <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.

DCC

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.

FIL

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

JOIN

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.

PART

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.

SIGN

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

TOPC

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.

KICK

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 reasontarget est l'utilisateur kické.

L'utilisateur qui déclenche la procédure est le kickeur.

NICK

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

MODE

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.

CTCP

bind ctcp <flags> <keyword> <proc>
procname <nick> <user@host> <handle> <dest> <keyword> <text>
  • 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

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é)

RAW

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.

  • 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 <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.

CHON

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.

CHOF

bind chof <flags> <mask> <proc>
procname <handle> <idx>
scripts/binds.txt · Dernière modification : 2024/01/31 17:30 de CrazyCat