uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011
-
1 oct. 2007 à 16:56
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 2010
-
5 oct. 2007 à 18:15
Bonjour, alors voila, pour mon bot, je voulais mettre un anti flood. au bout de X temps (après bien des heures de galere) j'ai enfin trouvé une solution qui marche a 100%.
Seul hic : le code est très moche ! J'utilise une regexp qui détecte s'il y a 5 fois (ou plus, donc) le même caractère dans la derniere phrase dite sur le salon. Et en fait je voulais savoir si quelqu'un avait une autre méthode beaucoup plus jolie niveau codage.
Voici le code :
sub on_public {
my ($conn,$event) = @_;
my $text = $event->{'args'}[0];
my @channel = $event->to;
my $nick = $event->nick;
if ($text =~ /(a{5,}|b{5,}|c{5,}|d{5,}|e{5,}|f{5,}|g{5,}|h{5,}|i{5,}|j{5,}|k{5,}|l{5,}|m{5,}|n{5,}|o{5,}|p{5,}|q{5,}|r{5,}|s{5,}|t{5,}|u{5,}|v{5,}|w{5,}|x{5,}|y{5,}|z{5,}|0{5,}|1{5,}|2{5,}|3{5,}|4{5,}|5{5,}|6{5,}|7{5,}|8{5,}|9{5,}|ù{5,}|é{5,}|è{5,}|ç{5,}|à{5,})/i) {
$conn->privmsg(@channel,"Evite le flood, $nick. (" . substr($1,0,3) . ")");
return;
}
if ($text =~ /([[:upper:].*]{5,})/) {
$conn->privmsg(@channel,"Evite les majuscules, $nick.");
}
if ($text =~ /([[:punct:]]){5,}/) {
$conn->privmsg(@channel,"Evite le flood de ponctuation, $nick. (" . substr($1,0,3) . ")");
}
}
Panthouffle
Messages postés281Date d'inscriptionjeudi 21 juillet 2005StatutMembreDernière intervention14 avril 2008 1 oct. 2007 à 18:59
ton code est complètement incompréhensible, mais c'est clair qu'il est simplifiable (en regex) ^^, me connaissant pas assez en regex je ne pourrai pas t'aider
cs_ISoKa
Messages postés435Date d'inscriptionjeudi 27 avril 2006StatutMembreDernière intervention17 octobre 2008 1 oct. 2007 à 20:12
Bonjour,
Y a ca qui est pas mal (c pas de moi mais je sai plus ki a fai ca)
alias isfloodChr {
var %n $iif($2,$2,10) - 1,%r (.)\1 $+ $chr(123) $+ %n $+ $chr(125)
return $regex($$1,%r)
}
tu fais $isfloochr(texte) et tu verras c sympa aprés te suffit juste d'adapter pour ton truc.
Après, le seul soucis est que le code de uaip n'est pas du mirc, surement du tcl.
Il est vrai que rien ne lui empeche de reproduire le snippet dans le bon langage
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 1 oct. 2007 à 21:29
Panthouffle, bah le code utilise deja 3 regexp, mais c'est clair qu'elles sont trop longues...
ensuite, oui désolé, j'ai oublié de préciser que c'était du Perl (mais on est dans la catégorie IRC eggdrop, donc les bots en Perl ne sont pas hors-sujet), merci wims je vais aller voir ces liens, par contre ce qui m'ennuie, c'est que (je sais pas pourquoi) les comms sont coupés, et j'ai seulement la moitié de vos phrases
Honorine <3 /°/ www.uaipcreations.ovh.org
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_ISoKa
Messages postés435Date d'inscriptionjeudi 27 avril 2006StatutMembreDernière intervention17 octobre 2008 2 oct. 2007 à 05:19
bah c'est clair que toi vu ke c'est du TCL c pas utilisable cash mais bon le principe du truc c'est surtout le regex donc je pense que ca devrai pas etre insurmontable pour monter ca en TCL si tu en as des notions deja apparement : )
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 2 oct. 2007 à 17:35
c'est pas du tcl c'est du perl
et je vois pas la fin de ta phrase même en surlignant on voit pas =/
au fait le mieux est de revenir a la ligne tous les 10mots =P
cs_tofu
Messages postés1726Date d'inscriptionvendredi 12 septembre 2003StatutMembreDernière intervention13 juin 20091 3 oct. 2007 à 21:00
personnellement comme pattern j'utilise ça:
\w*(.)\1{5}
où le {5} est la limite de caractères autorisés
(donc à partir de 6 caractères identiques ça match.)
La seule contrainte est dans le cas où tu voudrais récupérer ce qui a été match pour faire des traitements divers.
tout simplement parce qu'avec ce pattern, ça match ce qu'il y a avant le groupe match dans le mot.
Exemples:
Ceci est un testtttttto.
oooaaaaaaaablabla
iiiiiiiiiiiiiiiiiioiiii.
Concordance 1: Début 12, Fin 22
Groupe 0 = testtttttt
Groupe 1 = t
Concordance 2: Début 25, Fin 36
Groupe 0 = oooaaaaaaaa
Groupe 1 = a
Concordance 3: Début 43, Fin 61
Groupe 0 = iiiiiiiiiiiiiiiiii
Groupe 1 = i
Donc si ya juste à match ça devrait tourner, si faut traiter les groupes match là ça peut poser souci.
voilà voilou.. (à priori ça devrait tourner en perl, même si j'utilise un éditeur d'expressions qui utilise l'api java, j'ai looké la javadoc et il ne me semble pas que les différences entre perl et java ait une incidence sur ce pattern...)
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 3 oct. 2007 à 21:07
erf, intéressant... seul hic : je vois pas la fin de tes phrases =/
mais je testerai, en fait on m'avait deja donné le même mais avec un t a la place du 1 et j'avais beau chercher partout sur le net, je voyais pas a quoi ca signifiait... merci x)
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 5 oct. 2007 à 18:15
Expliqué la différence entre le \t et le \1 est vraiment très dur, on m'avait fait un tableau pour comprendre, c'étais super bien fait, mais je suis incapable de te le refaire