Communauté Eggdrop
[Résolu] [Aide]Problème avec un tcl - Version imprimable

+- Communauté Eggdrop (https://forum.eggdrop.fr)
+-- Forum : Eggdrop et TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=8)
+--- Forum : Scripts TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=4)
+--- Sujet : [Résolu] [Aide]Problème avec un tcl (/showthread.php?tid=1366)



[Résolu] [Aide]Problème avec un tcl - Naruto - 14/07/2013

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//"            
 }
}





RE: [Aide]Problème avec un tcl - MenzAgitat - 15/07/2013

 
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
 


RE: [Aide]Problème avec un tcl - Naruto - 15/07/2013

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]


RE: [Résolu] [Aide]Problème avec un tcl - Naruto - 17/07/2013

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é"





RE: [Résolu] [Aide]Problème avec un tcl - CrazyCat - 17/07/2013

Juste une petite astuce: plutôt que d'utiliser une série de elseif, Switch est bien pratique.


RE: [Résolu] [Aide]Problème avec un tcl - MenzAgitat - 17/07/2013

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.


RE: [Résolu] [Aide]Problème avec un tcl - CrazyCat - 17/07/2013

Tout à fait d'accord, c'est pour ça que je ne fais que conseiller d'aller jeter un oeil sur la page wiki.