Messages : 8
Sujets : 2
Inscription : Oct 2017
Niveau d’avertissement :
0%
07/01/2018, 01:39
(Modification du message : 07/01/2018, 14:58 par deejay-wilo.)
Bonjour,
Je suis à la recherche d'un tcl qui fait des plannings de ce type
avec une commande "!pl" nous avons le résultat ci-dessous.
[00:35:36] •Notice• ‹Bot-R› Animation prévu
[00:35:36] •Notice• ‹Bot-R› 1 Dimanche 07/01/2018 18h à 20h StopOuEncore AVEC: Pseudo
[00:35:37] •Notice• ‹Bot-R› 2 Mercredi 10/01/2018 DE 20 à 22 heures Play List Chanel_26 + Musiques Variées AVEC: Pseudo
[00:35:37] •Notice• ‹Bot-R› 3 Dimanche 07/01/2018 De 10 à 12 heures La Matinale AVEC: Pseudo
[00:35:38] •Notice• ‹Bot-R› 4 Dimanche 07/01/2018 De 15 à 17 heures Road Sixty Six AVEC: Pseudo
[00:35:40] •Notice• ‹Bot› 5 Dimanche 07/01/18 17h00 - 18h00 ballades africaines
Et pour ajouter un event on fait !addpl et le nom de la programmation
Avez vous cela dans vous archive s'il vous plait ?
Je vous remercie d avance.
Messages : 2,281
Sujets : 178
Inscription : Apr 2004
Je ne pense pas que l'on ait ça en réserve, mais c'est relativement simple à faire. Le seul souci qui se pose est la gestion de la date: comment penses-tu / veux-tu la rentrer ? Il faut quelque chose d'unifié, de formaté, ou de compréhensible facilement par le script.
Messages : 2,281
Sujets : 178
Inscription : Apr 2004
(07/01/2018, 14:57)deejay-wilo a écrit : je pense que je vais la rentré manuellement, cela serait idéal je pense, tu en penses quoi pour mes animateurs 
Je me doute bien, ma question était plutôt: la date doit-elle être un bête texte ou une vraie date ?
Dans le premier cas, ça veut dire que tu ne fais que remplir une liste de phrases qui seront ressorties dans leur ordre d'entrée, donc très basique à faire mais très limité, sans la moindre gestion de type planning.
Dans le second cas, cela impose un formalisme pour tes entrées, par exemple:
!addpl 05/02/2018 18:30 Un évènement le 05 février
C'est plus compliqué à faire (mais pas tellement) et ça peut donner bien plus de possibilités de gestion.
Messages : 2,281
Sujets : 178
Inscription : Apr 2004
J'ai fait rapidement ceci:
TCL
namespace eval planning {
variable plchan "#canal"
variable db "planning.db"
variable mem
bind msg - addpl ::planning::pladd
bind pub - !planning ::planning::pllist
proc pladd {nick uhost handle text} {
if {[llength [split $text]]<3} {
putserv "PRIVMSG $nick :La commande est /msg $::botnick addpl jj/mm/aaaa hh:min Description de l'évènement"
return 0
}
set date [lrange [split $text] 0 1]
set event [join [lrange [split $text] 2 end]]
if {$event==""} {
putserv "PRIVMSG $nick :Aucune description donnée..."
return 0
}
set ts [checkdate $date]
if {$ts == "E1"} {
putserv "PRIVMSG $nick :La date n'est pas formatée comme il faut"
return 0
} elseif {$ts == "E2"} {
putserv "PRIVMSG $nick :On ne peut pas planifier un évènement passé"
return 0
}
::planning::dbsave $ts $event
set strd [strftime "%d/%m/%Y %H:%M" $ts]
putserv "PRIVMSG $::planning::plchan :Nouvel évènement pour le $strd : $event"
return 1
}
proc pllist {nick uhost handle chan args} {
if { [string tolower $chan] != [string tolower $::planning::plchan]} {
putserv "PRIVMSG $nick :Pas sur le bon chan"
return 0
}
::planning::dbload
if {[llength $::planning::mem] < 1} {
putserv "PRIVMSG $::planning::plchan :Aucun évènement"
return 0
}
foreach line $::planning::mem {
foreach {t e} $line {
set strd [strftime "%d/%m/%Y %H:%M" $t]
putserv "PRIVMSG $::planning::plchan :$strd $e"
}
}
}
proc dbsave {ts event} {
set fo [open $::planning::db a]
puts $fo "$ts $event"
close $fo
::planning::dbload
}
proc dbload {} {
if {![file exists $::planning::db]} { return 0 }
set ::planning::mem [list]
set fi [open $::planning::db r]
set tmp [read -nonewline $fi]
close $fi
set tmp2 [list]
foreach line [split $tmp "\n"] {
set ts [lindex $line 0]
set event [lrange $line 1 end]
if {$ts >= [clock seconds]} {
lappend tmp2 [list $ts [join $event]]
}
}
set ::planning::mem [lsort -index 0 $tmp2]
unset tmp
}
proc checkdate {datetime} {
if {![regexp {([0-3]\d)/([01]\d)/((20)?\d{2})\ ([0-2]\d):([0-5]\d)} $datetime match day mon year cent H i]} {
# date mal formatée
return "E1"
}
set ts [clock scan "$mon/$day/$year $H:$i"]
if { $ts < [clock seconds]} {
# date dans le passé...
return "E2"
}
return $ts
}
proc init {} {
::planning::dbload
}
}
::planning::init
C'est pas optimisé, mais ça fonctionne
Messages : 8
Sujets : 2
Inscription : Oct 2017
Niveau d’avertissement :
0%
Bonjour,
Merci de votre rapidité et de votre aide,
Nous avons un message d'erreur dans la console
[09:16:58] Barjot_ joined #Extrem-Radio.
[09:18:41] Tcl error [::planning::pllist]: can't read "::planning::mem": no such variable
[09:18:48] Tcl error [::planning::pllist]: can't read "::planning::mem": no such variable
Pourriez vous me dire si je dois faire une modification ?
Cordialement
Messages : 2,281
Sujets : 178
Inscription : Apr 2004
Effectivement, une inversion de lignes dans mon code.
Voici la version corrigée:
TCL
namespace eval planning {
variable plchan "#canal"
variable db "planning.db"
variable mem
bind msg - addpl ::planning::pladd
bind pub - !planning ::planning::pllist
proc pladd {nick uhost handle text} {
if {[llength [split $text]]<3} {
putserv "PRIVMSG $nick :La commande est /msg $::botnick addpl jj/mm/aaaa hh:min Description de l'évènement"
return 0
}
set date [lrange [split $text] 0 1]
set event [join [lrange [split $text] 2 end]]
if {$event==""} {
putserv "PRIVMSG $nick :Aucune description donnée..."
return 0
}
set ts [checkdate $date]
if {$ts == "E1"} {
putserv "PRIVMSG $nick :La date n'est pas formatée comme il faut"
return 0
} elseif {$ts == "E2"} {
putserv "PRIVMSG $nick :On ne peut pas planifier un évènement passé"
return 0
}
::planning::dbsave $ts $event
set strd [strftime "%d/%m/%Y %H:%M" $ts]
putserv "PRIVMSG $::planning::plchan :Nouvel évènement pour le $strd : $event"
return 1
}
proc pllist {nick uhost handle chan args} {
if { [string tolower $chan] != [string tolower $::planning::plchan]} {
putserv "PRIVMSG $nick :Pas sur le bon chan"
return 0
}
::planning::dbload
if {[llength $::planning::mem] < 1} {
putserv "PRIVMSG $::planning::plchan :Aucun évènement"
return 0
}
foreach line $::planning::mem {
foreach {t e} $line {
set strd [strftime "%d/%m/%Y %H:%M" $t]
putserv "PRIVMSG $::planning::plchan :$strd $e"
}
}
}
proc dbsave {ts event} {
set fo [open $::planning::db a]
puts $fo "$ts $event"
close $fo
::planning::dbload
}
proc dbload {} {
set ::planning::mem [list]
if {![file exists $::planning::db]} { return 0 }
set fi [open $::planning::db r]
set tmp [read -nonewline $fi]
close $fi
set tmp2 [list]
foreach line [split $tmp "\n"] {
set ts [lindex $line 0]
set event [lrange $line 1 end]
if {$ts >= [clock seconds]} {
lappend tmp2 [list $ts [join $event]]
}
}
set ::planning::mem [lsort -index 0 $tmp2]
unset tmp
}
proc checkdate {datetime} {
if {![regexp {([0-3]\d)/([01]\d)/((20)?\d{2})\ ([0-2]\d):([0-5]\d)} $datetime match day mon year cent H i]} {
# date mal formatée
return "E1"
}
set ts [clock scan "$mon/$day/$year $H:$i"]
if { $ts < [clock seconds]} {
# date dans le passé...
return "E2"
}
return $ts
}
proc init {} {
::planning::dbload
}
}
::planning::init