Anti badword

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

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)