Timers Utimers

Un article de Communaute francophone sur les Eggdrops.
Jump to: navigation, search

Les fonctions Timer et Utimer permettent de faire une action dans les prochaines minutes/secondes que vous aurez définit.

Sommaire

Déclenchement de timer

Syntaxes

  • timer <minutes> <proc_a_lancer>
  • utimer <secondes> <proc_a_lancer><

Utilisation

proc exemple_timer {
puthelp "PRIVMSG #salon :Voici le message qui sera envoyé toutes les X minutes"
timer 3 exemple_timer
}
 
proc exemple_utimer
puthelp "PRIVMSG #salon :Voici le message qui sera envoyé toutes les X secondes"
timer 180 exemple_utimer
}

Gestion des timers

Un des problèmes des timers, c'est que l'on a parfois besoin de les supprimer. Pour cela, il faut connaitre son nom ou son id, il y a plusieurs méthodes pour cela.

Listage des timers

Il est possible de lister les timers en cours avec utimers et timers.

Ces deux fonctions retournent une liste des timers sous la forme:

{time_left procedure timer_id}

avec:

  • time_left : le temps restant pour le timer
  • procedure : la procédure appelée par le timer
  • timer_id : L'id unique du timer

Le temps restant sera soit en minutes soit en secondes, selon que vous utilisiez timers ou utimers

Tuer un timer

Il existe killtimer et killutimer pour tuer un (u)timer. Elles prennent comme argument l'ID unique du timer concerné. La difficulté est donc de retrouver cet ID.

Solution basique

On peut faire une boucle sur la liste des timers et chercher celui (ou ceux) qui déclenchent la procédure cible (que l'on connait).

proc killMyTimer { ttype myproc } {
# ttype : type de timer (utimer ou timer)
# myproc : nom de la procédure appelée
if { $ttype == "utimer" } {
foreach ctimer [utimers] {
if { [lindex $ctimer 1] == $myproc } {
killutimer [lindex $ctimer 2]
}
}
} else {
foreach ctimer [timers] {
if { [lindex $ctimer 1] == $myproc } {
killtimer [lindex $ctimer 2]
}
}
}
}

Cette procédure tuera tous les (u)timers qui appellent myproc

Solution élaborée

Cette solution est plus élaborée car elle agit aussi sur l'appel des timers. En effet, en utilisant list pour lancer un timer, vous pouvez récupérer son ID. Ce qui donne donc:

proc exemple_utimer
global mytimer
puthelp "PRIVMSG #salon :Voici le message qui sera envoyé toutes les X secondes"
set mytimer [list [timer 180 exemple_utimer]]
}
 
bind dcc - "tuetimer" tueTimer
proc tueTimer {} {
global mytimer
killtimer $mytimer
}
Récupérée de « http://wiki.eggdrop.fr/Timers_Utimers »