Anti-Frenzy par MenzAgitat
Catégorie : Sécurité - protection - modération
507 téléchargements
Description :
 
Description

Anti-Frenzy est une défense d'appoint pour votre chan.

Il peut être utilisé comme :
  • Un antiflood universel pouvant s'appliquer à des commandes n'en possédant pas.
  • Un antiflood complémentaire pour des commandes en possédant déjà un.
    Supposons par exemple que vous ayez réglé l'anti-flood de la commande !truc pour ne pas autoriser plus de 5 commandes en 3mn, donc rien n'empêche un utilisateur de taper 5 fois !truc en 1 seconde, ce qui n'est pas forcément une bonne chose.
    Il vous suffit de paramétrer Anti-Frenzy pour qu'il intervienne si la commande !truc est utilisée disons 2 fois en moins d'1 seconde.
  • Un antibadwords performant en bénéficiant de la puissance des expressions régulières (regexp).
  • D'autres utilisations auxquelles je n'ai pas pensé sont probablement envisageables, la souplesse et la puissance du système utilisé ouvre de nombreuses possibilités.

Anti-Frenzy permet d'appliquer une riposte graduée en plusieurs étapes.
Le nombre de ces étapes n'est pas limité et chaque étape peut combiner plusieurs actions (également appelées contre-mesures).
Par exemple la première étape peut consister à afficher un 1er avertissement et à dévoicer l'utilisateur, la seconde peut afficher un 2ème avertissement puis dévoicer/dehalfoper/déoper l'utilisateur, la troisième peut le kicker, la quatrième le bannir, etc...

Voici la liste des différentes actions possibles :
  • afficher un 1er message d'avertissement
  • afficher un 2ème message d'avertissement
  • dévoicer un utilisateur
  • déhalfoper un utilisateur
  • déoper un utilisateur
  • kicker un utilisateur
  • kicker + bannir un utilisateur
  • mettre des flags à un utilisateur pour empêcher qu'il puisse être halfopé ou opé par qui que ce soit à l'avenir + afficher un message pour l'en
    informer.
  • exécuter une ou plusieurs commandes Tcl (1er jeu de commandes)
  • exécuter une ou plusieurs commandes Tcl (2ème jeu de commandes)



Déclencheurs : syntaxe, explications, exemple détaillé

Pour configurer Anti-Frenzy, vous allez devoir définir une liste de déclencheurs.

Si vous souhaitez par exemple mettre un antiflood sur la commande !truc, vous avez le choix entre 2 solutions :
  • La première n'utilise pas les expressions régulières et nécessite de surveiller {!truc} et {!truc *} (pour reconnaître la commande avec ou sans arguments).
  • La seconde utilise les expressions régulières, ce qui est plus efficace et concis, mais aussi moins abordable pour ceux d'entre vous qui ne savent pas ce que c'est.
    Ça donnera par exemple {\!truc\M}.

Pour donner un autre exemple, nous voulons ajouter un antibadword sur quelques insultes courantes.
  • Sans utiliser les expressions régulières, nous allons devoir ajouter {connard} {* connard} {connard *} et {* connard *} pour prévoir tous les
    cas de figure (mot seul, mot en début de ligne, ...)
  • En utilisant les expressions régulières, nous ferons {\mcon+ard?s?\M}, ce qui reconnaîtra conard, connard, connards, connnnnnnnnnard, conar et
    encore tout un tas d'autres variantes orthographiques.
    La ligne suivante vous montre un autre exemple combinant plusieurs insultes sur une seule ligne pour plus d'efficacité :
    {\m(con+(ard?|as+e)s?|sal(aud|ope?)s?|pé?dé?s?)\M}

Les déclencheurs sont ajoutés manuellement dans le script selon la syntaxe suivante :
{{#chan} {mask} {num:sec} {regexp/noregexp} {f/b} {cm} {forgiveness_delay} {ignore_time} {ban_duration} {exempted_flags} {msg_mode:cible:warn1} {msg_mode:cible:warn2} {msg_mode:cible:flag_msg} {kick msg} {ban msg} {commande_1} {commande_2}}
  • #chan peut valoir le nom du chan sur lequel vous voulez que le déclencheur s'applique, ou peut valoir global si vous voulez que le déclencheur soit valable sur tous les chans sur lesquels Anti-Frenzy est actif.
  • mask contient le masque de détection. Vous pouvez utiliser des jokers (? *) ou des expressions régulières.
  • num:sec = "combien de fois maximum":"en combien de secondes". Détermine le nombre de fois qu'on tolère mask en un temps donné avant d'appliquer des contre-mesures. Peut valoir 0:0 auquel cas le déclencheur sera considéré comme un badword et les contre-mesures seront appliquées immédiatement à chaque déclenchement.
  • regexp/noregexp spécifie si le masque utilise des expressions régulières (regexp) ou non. Peut valoir regexp ou noregexp.
  • f/b indique si l'entrée doit être traitée comme antiflood (f) ou comme antibadword (b).
    La différence tient au fait qu'en mode antibadword, les CTCP ACTION (/me) sont également pris en considération, tandis qu'en mode antiflood ils ne le sont pas.
  • cm = contre-mesures. Voici une liste des contre-mesures disponibles : 
    • w1 = affiche le 1er message d'avertissement (warn1)
    • w2 = affiche le 1er message d'avertissement (warn2)
    • dv = devoice
    • dh = dehalfop
    • do = deop
    • k = kick
    • kb = kick+ban
    • f = flag : les flags -alo+dr sont appliqués sur le handle de l'user (qui est lui-même créé si nécessaire), puis il est déopé et déhalfopé.
      Les flags +dr ont pour effet d'empêcher le coupable d'être opé ou halfopé à l'avenir.
      Le message défini dans flag_msg sera affiché.
    • c1 = exécute une ou plusieurs commandes définies dans commande_1
    • c2 = exécute une ou plusieurs commandes définies dans commande_2
    Vous pouvez utiliser des combinaisons :
    • w1do = warn1 + deop
    • dodhdv = deop + dehalfop + devoice...
    Vous pouvez cumuler autant de contre-mesures que vous le souhaitez et les combiner comme bon vous semble : {w1 dodhdv k w2f kb}
  • forgiveness_delay = délai en secondes après lequel un niveau d'escalade des contre-mesures sera "pardonné".
    Admettons par exemple la liste de contre-mesures {w1 k kb} et un forgiveness_delay réglé à 60 secondes;
    si l'utilisateur vient d'être kické (c'est à dire à l'étape 2 des contre-mesures) et qu'il ne récidive pas dans les 60 prochaines secondes, le niveau redescendra à l'étape 1.
    S'il ne récidive toujours pas pendant les 60 secondes suivantes, il aura droit à l'oubli, sinon, on repassera à l'étape 2 et ainsi de suite.
    Si vous laissez ce champ vide, la valeur par défaut définie dans les paramètres du script sera utilisée.
  • ignore_time = nombre de secondes pendant lesquelles l'utilisateur sera ignoré après le déclenchement d'une contre-mesure.
    Ca peut être utile dans le cas d'un antiflood afin d'empêcher que de nombreuses commandes consécutives soient exécutées par le bot, mais aussi pour éviter que plusieurs étapes de contre-mesures soient passées d'un seul coup si l'utilisateur floode le déclencheur.
    Il est déconseillé de définir une valeur trop élevée car l'Eggdrop ne "voit" plus un utilisateur qu'il ignore et ce dernier a ainsi toute latitude pour faire des bêtises impunément.
    Si vous laissez ce champ vide, la valeur par défaut définie dans les paramètres du script sera utilisée.
  • ban_duration = durée du ban en secondes.
    Mettez 0 pour un ban permanent.
    Si vous laissez ce champ vide, la valeur par défaut définie dans les paramètres du script sera utilisée.
  • exempted_flags = flags utilisateurs qui seront exemptés pour ce déclencheur.
  • msg_mode:cible:warn1 et msg_mode:cible:warn2 sont les 2 messages d'avertissement correspondant aux contre-mesures w1 et w2.
    msg_mode peut valoir msg ou notice selon que vous souhaitez que le message soit envoyé normalement ou en notice.
    La cible du message doit être spécifiée et peut être un utilisateur ou un chan.
    Le message peut contenir ":" car seules les deux premières occurrences de ce symbole seront considérées comme un séparateur.
    Par exemple, pour afficher le message sur le chan on fera : {msg:$chan:attention, ceci est un message d'avertissement !}
    ou en privé à l'utilisateur : {msg:$nick:attention, te voilà averti}
    ou en notice à l'utilisateur : {notice:$nick:attention, te voilà averti}
    vous pouvez même envoyer une commande aux services : {ChanServ :[b]DEPROTECT $chan $nick}[/b]
  • msg_mode:cible:flag_msg contient le message qui sera affiché lors de l'application d'une contre-mesure de type f (flag).
    La syntaxe est similaire aux deux options {msg_mode:cible:warn1} et {msg_mode:cible:warn2} ci-dessus.
  • kick msg est le message de kick qui sera utilisé pour la contre-mesure k.
  • ban msg est le message de ban qui sera utilisé pour la contre-mesure kb.
  • commande_1 et commande_2 sont deux champs que vous pouvez utiliser pour exécuter une ou plusieurs instructions en Tcl.
    Ils correspondent aux contre-mesures c1 et c2.

Dans les messages (d'avertissement, de ban ou de kick) et dans les commandes,
vous pouvez utiliser les variables suivantes :
  • $nick = nom de l'utilisateur qui a activé le déclencheur
  • $handle = handle de l'utilisateur
  • $host = host de l'utilisateur
  • $chan = chan sur lequel le déclencheur a été activé


Exemple détaillé :

{{global} {!*} {2:3} {noregexp} {f} {w1do k kb} {60} {2} {600} {-|-} {msg:$chan:$nick > du calme avec les commandes} {} {} {tiens, prends ça !} {et ça !} {::set_access "Anti-Frenzy" $handle $chan $host -1} {}}

Explication de l'exemple :
  • La surveillance s'applique sur TOUS les chans sur lesquels Anti-Frenzy est actif (global).
  • Le masque de détection indique de surveiller toutes les commandes commençant par "!".
  • On autorise au maximum 2 commandes en 3 secondes.
  • Le masque de détection doit être traité comme du texte brut (pouvant contenir des jokers * ou ?) et non pas comme une expression régulière (noregexp).
  • Ce déclencheur aura une fonction antiflood (f).
  • 3 niveaux de contre-mesures sont ici prévus : la première transgression déclenchera un avertissement + déop de la personne (w1do), la deuxième déclenchera un kick (k) et la troisième un kickban (kb).
  • Le niveau d'escalade des contre-mesures décroitra d'une étape après 60 secondes.
  • L'utilisateur sera ignoré pendant 2 secondes par l'Eggdrop s'il active le déclencheur.
  • La durée d'un ban est fixée à 600 secondes.
  • Aucun flag utilisateur n'est exempté donc ce déclencheur est actif pour tout le monde.
  • En guise de 1er avertissement, le message suivant sera affiché sur le chan : "$nick > du calme avec les commandes" (où $nick sera remplacé par le nick de l'utilisateur concerné).
  • Le champ suivant est vide car nous ne l'utilisons pas, mais il est normalement destiné à accueillir un second message d'avertissement.
  • Le champ suivant est lui aussi vide, car il est destiné à accueillir un message qui s'afficherait en cas d'application de la contre-mesure "f".
  • Le champ suivant contient le message de kick.
  • Le champ suivant contient le message de ban.
  • L'avant-dernier champ contient une commande; dans cet exemple, on utilise le script Progressive Access System pour enlever 1 point d'accès à l'utilisateur (script du même auteur, à télécharger séparément).
  • Le dernier champ est vide car nous ne l'utilisons pas, mais il est normalement destiné à accueillir un 2ème jeu de commandes Tcl.



Expressions régulières : quelques bases pour commencer

( ) est utilisé pour délimiter une pattern
. correspond à n'importe quel caractère
+ correspond à "une fois ou plus" le caractère ou la pattern qui précède
* correspond à "zéro fois ou plus" le caractère / pattern qui précède
? correspond à "zéro fois ou une" le caractère / pattern qui précède
| séparateur signifiant "ou"
\m début de mot
\M fin de mot
\s correspond à un espace ou une tabulation
\ est aussi utilisé pour neutraliser certains caractères spéciaux comme le "." ou le "!", sans quoi ils auraient une signification spéciale dans le contexte de l'expression régulière.
^ représente début d'une ligne de texte
$ représente la fin d'une ligne de texte



Activation / désactivation du script

Pour activer Anti-Frenzy sur un chan en particulier, vous devez taper la ligne suivante en partyline de l'Eggdrop :
  .chanset #nomduchan +AntiFrenzy
et ceci pour le désactiver :
  .chanset #nomduchan -AntiFrenzy



Post support (remarques, suggestions, rapports de bugs) :

http://forum.eggdrop.fr/showthread.php?tid=412
 
Vous pouvez trouver une liste de mes autres releases ici
 

Changelog

Version 2.01 par MenzAgitat (08/06/2015)
260 téléchargements
   

Version 2.0 par MenzAgitat (05/12/2014)
56 téléchargements

Version 1.3 par MenzAgitat (10/08/2012)
161 téléchargements

Version 1.2 par MenzAgitat (13/07/2011)
30 téléchargements