Timer TCL
#1
Bonjour à toutes et à tous.

Je rencontre actuellement un petit blocage pour le développement d'un tcl.

j'aimerai pouvoir faire des "timer" dans certaines actions.
je connais la procédure en mirc

Code :
timer <nb exec> <temps en sec> <commande>
timer 0 5 msg $chan salut tout le monde !

mais en tcl, je ne connais pas du tout la procédure.
Pourriez vous m'expliquer ?
Répondre Avertir
#2
bonjour,
essaye de voir ici http://www.eggdrop.fr/Timers_Utimers
[font=Times New Roman]La différence entre Linux et Windows ,c'est que Linux c'est comme une belle fille , il faut l'apprivoiser , la comprendre , la séduire tandis que Windows , c'est comme une prostitué , il faut payer et surtout bien se protéger.[/font]
Répondre Avertir
#3
j'ai trouvé ce que je cherchais, je vous donne ça au cas où d'autres chercheraient la même chose.

Citation :timer <minutes> <tcl-command>

Description: executes the given Tcl command after a certain number of minutes have passed

Returns: a timerID

Module: core
utimer <seconds> <tcl-command>

Description: executes the given Tcl command after a certain number of seconds have passed

Returns: a timerID

Module: core
timers

Returns: a list of active minutely timers. Each entry in the list contains the number of minutes left till activation, the command that will be executed, and the timerID.

Module: core
utimers

Returns: a list of active secondly timers. Each entry in the list contains the number of minutes left till activation, the command that will be executed, and the timerID.

Module: core

source: http://www.tclscript.com/docs/tcl-commands.html
Répondre Avertir
#4
quasi les même explication que l'url que j'ai donné Smile
[font=Times New Roman]La différence entre Linux et Windows ,c'est que Linux c'est comme une belle fille , il faut l'apprivoiser , la comprendre , la séduire tandis que Windows , c'est comme une prostitué , il faut payer et surtout bien se protéger.[/font]
Répondre Avertir
#5
Il faut savoir que timer et utimers sont gérés par eggdrop
Au niveau TCL il existe aussi after pour executer une commande après un nombre de millisecondes données
Répondre Avertir
#6
bonjour,
la fonction " after " peut on l'ajouté sur le Wiki ? pour les personnes qui aimerais en savoir un peut plus sur cet fonction.
[font=Times New Roman]La différence entre Linux et Windows ,c'est que Linux c'est comme une belle fille , il faut l'apprivoiser , la comprendre , la séduire tandis que Windows , c'est comme une prostitué , il faut payer et surtout bien se protéger.[/font]
Répondre Avertir
#7
Page After créée sur le Wiki: bin, ici
Répondre Avertir
#8
merci Artix pour le tuto sur wiki Smile
[font=Times New Roman]La différence entre Linux et Windows ,c'est que Linux c'est comme une belle fille , il faut l'apprivoiser , la comprendre , la séduire tandis que Windows , c'est comme une prostitué , il faut payer et surtout bien se protéger.[/font]
Répondre Avertir
#9
salut,

pour ceux que ça intéresserais voila le utimer de eggdrop recodé entièrement en tcl pur avec after (comprend le killutimer et utimers)
TCL
proc timer {time proc} {
 variable timers
  set timerid [after [expr $time*1000] $proc]
  lappend timers "[expr [unixtime] + $time] $proc $timerid" 
  set after($timerid) [after [expr $time*1000] "[namespace current]::unsettimers {[expr [unixtime] + $time] $proc $timerid}"] 
  return $timerid
}
 
proc unsettimers {id} {
 variable timers
  if {[info exists timers] && $timers!=""} {
    set find [lsearch -exact $timers "$id"]
    if {$find!="-1"} {
      set timers [lreplace $timers $find $find]
    }
  }
}
 
proc timers { } {
 variable timers
  if {[info exists timers] && $timers!=""} {
    foreach u $timers {
      set u [charfilter $u]
      set t [lindex $u 0]
      set t [expr $t - [unixtime]]
      lappend ut "$t {[join [lrange $u 1 [expr [llength $u] - 2]]]} [lindex $u end]"
    }
    return $ut
  }
  return
}
 
proc killtimer {timerid} {
 variable timers
  if {[info exists timers] && $timers!=""} {
    foreach u $timers {
      if {[lindex $u end]==$timerid} {
        unsettimers $u
        catch {after cancel $timerid}
      }
    }
  }
}


C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#10
la proc charfilter qui sera nécessaire
Code :
proc charfilter {arg} {
  string map {"\\" "\\\\" "\{" "\\\{" "\}" "\\\}" "\[" "\\\[" "\]" "\\\]" "\"" "\\\""} $arg
}
ainsi que la proc unixtime
Code :
proc unixtime { } {
  clock seconds
}
C'est en reconnaissant ses erreurs que l'on progresse Wink
Répondre Avertir
#11
bah voici une petite exemple de timer TCL :

Citation :
Code :
bind time - "*0 * * * *" message
bind time - "*5 * * * *" message
proc message {min hour day month year} {
putfast "privmsg #tonsalon le message qui sera envoyé toutes les 5 minutes"
}


je c pas c sa que vous cherche
++
Répondre Avertir
#12
Merci à tous pour votre aide, j'ai réussi à m'en sortir depuis le temps.
Et je vous fait donc part, en remerciement, du code qui en a découlé.

Je vous demanderai à tous, de respecter les conditions d'utilisation de ce code si vous décidez de vous en servir.

TCL
####################################################################
#        Script de demande d'animateurs par BlackNight             #
# ---------------------------------------------------------------- #
# Le principe est simple, vous avez plusieurs salons, des          #
# animateurs un peu partout, mais un salon a besoin d'animateur    #
# car celui du salon concerné s'absente, il peux donc se faire     #
# remplacer, en tapant !demande #salon , sur le salon du staff     #
# ---------------------------------------------------------------- #
# Requiert:                                                        #
#           - une Oline avec le flag netadmin pour l'eggdrop       #
# ---------------------------------------------------------------- #
# Conditions d'utilisation:                                        #
# Vous pouvez redistribuer ce code comme bon vous semble, le       #
# modifier, l'améliorer librement, tant que vous me faites part    #
# de ces modifications, et que vous mettiez ce code à disposition  #
# de tous, sans aucunes restrictions.                              #
# ---------------------------------------------------------------- #
# BlackNight : <magic.boss6@gmail.com>                             #
####################################################################

 
###configuration###
#salon où seront effectuées les demandes
set staff "#staff"
#liste de vhost autorisée a faire les demandes
set vhostniv0 {
	*@NetAdmin.domaine.tld
	*@ChanAdmin.domaine.tld
	*@ChanOp.domaine.tld
	*@Op.domaine.tld
	*@TechAdmin.domaine.tld
	*@IrcOp.domaine.tld
	*@global.domaine.tld
	*@anim.domaine.tld
}

 
 
 
## Ne modifiez rien ci-dessous sans connaisance du langage TCL ##
 
set chandemande "null"
bind pub - !demande demandestaff
proc demandestaff { nick host handle channel arg } {
 
global vhostniv0 staff chandemande
   if ![string compare -nocase $channel "$staff"] {
foreach vhostdemstaff $vhostniv0 {
 
  if [string match -nocase $vhostdemstaff $host]  {
      if ![string compare -nocase $chandemande "null"] {
 
  set chandemande "[lindex $arg 0]"
putquick "PRIVMSG $channel : Un animateur est demandé sur $chandemande par $nick. Tapez !ok pour accepter. Demande valable 1 minute."
putquick "NOTICE $channel : Un animateur est demandé sur $chandemande. Tapez !ok pour accepter. Demande valable 1 minute."
bind pub - !ok demandestaff:ok
utimer 60 { proc_expire }
 
		} else { putquick "PRIVMSG $channel :KO. Une demande est déjà en cours." }
 
	}
   }
 }
 
 }
 
 
proc proc_expire {} {
global staff chandemande 
set staffchan $staff
set demandechan $chandemande
if { $demandechan != "null" } {
   putquick "PRIVMSG $staffchan :La demande pour $demandechan à expirée. vous pouvez formuler une nouvelle demande."
set chandemande "null"
}
}
 
proc demandestaff:ok { nick host handle channel arg } {
 
global vhostniv0 staff chandemande
set staffchan $staff
set demandechan $chandemande
 
   if ![string compare -nocase $channel "$staffchan"] {
foreach vhostdemstaffok $vhostniv0 {
 
  if [string match -nocase $vhostdemstaffok $host]  {
if {$demandechan != "null"} {
 
  putquick "SAJOIN $nick $demandechan"
  putquick "PRIVMSG cerbere halfop $demandechan $nick"
  putquick "PRIVMSG $channel :$nick accèpte la demande sur $demandechan."
  putquick "PRIVMSG $channel :Vous pouvez formuler une nouvelle demande."
set chandemande "null"
 
		} else { putquick "PRIVMSG $channel :KO. Auncune demande n'est en cours." }
}
}
}
}
 
 
putlog "Demande.tcl Dévellopé par BlackNight"





Je n'ai par contre pas mit de vérifications des salons concernés par les demandes, par manque de temps sans doutes, aussi ne sachant pas vraiment comment faire.


Merci à la communauté d' Eggdrop.fr
Répondre Avertir
#13
Merci BlackNitgh, Mais malheuresement le temps d'expire ne fonctionne pas ... car regarde ....

-12:09:40- ‹~Dragon061› !demande #Radio
-12:09:40- ‹~Nemesis› Un animateur est demandé sur #Radio par Dragon061. Tapez !oui pour accepter. Demande valable 1 minute.
-12:11:45- ‹~Dragon061› !oui

Cela fesait plus que 2 minute et 5 seconde que le temps étais écouler :/ ...
Répondre Avertir
#14
Babytigrou chez moi ca passe nickel Smile

Je sais pas d'où ça pourrais venir.
essai de changer le
TCL
utimer 60 { proc_expire }



en

TCL
timer 1 { proc_expire }


Répondre Avertir
#15
Bonsoir

J'aimerais savoir comment faire pour que lorsque la personne rentre sur le salon, le message de bienvenue apparaisse que 10 sc après qu'il est join le salon par exemple.
J'ai regarder dans le forum et les tutos de timers mais cela me donne que pour dire un message toutes les X minutes.

Par avance merci
DodY
Répondre Avertir


Atteindre :


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