Communauté Eggdrop

Version complète : Demande script Planning
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
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.
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.
(07/01/2018, 02:23)CrazyCat a écrit : [ -> ]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.

Je te remercie de ta réponse rapide, je pense que je vais la rentré manuellement, cela serait idéal je pense, tu en penses quoi  pour mes animateurs :)

Merci de ton aide  ;)
(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.
(07/01/2018, 17:26)CrazyCat a écrit : [ -> ]
(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.

non mais je pense que la deuxieme solution est la bonne ;)
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 :)
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
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