Rajouter un ban au troisième kick
#1
Bonjour à tous ,

Voila j'ai trouvé un tcl antibadwords plutot simple à comprendre pour moi dont voici la source : Anti Bad Words

J'ai modifier le code pour intégrer une fonction pour que certaine personne ne soit pas kick par le bot. Voici le code modifié :
tcl
set vhostexempt {
 *Root@domain.tld
 *@TechAdmin.domain.tld
 *@autant.de.vhost.que.vous.voulez
}
 
set badwords {
 les
 badwords
 ici
 de
 cette
 façon
}
 
bind pubm -|- * bad:words
proc bad:words {nick host hand channel text} {
 global badwords vhostexempt
 set bad ""
 foreach element $badwords {
   foreach element1 $text {
 if {$element1 == $element} {
set bad "$element"
   break
   }
}
 }
 if {$bad != ""} {
   set vichost [getchanhost $nick $channel]
   set protec 0
   foreach vhost $vhostexempt {
     if { [string match -nocase $vhost $vichost] } {
       set protec 1
     }
   }
   if { $protec == 1 } {
     return 0
     } else {
     putkick $channel $nick "\00312Merci de surveiller votre language !!"
     }
  }
}


Il fonctionne très bien mais je voudrais rajouter une fonction qui ban l'user au troisième kick mais voila je ne sais absolument pas comment mi prendre.
Serait t'il possible d'être aiguillé dans la bonne direction de façon a ce que je puisse arrivé à mes fins.
Merci d'avance pour votre aide future.

Bien à vous.

Bye.
Répondre Avertir
#2
Jette un oeil à https://forum.eggdrop.fr/Anti-Frenzy-%28...t-412.html
Ce script fait également office d'antibadwords et te permet de définir une riposte graduée comme tu le souhaites (par exemple avertissement -> kick -> kick -> kickban).
Répondre Avertir
#3
ok merci pour ce script mais je doit avouer que je ni comprend rien je suis loin de votre niveau et au namespace je ne comprend rien du tout au point que je ne vois même pas ou regarder sur le script pour tenter de finaliser mon code :/

Mais merci a toi tout de même :)
Répondre Avertir
#4
Personne pour m'aiguiller sur quelque chose de plus "simple" à comprendre pour un petit codeur comme moi ?

Merci d'avance.

Bye.
Répondre Avertir
#5
Bonsoir,

Je ne demande pas que l'on me fasse le code je demande juste que l'on m'aiguille sur un code plus simple que je comprenne comment faire se que je désire.

Peut-on m'aider pour cela ?

Merci d'avance.

Bye.
Répondre Avertir
#6
Le script que je proposais faisait déjà tout ce que tu veux faire mais si le but est de le faire toi-même en vue d'apprendre, alors voici par exemple ce que tu peux faire :
- Stocker dans un dict les hosts des utilisateurs qui sont kickés, avec un compteur que tu incrémenteras (avec dict incr) à chaque nouveau kick
- Lorsqu'un kick est appliqué, chercher dans le dict si on a déjà enregistré ce host
   - si oui
      - si compteur < 3 on l'incrémente
      - si compteur >= 3 on bannit l'utilisateur et on supprime l'entrée du dict (puisqu'elle n'est plus utile une fois l'utilisateur banni et doit donc se réinitialiser)
   - si non : on ajoute le host dans le dict et on définit le compteur à 1
Répondre Avertir
#7
ok merci pour ces infos je vais voir le lien tenter de comprendre et revenir vers vous avec se dont j'ai pu réussir a faire ou non

Merci :)

EDIT : Voila se que j'ai fait pour le moment c'est pas grand chose mais c'est la première fois que je fait ça (il y a un début à tout lol) je vais i allez étape par étape pour bien comprendre
tcl
set base(ban) "chemin/de/ma/base/des/host/enregistré.txt"
 
proc banraison { nick host hand channel text } {
  global cs chanlog exempt unban base
  set args [split $text]
  set victim [lindex $args 0]
  set reason [join [lrange $args 1 end]]

#ici j'ouvre ma base de donnée
  set fp [open $base(ban) a]
#la j'enregistre dedans
  puts $fp "je ne sais pas comment enregistrer une vhost dans un fichier ni comment agrémenter un compteur"
#la je la ferme
  close $fp
 
  if { ![onchan $victim $channel] } {
    putserv "PRIVMSG $channel :\0034$victim \00312n'est pas là \0037$nick"
	return 0
  }
  set vichost [getchanhost $victim $channel]
  set protec 0
  foreach vhost $exempt(vhost) {
	if { [string match -nocase $vhost $vichost] } {
	  set protec 1
	}
  }
  if { $protec == 1 } {
    putserv "NOTICE $nick :$exempt(reason)"
    } else {
    putserv "PRIVMSG $cs ban $channel $victim $reason"
    putserv "PRIVMSG $chanlog :\0034$victim \00312a été bannie de \0034$channel \00312par \0034$nick \00312pour la raison :\0037 $reason"
    timer $unban(time) [list putserv "mode $channel -b $victim"]
  }
}


Déjà est ce que je commence bien ou pas ? je m'excuse d'avance se poste risque d'être un peu long...
Ais-je bien placer mon "set" pour ouvrir ma base de donnée ?
Ais-je oublié quelque chose d'important ?

Bien à vous.
Répondre Avertir
#8
Bonjour, je vient de me rendre compte que mon poste précédent n'était pas le bon code tcl je m'en excuse. Donc voila ou j'en suis actuellement et j'aimerais de l'aide pour réaliser se que je souhaite
tcl
set base(ban) "chemin/de/ma/base/des/host/enregistré.txt"
set vhostexempt {
 *Root@domain.tld
 *@TechAdmin.domain.tld
 *@autant.de.vhost.que.vous.voulez
}
 
set badwords {
 les
 badwords
 ici
 de
 cette
 façon
}
 
bind pubm -|- * bad:words
proc bad:words {nick host hand channel text} {
 global badwords vhostexempt base
 set bad ""
 foreach element $badwords {
   foreach element1 $text {
 if {$element1 == $element} {
set bad "$element"
   break
   }
}
 }
 if {$bad != ""} {
 
#ici j'ouvre ma base de donnée
  set fp [open $base(ban) a]
#la j'enregistre dedans
  puts $fp "je ne sais pas comment enregistrer une vhost dans un fichier ni comment agrémenter un compteur"
#la je la ferme
  close $fp
 
   set vichost [getchanhost $nick $channel]
   set protec 0
   foreach vhost $vhostexempt {
     if { [string match -nocase $vhost $vichost] } {
       set protec 1
     }
   }
   if { $protec == 1 } {
     return 0
     } else {
     putkick $channel $nick "\00312Merci de surveiller votre langage !!"
     }
  }
}


Donc suis-je sur la bonne voix ?
Ais-je oublié quelque chose avant ?
Comment enregistre t'on des vhost dans une base de donnée et comment on agrémente un compteur ?

Merci d'avance .

Bye.
Répondre Avertir
#9
J'ai juste survolé ce que tu as fait...
tcl
foreach element $badwords {
   foreach element1 $text {
      if {$element1 == $element} {
         set bad "$element"
         break
      }
   }
}


Tu peux simplifier:
tcl
foreach word $text {
   if { [lsearch -nocase $badwords $word] } {
      set bad $word
   }
}


Ensuite, pourquoi stocker dans une base de données (ou un fichier) ? Pourquoi ne pas utiliser la userlist de l'eggdrop ? Ca permettrait en plus d'avoir le script fonctionnel sur différents canaux, et de mieux gérer les utilisateurs et les kick/ban
Répondre
#10
oui c'est une proposition plutôt intéressante mais je ne sais absolument pas comment faire ça :/
Vas me falloir un gros coup de main sur se coup la...

Merci d'avance.

Bye.
Répondre Avertir


Atteindre :


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