Communauté sur les Eggdrops - Community about Eggdrops
[Demande] attendre que l'egg soit posé pour activer un tcl precis - Printable Version

+- Communauté sur les Eggdrops - Community about Eggdrops (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)
+--- Thread: [Demande] attendre que l'egg soit posé pour activer un tcl precis (/showthread.php?tid=1539)



attendre que l'egg soit posé pour activer un tcl precis - cestlemien - 10/06/2014

Bonjour,

je viens vers vous car j'ai des eggdrop qui utilisent le principe de "spy.tcl", qui donc loguent tout ce qui est dit/ce passe sur divers salons, les kick,msg privés,notices, modes, changements de pseudos ect ... Bien évidement les egg etant sur pas mal de salons, ils mettent du temps à ce "poser" et commencent donc un flood énorme sur le salon #log . Hors j'aimerait que mon tcl ne demarre en fait qu'a son arrivée sur #log sans tenir compte de la file des msg/modes/topic qu'il a recu lors de sa connexion, à leur arrivée sur les divers salons.

principe:

"lancer l'egg/ charger les tcl et lib / connexion / arrivée sur les salons / et enfin démarrage du tcl de log "

(ps, windrops hébergés sur mes machines)

J'espère avoir eté précis dans ma requête

Cordialement.


RE: attendre que l'egg soit posé pour activer un tcl precis - aliasangelius - 10/06/2014

Salut,

Simple, dans ton code TCL utilise la fonction timer, voir utimer, pour qu'il lance la procédure du démarage de ton tcl log, lorsque lui arrive sur le salon #log

Donc, lorsque ton eggdrop va rejoindre #log, il lancera le tout.
Mais faut se sois déclarable que sur $::botnick

J'espère t'avoir aider..


RE: attendre que l'egg soit posé pour activer un tcl precis - CrazyCat - 10/06/2014

Je pense que le plus simple, c'est de ne charger les binds qu'une fois que l'eggdrop est bien sur tous les canaux, par exemple en comparant lors des joins de l'eggdrop le nombre de canaux actuels avec le nombre de canaux dans [channels].
Ou encore mieux, ne charger le script qu'une fois cette condition remplie.


RE: attendre que l'egg soit posé pour activer un tcl precis - cestlemien - 11/06/2014

RE,

l'idée est bonne, mais j'ai pas vraiment envie d'alourdir le code avec des timer utimer partout sur chaque bind, je pensait à un truc du genre set "la tcl" avec timer éventuellement, mais je ne vois pas comment faire.


Cordialemement.


RE: attendre que l'egg soit posé pour activer un tcl precis - CrazyCat - 11/06/2014

Le timer est très aléatoire, est-ce que tu es vraiment capable de dire au bout de combien de temps l'eggdrop a rejoint tous les canaux ?
Alors qu'un script du genre:

tcl
set nchans [llength [channels]]
set joined 0
bind join - "*" countchan
proc countchan {nick uhost handle chan} {
   if {[string tolower $nick]!=[string tolower $::botnick} { return 0 }
   incr ::joined
   if { $::joined == $::nchans} {
      unbind join - "*" countchan
      source scripts/tonscript.tcl
   }
   return 0
}

Ce bout de script ne sera fonctionnel que le temps que mets l'eggdrop à rejoindre les canaux. En espérant que tu n'en aies pas en +inactive.


RE: attendre que l'egg soit posé pour activer un tcl precis - cestlemien - 11/06/2014

salut,

J'ai malheuresement des salons en +inactive, que j'aimerait eviter de supprimer. Autre soucis, j'utilise un tcl qui ce charge de charger les tcl ce trouvant dans le dossier scripts (loadall.tcl) ce qui m'evite de de devoir editer lefichier conf a chaque test.Neamoins, je pourrit toujours placer "log.tcl" dans un sous repertoire, et modifier la ligne source scripts/sousrep/tonscript.tcl. Reste donc le soucis des salons en +inactive.

Cordialement.


RE: attendre que l'egg soit posé pour activer un tcl precis - CrazyCat - 11/06/2014


tcl
set nchans 0
foreach chan [channels] {
   if { [channel get $chan inactive]==0 } { incr ::nchans }
}
set joined 0
bind join - "*" countchan
proc countchan {nick uhost handle chan} {
   if {[string tolower $nick]!=[string tolower $::botnick} { return 0 }
   incr ::joined
   if { $::joined == $::nchans} {
      unbind join - "*" countchan
      source scripts/tonscript.tcl
   }
   return 0
}