[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
#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


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté