Anti badword

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 583 fois - Téléchargée 19 fois

Contenu du snippet

Bonjour à tous,

Voici une de mes sources IRC scriptée en MSL. C'est, comme le titre l'indique, un anti-badword. C'est a mettre sur un bot. Il y a plusieurs choses de modifiables :
- Le nombre d'avertissement avec le kick/ban (Chaque avertissement est affiché sur le channel à l'aide de la commande 'describe')
- Le temps avant que le bot retire le ban
- L'ajout de mots 'interdits'
- Le retrait de mots 'interdits'

Qu'est ce qu'un anti-badword ? C'est tout simplement un script qui à pour but de controler ce que dise les gens sur votre canal. Si par exemple vous ne voulez pas autoriser le mot "tomate" et bien vous le rentré dans la liste ;)

Pour le controler, j'utilse le system d'user intégré a mIRC. Vous pouvez facilement modifié cela par ce que vous voulez ;) J'ai aussi intégré un antispam pour que le bots ne soit pas trop flooder.

Listes des comandes utilisables :
- $badword on|off|status (Active, désactive, et renvoie le status)
- $badword add <mot ou phrase interdit> (vous pouvez par exemple mettre : *idle*)
- $badword del <mot ou phrase interdit>
- $badword list (Donne la liste des mots interdits)
- $badword warn <nombre> (De 0 à 999999...) (pas trop gros qd mêmes ;))
- $badword banlenght <nombre en secondes> (genre 600 = 10minutes)

Sans plus attendre, voici la source :

Source / Exemple :


on *:LOAD:{
  set %trigger.badword $chr(36) $+ badword
}

alias trim {
  var %a $1-
  while ($left(%a, 1) == $chr(32)) {
    var %a $right($1-, -1)
  }
  while ($right(%a, 1) == $chr(32)) {
    var %a $left($1-, -1)
  }
  return %a
}

on *:TEXT:*:#:{
  if ($ulevel >= 5) && (!%badword. [ $+ [ $chan ] ]) {
    if ($1 == %trigger.badword) {
      if ($2 == on) {
        writeini -n channel.ini $chan bw on
        notice $nick Badword check has been enabled for $chan
        set -u2 %badword. [ $+ [ $chan ] ] 1
      }
      elseif ($2 == off) {
        remini -n channel.ini $chan bw
        .notice $nick Badword check has been disabled for $chan
        set -u2 %badword. [ $+ [ $chan ] ] 1
      }
      elseif ($2 == status) {
        notice $nick Badword check is currently $iif($readini(channel.ini,$chan,bw) == on,enabled,disabled) for $chan
        notice $nick Badword warning is set to $readini(channel.ini,$chan,bw.warn) - Badword ban lenght is set to $readini(channel.ini,$chan,bw.lenght) sec(s)
        notice $nick Badword list: $iif(!$readini(channel.ini,$chan,bw.list),<empty>,$readini(channel.ini,$chan,bw.list))
        set -u5 %badword. [ $+ [ $chan ] ] 1
      }
      elseif ($2 == warn) && ($3 isnum 0-) && (1 // $3) {
        writeini -n channel.ini $chan bw.warn $3
        .notice $nick Badword warning has been set to $3 for $chan
        set -u2 %badword. [ $+ [ $chan ] ] 1
      }
      elseif ($2 == banlenght) && ($3 isnum 0-) && (1 // $3) {
        writeini -n channel.ini $chan bw.lenght $3
        .notice $nick Badword ban lenght has been set to $3 seconde(s) for $chan
        set -u2 %badword. [ $+ [ $chan ] ] 1
      }
      elseif ($2 == add) && (!$findtok($readini(channel.ini,$chan,bw.list),$3,1,59)) {
        writeini -n channel.ini $chan bw.list $addtok($readini(channel.ini,$chan,bw.list),$3-,59)
        notice $nick $3- has been added to the badword list
        set -u2 %badword. [ $+ [ $chan ] ] 1
      }
      elseif ($2 == del) && ($findtok($readini(channel.ini,$chan,bw.list),$3-,1,59)) {
        if ($numtok($readini(channel.ini,$chan,bw.list),59) == 1) { remini -n channel.ini $chan bw.list | notice $nick Badword list of $chan is now empty! }
        else { 
          writeini -n channel.ini $chan bw.list $remtok($readini(channel.ini,$chan,bw.list),$3-,1,59)
          notice $nick $3- has been deleted from the badword list
          set -u2 %badword. [ $+ [ $chan ] ] 1
        }
      }
      elseif ($2 == list) {
        $readini(channel.ini,$chan,bw.list)
        notice $nick Badword list of $chan : $iif(!$readini(channel.ini,$chan,bw.list),<empty>,$readini(channel.ini,$chan,bw.list))
        set -u2 %badword. [ $+ [ $chan ] ] 1
      }
    }
  }
  elseif ($readini(channel.ini,$chan,bw) == on) {
    var %a 1
    while (%a <= $numtok($readini(channel.ini,$chan,bw.list), 59)) {
      if ($trim($gettok($readini(channel.ini,$chan,bw.list), %a, 59)) iswm $1-) {
        inc -u3600 %badword.warnings. [ $+ [ $nick ] ]
        if (%badword.warnings. [ $+ [ $nick ] ] > $readini(channel.ini,$chan,bw.warn)) {
          if ($nick isop $chan) mode $chan -o $nick
          ban $iif($readini(channel.ini,$chan,bw.lenght), -u [ $+ [ $readini(channel.ini,$chan,bw.lenght) ] ]) $chan $nick 1
          kick $chan $nick I told you not to talk bullshit!
          unset %badword.warnings. [ $+ [ $nick ] ]
          break
        }
        else {
          describe $chan warns $nick about the Badwords! Warnings: %badword.warnings. [ $+ [ $nick ] ] $+ / $+ $readini(channel.ini,$chan,bw.warn) $iif(%badword.warnings. [ $+ [ $nick ] ] == $readini(channel.ini,$chan,bw.warn),Next time -> ban!)
          break
        }
      }
      inc %a
    }
  }
}

on *:ACTION:*:#:{
  if ($readini(channel.ini,$chan,bw) == on) {
    var %a 1
    while (%a <= $numtok($readini(channel.ini,$chan,bw.list), 59)) {
      if ($trim($gettok($readini(channel.ini,$chan,bw.list), %a, 59)) iswm $1-) {
        inc -u3600 %badword.warnings. [ $+ [ $nick ] ]
        if (%badword.warnings. [ $+ [ $nick ] ] > $readini(channel.ini,$chan,bw.warn)) {
          if ($nick isop $chan) mode $chan -o $nick
          ban $iif($readini(channel.ini,$chan,bw.lenght), -u [ $+ [ $readini(channel.ini,$chan,bw.lenght) ] ]) $chan $nick 1
          kick $chan $nick I told you not to talk bullshit!
          unset %badword.warnings. [ $+ [ $nick ] ]
          break
        }
        else {
          describe $chan warns $nick about the Badwords! Warnings: %badword.warnings. [ $+ [ $nick ] ] $+ / $+ $readini(channel.ini,$chan,bw.warn) $iif(%badword.warnings. [ $+ [ $nick ] ] == $readini(channel.ini,$chan,bw.warn),Next time -> ban!)
          break
        }
      }
      inc %a
    }
  }
}

Conclusion :


Ce script est notament utilisé sur les bots gratuits de #pwnd.bots @ irc.quakenet.org
J'ai décidé de le publié et je publierais surement d'autre script encore un peu plus 'délicats' par la suite.

J'attends vos commentaires avec impatience.

Cordialement, Quentin

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
25 mai 2007

Salut,

J'ai un petit soucis ( peut être que c'est normal ) mais je penses pas. ^^
Alors j'ai ajouté comme insultes "fdp;tg;ntm;noob;ftg;lama" et dans la fenêtre Quakenet je trouve comme erreur "FDP;TG;NTM;NOOB;FTG;LAMA Unknown command"

Quelq'un peut-il m'aidé ? Merci d'avance

xEns.
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
oui oui j'ai vu ensuite, c'est la drogue ça
Messages postés
1287
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
21 février 2009

Wims, la configuration se fait avec $badword (cf la première partie du ON TEXT)
Messages postés
3
Date d'inscription
dimanche 10 octobre 2004
Statut
Membre
Dernière intervention
8 avril 2007

Ok, le seul problème c'est que je me suis pas encore trop penché sur les hash tables, c'est pourquoi j'ai préféré utiliser des variables globales.

Wins: il manque un alias badword O_o ?
Messages postés
1287
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
21 février 2009

Il aurait été plus simple de /hload ton .ini au démarrage (et à chaque changement) et de boucler sur le nombre de mots puis d'utiliser $hmatch(table,mot,0)

Tu devrais aussi faire un alias pour ne pas répéter ton ON ACTION et ON TEXT (la partie qu gère le bouclage). Ca donnerait untruc du genre :


alias -l checkword {
var %n $1, %c $2, %a = 3, %p = $+(taTable,c)
if ($readini(channel.ini,%c,bw) != on) return
if (!$hget(%p)) hload -i %p channel.ini %c
while %a <= $0 {
if ($hmatch(%p,$gettok($1-,%a,32),0)) {
inc -u3600 %badword.warnings. [ $+ [ %n ] ]
if (%badword.warnings. [ $+ [ %n ] ] > $readini(channel.ini,%c,bw.warn)) {
ban $iif($readini(channel.ini,%c,bw.lenght),$+(-ku,$readini(channel.ini,%c,bw.lenght)),-k) %c %n I told you not to talk bullshit!
unset %badword.warnings. [ $+ [ %n ] ]
}
else describe %c warns %n about the Badwords! Warnings: %badword.warnings. [ $+ [ %n ] ] $+ / $+ $readini(channel.ini,%c,bw.warn) $iif(%badword.warnings. [ $+ [ %n ] ] == $readini(channel.ini,%c,bw.warn),Next time -> ban!)
break
}
inc %a
}
}
on *:ACTION:*:#:checkword $nick $chan $1-

Tu devrais utiliser 1 et 0 pour les valeurs de $readini(channel.ini,$chan,bw), ça simplifierait vraiment la code (vu que c'est booléen) :)

Essaye d'utiliser un peu plus les hash tables et moins de variables globales
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (cs_Blad3)