[Résolu] [Aide]Problème avec un tcl
#1
Bonsoir à tous.
je vous explique mon problème : je souhaiterais que mon bot sorte différents liens sur différents salons avec la même commande et là avec mon code ça prend en compte que la dernière commande que doit je faire pour que je puisse utiliser cette même commande partout ?
(je suis débutant)
Je vous remercies d'avance pour vos réponses.

TCL
proc putfast {arg} {
append arg "\n"
putnow $arg -oneline
#putnow 0 [string length $arg] $arg
}
 
bind pub - !stats pub_stats
 
 
proc pub_stats {nick host hand chan args} {
if {$chan == "#salon1"} {
putfast "NOTICE $nick :Voici les stats du salon #salon1 http://"            
 }
}
 
proc pub_stats {nick host hand chan args} {
if {$chan == "#salon2"} {
putfast "NOTICE $nick :Voici les stats du salon #salon2 http://"            
 }
}
 
proc pub_stats {nick host hand chan args} {
if {$chan == "#salon3"} {
putfast "NOTICE $nick :Voici les stats du salon #salon3 http://"            
 }
}
 
proc pub_stats {nick host hand chan args} {
if {$chan == "#salon4"} {
putfast "NOTICE $nick :Voici les stats du salon #salon4 http://"            
 }
}
 
proc pub_stats {nick host hand chan args} {
if {$chan == "#salon5"} {
putfast "NOTICE $nick :Voici les stats du salon #salon5 http://"            
 }
}
 
proc pub_stats {nick host hand chan args} {
if {$chan == "#salon6"} {
putfast "NOTICE $nick :Voici les stats du salon #salon6 http://"            
 }
}
 
proc pub_stats {nick host hand chan args} {
if {$chan == "#salon7"} {
putfast "NOTICE $nick :Voici les stats du salon #salon7 http//"            
 }
}


Répondre Avertir
#2
 
Tu déclares 7 fois la procédure pub_stats. Chaque nouvelle écrase la précédente, ce qui fait que seule la dernière est prise en compte.

Tu ne dois déclarer qu'une seule fois ta procédure et y inclure les différents tests de conditions.

TCL
proc pub_stats {nick host hand chan args} {
  if {$chan == "#salon1"} {
    putfast "NOTICE $nick :Voici les stats du salon #salon1 http://"            
  } elseif {$chan == "#salon2"} {
    putfast "NOTICE $nick :Voici les stats du salon #salon2 http://"
  } elseif {...} {
    ...
  }
}



Petite remarque en passant : putfast est séduisant parce qu'il affiche vite les choses, mais il devrait être évité ou du moins réservé aux cas où l'urgence et la rapidité de réaction priment comme pour assurer la protection d'un chan par exemple.
On pourrait réussir à faire kill ton eggdrop par le serveur pour flood excessif (déclenché par trop de texte envoyé trop rapidement au serveur) juste en abusant avec la commande !stats.
Dans le cas qui t'intéresse, puthelp me paraît bien suffisant car il me semble que les utilisateurs voulant consulter les statistiques doivent pouvoir patienter 1 ou 2 secondes.
N'oublie pas qu'un eggdrop doit pouvoir gérer tout un tas de choses à la fois et que tout faire passer en urgence ne fera qu'engorger les files d'attente et produira probablement un lag important.

Et voici un peu de lecture pour savoir quand choisir telle ou telle commande de sortie : http://wiki.eggdrop.fr/Commandes_de_sortie
 
Répondre Avertir
#3
Bonjour MenzAgitat.
j'ai fait comme tu ma dit cela fonctionne a merveille , j'ai suivis aussi ton conseille j'ai mis puthelp a la place de putfast pour pas que le bot flood.

Merci beaucoup pour ton aide .

[Problème résolu]
Répondre Avertir
#4
Voici le code finit
TCL
bind pub - !stats pub_stats
proc pub_stats {nick host hand chan args} {
  if {$chan == "#salon1"} {
    puthelp "NOTICE $nick :Voici les stats du salon #salon1 http://"            
  } elseif {$chan == "#salon2"} {
    puthelp "NOTICE $nick :Voici les stats du salon #salon2 http://"
  } elseif {$chan == "#salon3"} {
    puthelp "NOTICE $nick :Voici les stats du salon #salon3 http://"            
  } elseif {$chan == "#salon4"} {
    puthelp "NOTICE $nick :Voici les stats du salon #salon4 http://"            
  } elseif {$chan == "#salon5"} {
    puthelp "NOTICE $nick :Voici les stats du salon #salon5 http://"            
  } elseif {$chan == "#salon6"} {
    puthelp "NOTICE $nick :Voici les stats du salon #salon6 http://"            
  } elseif {$chan == "#salon7"} {
    puthelp "NOTICE $nick :Voici les stats du salon #salon7 http://"  
  }
}
 
putlog "Liens-stats.tcl bien chargé"


Répondre Avertir
#5
Juste une petite astuce: plutôt que d'utiliser une série de elseif, Switch est bien pratique.
Répondre Avertir
#6
Je suis entièrement d'accord CrazyCat, mais comme il débute, je me suis dit qu'il valait mieux commencer par les bases et corriger son code sans tout chambouler afin qu'il comprenne. Un dict ou un array auraient pu faire l'affaire aussi afin d'associer les urls aux chans, vu que le code est identique à chaque fois.

Rome n'a pas été détruite en un jour.
Répondre Avertir
#7
Tout à fait d'accord, c'est pour ça que je ne fais que conseiller d'aller jeter un oeil sur la page wiki.
Répondre Avertir


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [Script] Probleme Resolu ! BaGrift 0 1,545 29/12/2015, 15:39
Dernier message: BaGrift
  Problème avec Clams SaiTek 7 3,510 06/09/2013, 09:02
Dernier message: SaiTek
  probleme avec mon script Nostromo1st 7 3,961 05/06/2013, 09:51
Dernier message: Nostromo1st
  probleme avec regsub Nostromo1st 2 2,722 03/06/2013, 10:30
Dernier message: Nostromo1st
  probleme avec Lea lesny 31 12,387 20/12/2012, 22:08
Dernier message: CrazyCat
  probleme avec une BL spidersms 2 3,095 19/12/2012, 22:04
Dernier message: aliasangelius
  [résolu] beug avec Clams moderation final lesny 8 4,770 01/11/2012, 22:53
Dernier message: heretoc
  [Résolu] problème de points avec trivia kipof 8 4,669 18/09/2012, 20:09
Dernier message: kipof
  [Résolu] Problème, plusieurs rand dans la même procédure Ez3kiel 2 2,681 03/07/2012, 16:20
Dernier message: Ez3kiel
  [Résolu] probleme Auto Op loulou7593 7 3,819 16/12/2011, 22:16
Dernier message: loulou7593

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)