ANTI BADWORDS

cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008 - 14 août 2007 à 23:22
hisoka2501 Messages postés 264 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2009 - 18 janv. 2008 à 21:59
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/43771-anti-badwords

hisoka2501 Messages postés 264 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2009
18 janv. 2008 à 21:59
erreur ligne 129:
# if {%tdev != $nulm) { timer 1 %tdev mode # +v $nick }

$nulm ?

de plus écrit plutot:
if (!%tdev) .timer 1 %tdev mode $chan +v $nick

utilise $devent et réunis tes on *dialog

quand a ca:
# if (%badword == on) { did -c $dname 2 }

à éviter: remplace on par 1 pour oui et 0 pour non comme ca tu peu comparer avec un boléen ($true $false)et faire gagner du temp a ton script

# set %NbrMotPhrase $0
# set %NbrMotPhraseCompteur 1

nous donne: set %NbrMotPhrase $0 , %NbrMotPhraseCompteur 1
tu épargne alors une commande a mirc
ps: tu devrais éviter les accents dans les noms de variables (habitude a prendre)
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008
16 août 2007 à 13:50
bijour:)

Pour le "con" oui c'est sur qu'il faut bien parametrer ces detection pour eviter les dommages collateral, c'est bien pour ca que j'ai di que c'etait quelque chose à creuser. et d'ailleur je suis sur qu'il y a encore pas mal de suptilité qui pourraient etre évoquée.
pour le $istok je suis pas trop d'accord puisque à la base on cherche certe une presence d'un mot dans une phrase, mais c'est d'un mot parmis une liste donc faudrai mettre un while sur la liste avec $istok ce qui nous rammenerai à un systeme un peu lourd je pense.
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
16 août 2007 à 13:06
au lieu du regex, utilise plutôt $istok pour ne pas utiliser trop de ressources ^^
Anatolei Messages postés 27 Date d'inscription samedi 24 décembre 2005 Statut Membre Dernière intervention 31 janvier 2009
16 août 2007 à 09:13
Bonjour, je n'ai pas vraiment pris le temps de lire le post de départ, mais j'aimerais ajouter 2 choses concernant le dernier post de ISoKa.
1° Concernant le regex, je ne suis pas trop d'accord sur ça /(bw1|bw2|bw3)/i . En effet, admettons qu'il y ait dans la base de badword le mot "con", si on utilise ce regex, le mot content va faire réagir l'anti-badword, et je ne pense pas qu'avertir quelqu'un ayant dit "content" soit une bonne chose. Je recommande plutôt /\b(bw1|bw2|bw3)\b/i avec \b = Début ou fin de mot. Si quelqu'un à une autre idée je suis tout autant preneur =)
2° Concernant le goto pour sortir de la boucle. Un /break suffit pour sortir de la boucle, il faut y penser :)

Voilà ce qui m'a sauté aux yeux, maintenant si j'ai le temps de tout lire et que j'ai des choses à ajouter je posterais à nouveau.
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008
16 août 2007 à 05:12
comme j'avai 5min à tuer j'ai commencé un pti truc en faite dans ton devent sclick pour le $did == 6 si dedans tu mets :
var %i 1
while 900 <= $len( [ %bw $+ [ %i ] ] )) inc %i
; cette ligne sert a créer tes variables BW1, BW2 etc... pck la ;longueur des variables n'est pas infini donc si jamais ta liste ;devient longue sur une seule variable ca pourrai saturer.
if !%bw $+ [ %i ] set %bw $+ [ %i ]
$+($chr(47),$chr(40),$chr(41),$chr(47),i)
;crée la variable %bwx si elle existe pas
set %bw $+ [ %i ] $+($chr(47),$chr(40),$addtok($right($left( [ %bw $+ [ %i ] ] ),-3),-2),$did(5),124),$chr(41),$chr(47),i)
;rajoute le mot pour detecter dans la variable à l'arriver tes ;variables ressembleront normalement à /(bw1|bw2|bw3)/i


ca devrai te creer tes bases de detection en regex kom ca aprés dans ton on text te suffit de coller un truc du genre
var %i 1
while (%bw $+ [ %i ] ) {
;tant que bwx existe
var %j [ %bw $+ [ %i ] ]
;on stock %bwx dans %j pck par experience je me rappel que quand ;j'avai essayé de mettre sous la forme %bw $+ [ %i ] dans un regex ;ca merdouillai tjs
if ($regex($1-,%j)) { action | goto out }
;si regex validé alors tu fais tes action kom tu faisai avant sauf ;que là le mieux serai de te faire un alias que tu appelerai je ;pense pour avoir un code plus lisible et ensuite on sor du while
inc %i
;sinon on inc %i et on recommence
}
:out
ce qui serai kan mm plus leger que ton while initial :)
fin voila un truc à creuser koi j'pense :)
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
15 août 2007 à 21:31
doob666, poste donc ton snippet sur /timers ici, il est pas mal mais j'aimerai apporter des modifs parce qu'il est mal coder ;)
chris_c_mwa Messages postés 16 Date d'inscription samedi 4 février 2006 Statut Membre Dernière intervention 15 août 2007
15 août 2007 à 21:23
Vu et revu, peut-être mais pas plagié. Si je ne poste pas, comment savoir comment amélioré ma source ? ^^
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
15 août 2007 à 21:12
J'ai pas reelement vraiment regarder la source, ça ne m'interesse pas trop, j'ai juste vu ça dans le commentaire et j'ai voulu faire chier :p
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008
15 août 2007 à 21:00
lol mea culpa sur le regex pour le == 1 c clair que ct inutil mais bon ct pour ke ca soit plus simple puiskil ne connait pas idem pour la non prise en compte de la possibilité de //g. ensuite pour le BW ici BW représentai un badword genre BW1 = merde BW2 = con etc... donc je pense que ma facon de faire etait la bonne.
doob666 Messages postés 149 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 25 janvier 2011
15 août 2007 à 19:51
pourquoi n'ajoute tu pas un quick? (kick + ban de 5secondes) pour éviter les auto join on kick?? sinon c'est ... très très lourds, et puis déjà vu et revu, améliore, trouve de nouvelles idées pour l'améliorer. ajoute l'option pour faire subir la sentence aux halfops et ops!!! a bas la discrimination par le statut!! tout le monde doit suivre les mêmes règles et subir les même sentences!
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
15 août 2007 à 19:50
un regex = 1 si les conditions contenues dedans sont validée.

pas toujours si tu utilise /g, il peux retourné le nombre de fois de le pattern est matché
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
15 août 2007 à 18:28
ton regex est pas génial : tu ne vérifies pas que $1- commence sur BW et finisse sur un chiffre. Et puis enlève moi ce == 1 :(

if ($regex($1-,/^BW[0-4]$/i)) action

sinon j'ai pas eu le courage de lire le pavé :(
chris_c_mwa Messages postés 16 Date d'inscription samedi 4 février 2006 Statut Membre Dernière intervention 15 août 2007
15 août 2007 à 17:33
Euhm, merci je regarderais quand j'aurais le temps ce que je peux faire pour cela :)

Merci de ton aide et avis ^^
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008
15 août 2007 à 17:20
c'est bien que tu ais permi de configurer mieux ton systeme. Toutefois j'avai pas vu mais à mon avis ne met pas initié comme niveau de la source, les outils que tu utilise sont assez basiques (pas de htables,regex,dll etc...) et surtout la boucle sur chaque mot de la phrase...
Pour les htables, c'est vraiment simple. il te suffit de te creer ta htable ex : hmake 30 nom-de-ta-table
ensuite tu rajoutes ce que tu veux mettre dedans ex : hadd nom-de-ta-table nom-item tes-données
et ensuite tout peux se faire avec $hget ou $hfind.
ensuite pour les regex dans le cas qui t'interesse l'utilisation des regex est excessivement simple par raccourci quand j'ecri BW il faudra lire badword.
donc tu as BW1 BW2 BW3 BW4
il te suffit de faire un truc du genre
if ($regex($1-,/(BW1|BW2|BW3|BW4)/i)) == 1) { action }
pour expliquer ca :
un regex = 1 si les conditions contenues dedans sont validée. cad dans ce cas présent si BW1 ou BW2 ou BW3 ou BW4 est présent dans $1- alors actions. le "/ /i" est là pour dire qu'on s'en fou que ce soit des majuscules ou minuscules pck par défaut les regexs font la distinctions. de plus là j'ai mi :
if ($regex($1-,/(BW1|BW2|BW3|BW4)/i)) == 1) { action }
mais on peut tout aussi bien mettre
if ($regex($1-,%i) == 1) { action }
avec %i = /(BW1|BW2|BW3|BW4)/i
donc tu peux trés bien te créer des variables kom ca via ton dialog et ainsi tu traiterais la phrase dans son enssemble et abandonnerai ce while.
l'idéale aprés bien sur à mon avi c'est de mettre ca en htable genre tu crée ta htable BW dedans tu crée un items qui s'appelle BW1 et cet item contiendrai genre /(BW1|BW2|BW3...etc)/i
et t'aurai juste à appelé ces items via un $hget.
fin bon voila un peut kelkes idées.
dernier point tant que j'y pense :
pourquoi quand on enleve un BW de la liste tu efface tout ton txt pour tout réecrire dedans ? c'est pas trés élégant, tu ferais mieux de supprimer juste la ligne en question, ca serai moins lourd kom traitement. ou alors si tu y tiens vraiment à faire ca fais le au moins avec du file handling.
chris_c_mwa Messages postés 16 Date d'inscription samedi 4 février 2006 Statut Membre Dernière intervention 15 août 2007
15 août 2007 à 11:50
Bonjour. Merci pour ton commentaire. Cependant, j'ai pas allégé car j'ai jamais vraiment toucher aux regex et htables :/
En effet, pour ce qui est du temps, de la raison du kick etc je vais penser à l'amélioré.
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 octobre 2008
14 août 2007 à 23:22
Bonjour,
Je trouve ton systeme un peut lourd si jamais on es present sur de gros salons je toruve pas ca trop optimal. La boucle sur chaque mot de la phrase.... Pourquoi ne pas allerger tout ca ? Passer avec des regex et des Htables qui te ferai gagner enormement en vitesse d'execution. Pour conclure je trouve pas cette source super innovante vu qu'il y en a deja pas mal de anti badwords sur ce site. Essai de l'optimiser et de la rendre plus parametrable car tant qu'a faire un dialog, autant qu'on puisse parametrer au bout de combien de fois on kick,ban,devoice les phrases d'avert,kick,ban ainsi que la possibilité de mettre des exceptions genre le gros mot de la mort c ban direct fin bon voila.
Rejoignez-nous