Détect répétitions

uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011 - 1 oct. 2007 à 16:56
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Derniè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) . ")");
  }
}

Merci

Honorine <3 /°/ www.uaipcreations.ovh.org

11 réponses

Panthouffle Messages postés 281 Date d'inscription jeudi 21 juillet 2005 Statut Membre Dernière intervention 14 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

- Panthouffle  -
0
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 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.

ISoKa
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
1 oct. 2007 à 20:37
[infomsg_FLOOD-LETTRES_755594.aspx http://www.ircfr.com/infomsg_FLOOD-LETTRES_755594.aspx]




http://www.scriptsdb.org/comments.php?id=863



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
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Derniè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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
1 oct. 2007 à 21:30
j'ai oublié de remercier aussi isoka
je vais voir tous vos conseils quand j'aurai une meilleure connexion (je lag a mort, la...)

Honorine <3 /°/ www.uaipcreations.ovh.org
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
1 oct. 2007 à 21:42
Oui le fait que les messages soient coupés est assez gênant...
0
cs_ISoKa Messages postés 435 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 17 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 : )

ISoKa
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Derniè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

Honorine <3 /°/ www.uaipcreations.ovh.org
0
cs_tofu Messages postés 1726 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 13 juin 2009 1
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...)
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Derniè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)

Honorine <3 /°/ www.uaipcreations.ovh.org
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
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
0
Rejoignez-nous