05/06/2011, 23:02
Bonsoir,
On m'a demandé s'il était possible de faire un script qui donne la parole (un voice) à des utilisateurs en suivant une file d'attente (l'ordre dans lequel les utilisateurs demandent à parler) avec un temps de parole limité pour chaque fois.
J'ai donc produit ceci, je ne l'ai pas testé mais il ne doit pas y avoir trop d'erreurs.
A tester et commenter
On m'a demandé s'il était possible de faire un script qui donne la parole (un voice) à des utilisateurs en suivant une file d'attente (l'ordre dans lequel les utilisateurs demandent à parler) avec un temps de parole limité pour chaque fois.
J'ai donc produit ceci, je ne l'ai pas testé mais il ne doit pas y avoir trop d'erreurs.
A tester et commenter
tcl
# Durée du voice en minutes
set duration 5
# Canal visé
set vchan "#voice"
# Commande à utiliser en privé
bind msg - "!voiceme" voice:adqueue
set voiceq {}
set voiced ""
set voicec 0
# Procédure principale : ajout dans la file d'attente
proc voice:adqueue {nick uhost handle args} {
if {($nick == $::voiced) || ([lsearch -exact $::voiceq $nick] >= 0))} {
putserv "PRIVMSG $nick :Tu es déjà dans la file"
return 0
}
lappend ::voiceq $nick
voice:checknext
}
# Procédure très importante : choix du nouveau voicé
proc voice:checknext {} {
if {$::voiced == "" && [llength $::voiceq] > 0} {
set ::voiced [lindex $::voiceq 0]
set delay ($::duration * 60000)
set ::voicec [after $delay voice:del]
set ::voiceq [lrange $::voiceq 1 end]
pushmode $::vchan +v $::voiced
}
}
# Arrêt du voice
proc voice:del {} {
pushmode $::vchan -v $::voiced
set ::voiced ""
voice:checknext
}
# Gestion de la déconnexion
bind part - $::vchan voice:part
bind sign - $::vchan voice:part
proc voice:part {nick uhost handle chan msg} {
if {$::voiced == $nick} {
after cancel $::voicec
set ::voiced ""
voice::checknext
}
}