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 minutesset 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'attenteproc voice:adqueue {nick uhost handle args}{if{($nick == $::voiced) || ([lsearch -exact $::voiceq$nick]>= 0))}{
putserv "PRIVMSG $nick :Tu es déjà dans la file"return0}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$::voiceq0]set delay ($::duration*60000)set ::voicec[after $delay voice:del]set ::voiceq[lrange$::voiceq1 end]
pushmode $::vchan +v $::voiced}}
# Arrêt du voiceproc voice:del {}{
pushmode $::vchan -v $::voicedset ::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 $::voicecset ::voiced""
voice::checknext}}
un namespace serait le bienvenu pour prévenir les conflits de variables globales
un moyen de signaler qu'on a fini de parler sans avoir à quitter le chan
vérifier la présence de celui qui fait !voiceme sur le chan au moment où il tape la commande
que se passe-t-il si la personne suivante dans la liste n'est plus sur le chan au moment où c'est à elle de parler ?
que se passe-t-il si une personne figurant dans la liste d'attente change de nick ?
Toute l'actualité de mes scripts ici (dernière mise à jour le 14/07/2018)
Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
Je suis bien d'accord avec toutes tes remarques, ce que j'ai fait n'est que le principe du script et peut être largement amélioré.
Je vais essayer de faire quelque chose de plus propre dans la journée, ce qui m'intéressait ici était surtout de montrer l'utilisation des "after" pour gérer proprement le temps plutôt qu'avec des timers.
Toute l'actualité de mes scripts ici (dernière mise à jour le 14/07/2018)
Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.