cs_ISoKa
Messages postés435Date d'inscriptionjeudi 27 avril 2006StatutMembreDernière intervention17 octobre 2008
-
14 août 2007 à 23:22
hisoka2501
Messages postés264Date d'inscriptionlundi 19 mai 2003StatutMembreDerniè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.
hisoka2501
Messages postés264Date d'inscriptionlundi 19 mai 2003StatutMembreDerniè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és435Date d'inscriptionjeudi 27 avril 2006StatutMembreDernière intervention17 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és1287Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention21 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és27Date d'inscriptionsamedi 24 décembre 2005StatutMembreDernière intervention31 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és435Date d'inscriptionjeudi 27 avril 2006StatutMembreDernière intervention17 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és2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 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és16Date d'inscriptionsamedi 4 février 2006StatutMembreDernière intervention15 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és2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 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és435Date d'inscriptionjeudi 27 avril 2006StatutMembreDernière intervention17 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és149Date d'inscriptionvendredi 3 novembre 2006StatutMembreDernière intervention25 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és2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 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és1287Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention21 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és16Date d'inscriptionsamedi 4 février 2006StatutMembreDernière intervention15 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és435Date d'inscriptionjeudi 27 avril 2006StatutMembreDernière intervention17 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és16Date d'inscriptionsamedi 4 février 2006StatutMembreDernière intervention15 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és435Date d'inscriptionjeudi 27 avril 2006StatutMembreDernière intervention17 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.
18 janv. 2008 à 21:59
# 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)
16 août 2007 à 13:50
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.
16 août 2007 à 13:06
16 août 2007 à 09:13
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.
16 août 2007 à 05:12
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 :)
15 août 2007 à 21:31
15 août 2007 à 21:23
15 août 2007 à 21:12
15 août 2007 à 21:00
15 août 2007 à 19:51
15 août 2007 à 19:50
pas toujours si tu utilise /g, il peux retourné le nombre de fois de le pattern est matché
15 août 2007 à 18:28
if ($regex($1-,/^BW[0-4]$/i)) action
sinon j'ai pas eu le courage de lire le pavé :(
15 août 2007 à 17:33
Merci de ton aide et avis ^^
15 août 2007 à 17:20
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.
15 août 2007 à 11:50
En effet, pour ce qui est du temps, de la raison du kick etc je vais penser à l'amélioré.
14 août 2007 à 23:22
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.