Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


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 ?
#2
bonjour,
essaye de voir ici http://www.eggdrop.fr/Timers_Utimers
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.
#3
j'ai trouvé ce que je cherchais, je vous donne ça au cas où d'autres chercheraient la même chose.

Quote: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
#4
quasi les même explication que l'url que j'ai donné :)
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.
#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
#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.
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.
#7
Page After créée sur le Wiki: bin, ici
#8
merci Artix pour le tuto sur wiki :)
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.
#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 ;)
Away
#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 ;)
Away
#11
bah voici une petite exemple de timer TCL :

Quote:
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
++
#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
#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 :/ ...
#14
Babytigrou chez moi ca passe nickel :)

Je sais pas d'où ça pourrais venir.
essai de changer le

tcl
utimer 60 { proc_expire }


en


tcl
timer 1 { proc_expire }

#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


Possibly Related Threads…
Thread Author Replies Views Last Post
  timer KeeViiNou 1 1,344 20/08/2020, 18:19
Last Post: CrazyCat
  [Résolu] problème de timer sur un unban Alucard`68 6 3,944 18/04/2017, 15:25
Last Post: Alucard`68
  timer ban Marc 9 5,540 22/12/2009, 12:10
Last Post: CrazyCat
  Timer en Tcl Meribre 4 5,125 17/12/2009, 17:53
Last Post: Meribre
  erreur dans un timer caline012 2 4,842 17/10/2008, 13:52
Last Post: caline012

Forum Jump:


Users browsing this thread: 1 Guest(s)