Anti-Flood TCL
#1
Bonjour, ce script est sensé kicker tout ceux qui floodent. Le soucis est que le robot kicke ceux qui floodent comme prévus, mais aussi, parfois ceux qui ne floodent pas (ça arrive régulièrement).
Je me demande où est le problème...

Voici mon script :
Code :
               proc checkflood { nick uhost hand chan text } {
                global Bot
                if {[onchan $nick $Bot(headchan)]} {return}
                if {![ismonitor $chan]} {return}
                if {![info exists ::Flood($nick)]} { set ::Flood($nick) 0; utimer 10 [unset ::Flood($nick)] }
                incr ::Flood($nick)
                putlog "$nick -> $::Flood($nick)"
                if {$::Flood($nick) == 10} {
                putlog "Kick de $nick pour $::Flood($nick) phrases"
                 set Mod(Reason) {
                 "Arrête de flinguer tes touches !"
                 "Doucement sur le bouton !"
                 "Respire entre tes phrases !"
                 "Laisse ton clavier reprendre son souffle !"
                 }
                 set desc [lindex $Mod(Reason) [rand [llength $Mod(Reason)]]]
                 putnow "KICK $chan $nick $desc"
                 unset ::Flood($nick)
                }
               }
Répondre Avertir
#2
J'imagine que ta procédure est appelée par un bind pub.
Il faudrait voir ce que donnent les putlog du script pour les utilisateurs qui ne devraient pas être kickés, mais à mon avis il y a peut-être un souci avec la ligne:
TCL
if {![info exists ::Flood($nick)]} { set ::Flood($nick) 0; utimer 10 [unset ::Flood($nick)] }



Petit nota: Pourquoi définir Mod(Reason) dans la procédure ? Il faut en faire une variable globale plutôt, ça ne sert à rien de redéfinir son contenu chaque fois que quelqu'un doit être kické.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté