Optimisation code

R32m3power Messages postés 4 Date d'inscription mardi 25 novembre 2008 Statut Membre Dernière intervention 25 juillet 2013 - 25 juil. 2013 à 09:15
nooxx Messages postés 19 Date d'inscription mercredi 3 octobre 2012 Statut Membre Dernière intervention 11 juillet 2014 - 7 janv. 2014 à 03:30
Bonjour à tous.

Je suis débutant en scripting et je crée un bot de modération pour mon salon donc il fonctionne le soucis le code est trop lourd et j'aimerai savoir comment l'optimiser a fond :p donc la principal utilisation du bot est la détection de badwords voici un bout de code :) ne vous moquez pas de moi svp :p

on 1:TEXT:*enquler*:#:{

  if (%avert. [ $+ [ $address($nick,2) ] ] == $null && %kick. [ $+ [ $address($nick,2) ] ] == $null) {
    set %avert. [ $+ [ $address($nick,2) ] ] 1
    .msg #netadmin $nick recoit sont premier avertissement pour son language sur #
    .msg $chan $read bot\ainslutes.txt 
  }
  elseif (%avert. [ $+ [ $address($nick,2) ] ] == 1) {
    set %avert. [ $+ [ $address($nick,2) ] ]  2
    .msg #netadmin $nick recoit sont 2nd avertissement pour son language sur #
    .msg $chan $read bot\ainslutes.txt 
  }
  elseif (%avert. [ $+ [ $address($nick,2) ] ] == 2) {
    set %avert. [ $+ [ $address($nick,2) ] ]  3
    .msg #netadmin $nick recoit sont 3 ème avertissement pour son language sur #
    .msg $chan $read bot\ainslutes.txt 
  }
  elseif (%avert. [ $+ [ $address($nick,2) ] ] == 3) {
    unset %avert. [ $+ [ $address($nick,2) ] ]
    set %kick. [ $+ [ $address($nick,2) ] ]  1
    .msg #netadmin $nick recoit sont premier kick pour son language sur #
    .kick # $nick $read bot\kinslutes.txt 
  }
  elseif (%kick. [ $+ [ $address($nick,2) ] ] == 1) {
    set %kick. [ $+ [ $address($nick,2) ] ]  2 
    .msg #netadmin $nick recoit sont 2nd kick pour son language sur #
    .kick # $nick $read bot\kinslutes.txt 
  }
  elseif (%kick. [ $+ [ $address($nick,2) ] ] == 2) {
    unset %kick. [ $+ [ $address($nick,2) ] ] 
    .msg #netadmin $nick recoit un ban pour son language sur #
    .ban -u 3000 $address($nick,2)  
    .kick # $nick $read bot\kinslutes.txt
  }
} 




donc voici ma question déjà je suppose que mon code est super lourd donc il y a surement moyen de l'optimiser ensuite es qu'un équivalant du ban -u existe pour le set ?
et pouvons nous regrouper tout les mots a détecter dans un fichier badwords.txt par exemple ?

on 1:TEXT:*:#:{

  if ( $1- isin badwords.txt )


un truc dans se style ?

merci d'avance pour vos rèponses

2 réponses

ArseeniK Messages postés 14 Date d'inscription dimanche 1 décembre 2013 Statut Membre Dernière intervention 1 octobre 2014
24 déc. 2013 à 16:04
Salut !

Moi je l'aurais fais comme suis:
;## Alias retournant $false si aucune insultes du fichier n'est détecté dans la phrase dite.
alias detect_badwords {
var %a 1, %f badwords.txt, %b $lines(%f)
while (%a <= %b) {
var %r $read(%f,%a)
echo -a * %r
if ($+(*,$$1,*) iswm %r) { return %r }
inc %a
}
return $false
}
alias warn_bot {
.msg #netadmin 04Attention, $$3 recoit sont $$2 avertissement pour ses propos sur $$1 !
.msg $$1 $read(bot\ainslutes.txt)
}
alias sanction {
.msg #netadmin 04Ah, $$2 recoit sont $$3 kick pour ses propos sur $$1 !
.kick $$1 $$2 $read(bot\kinslutes.txt)
}
On *:TEXT:*:#:{
if ($detect_dabwords($strip($1-)) != $false) {
;# 1er avertissement
if (%avert. [ $+ [ $address($nick,2) ] ] == $null) { inc %avert. [ $+ [ $address($nick,2) ] ] | warn_bot $target 1er $nick }
;# 2nd avertissement
elseif (%avert. [ $+ [ $address($nick,2) ] ] == 1) { inc %avert. [ $+ [ $address($nick,2) ] ] | warn_bot $target 2nd $nick }
;# 3ème avertissement
elseif (%avert. [ $+ [ $address($nick,2) ] ] == 2) { inc %avert. [ $+ [ $address($nick,2) ] ] | warn_bot $target 3ème $nick }
;# 1er Kick (Avec 3 avertissements)
elseif (%kick. [ $+ [ $address($nick,2) ] ] == $null && %avert. [ $+ [ $address($nick,2) ] ] == 3) { inc %kick. [ $+ [ $address($nick,2) ] ] | sanction $chan $nick 1er | unset %avert. [ $+ [ $address($nick,2) ] ] }
;# 2eme Kick
elseif (%kick. [ $+ [ $address($nick,2) ] ] == 1) { inc %kick. [ $+ [ $address($nick,2) ] ] | sanction $chan $nick 2nd }
;# 3eme Kick -> ~Ban~
elseif (%kick. [ $+ [ $address($nick,2) ] ] == 2) {
unset %kick. [ $+ [ $address($nick,2) ] ]
.msg #netadmin 04Attention ! $nick recoit un ban pour ses propos sur $target !!
.ban -u 3000 $address($nick,2)
.kick $chan $nick $read(bot\kinslutes.txt)
}
}
}

J'ai pas chercher à changer grand chose. J'ai laisser les actions que tu avais attribués. Jte laisse gerer pour la suite ;)

Amicalement, ArseeniK
0
nooxx Messages postés 19 Date d'inscription mercredi 3 octobre 2012 Statut Membre Dernière intervention 11 juillet 2014
7 janv. 2014 à 03:30
Ligne 6 tu as oublié ton echo de debug il me semble
Tes lignes se répétent tu devrais regroupé quand ils font la même chose : ligne 23/25/27 il n'y a qu'une chose qui change c'est ceci 1er,2nd 3ème que tu peux très bien remettre via $replace($v1,1,1er,2,2nd,3,3ème)

Dans ton dernier elseif tu as ceci

.ban -u 3000 $address($nick,2)
.kick $chan $nick $read(bot\kinslutes.txt)

Pourquoi ne pas rassembler l'ensemble dans ta commande ban ?
ban -ku3000 $chan $nick 2 $read(bot\kinslutes.txt)

C'est tout de même déjà mieux bonne continuation
0
nooxx Messages postés 19 Date d'inscription mercredi 3 octobre 2012 Statut Membre Dernière intervention 11 juillet 2014
7 janv. 2014 à 03:22
Trop "lourd" non mIRC peut gerer bien pire trop répétitif tu voulais surement dire et dans ce cas oui.
Oui l'équivalent existe
set -u10 %tavariable plop
Oui on peut mais tu aurais du chercher un peu dans le site tu as des tas de codes qui t'auraient montré des solutions
0
Rejoignez-nous