Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


Demande script Planning
#1
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.
  Reply
#2
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.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
  Reply
#3
(07/01/2018, 02:23)CrazyCat Wrote: 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  ;)
  Reply
#4
(07/01/2018, 14:57)deejay-wilo Wrote: 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.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
  Reply
#5
(07/01/2018, 17:26)CrazyCat Wrote:
(07/01/2018, 14:57)deejay-wilo Wrote: 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 ;)
  Reply
#6
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 :)
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
  Reply
#7
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
  Reply
#8
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


irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
  Reply
#9
bonsoir il y a un soucis avec le script

[18:03:11] Tcl error [::planning::pladd]: invalid command name "::tcl::clock::scan"
  Reply
#10
Très gênant, étant donné que clock fait partie des librairies natives de tcl. Peut-être un souci avec windrop qui n'aurait pas intégré toutes les bibliothèques, mais j'en doute.
De mon point de vue, ce n'est pas le script qui est la cause de l'erreur.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
  Reply
#11
ok mais comment résoudre se problème
  Reply
#12
Aucune idée, pour ma part en téléchargeant le dernier windrop, je trouve bien C:\Windrop\lib\tcl8.6\clock.tcl présent et fonctionnel (appelé par C:\Windrop\lib\tcl8.6\init.tcl)
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
  Reply
#13
Bonjour , j'ai essayé de suivre la démarche mais je n'y comprends rien .
Je souhaiterais avoir comme la personne le demandais une commande addpl pour ma web radio
J'ai chercher sur plusieurs sites :
Je ne sais pas ou mettre la commande

info si besoin :

salon #Radio-Mix
Bot : Radio_Mix_


Pouvez vous m'aidez ?
  Reply
#14
De quelle commande parles-tu ?
Le script fonctionnel est quelques posts plus haut, il suffit de remplacer #canal par le nom de ton canal pour qu'il soit opérationnel.

Ou bien soit plus précis dans ta question, qu'on puisse t'aider.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
  Reply
#15
(05/12/2021, 01:55)CrazyCat Wrote: De quelle commande parles-tu ?
Le script fonctionnel est quelques posts plus haut, il suffit de remplacer #canal par le nom de ton canal pour qu'il soit opérationnel.

Ou bien soit plus précis dans ta question, qu'on puisse t'aider.

Le nom du canal correspond bien au nom du salon ?

D'apres d'autre renseignement votre variable n'est pas complète comment faire pour utiliser donc ce codage ?
  Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  [Demande] Planning radio nydalimar 8 5,760 08/10/2016, 17:52
Last Post: CrazyCat
  [Demande] Script 'piège' (Kick à la demande avec compteur de victime) Utas 6 6,917 21/12/2011, 11:24
Last Post: loulou7593
  Planning Ryan 2 4,373 01/10/2011, 13:25
Last Post: CrazyCat
  !planning radio Babytigrou16 18 11,429 01/07/2009, 11:31
Last Post: heretoc
  demande aide script tcl Cyril 3 5,204 07/03/2009, 15:31
Last Post: Cyril

Forum Jump:


Users browsing this thread: 1 Guest(s)