Communauté Eggdrop

Version complète : besoin d'aide pour un debug
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Bonjour
soyons bref mais clair ... je suis entrain de bricoler une espece d'horloge parlante qui envois sur mon chan un message different a chaque heure... ce script fonctionne tres bien a toute les heures SAUF a 9h et 10h ou il ne me donnes pas de message parcontre j'ai un retour en PL

pour 9h...
Code :
[08:00] Tcl error [pub_timer]: missing operator at _@_
in expression "0_@_8+1";
looks like invalid octal number
et pour 10h j'ai le meme message avec un 9 a la place du 8

voici ci apres le bout de script que j'utilise
Code :
...
# on definis les binds
bind time - "00 * * * *" pub_timer

# puis les proc
proc pub_timer {min hour day month year} {

# appel des variables globales
global offset dst chan

## definition des variable heure-minutes-secondes

set h [clock format [clock seconds] -format "%H"]
set m [clock format [clock seconds] -format "%M"]

if {$dst==1} {
        set h [expr $h+$offset+1]
        } else {
                set h [expr $h+$offset]
                }
if {$h == 24} {set h 0}

#switch pour avoir le message de l'heure
switch $h {
        0  {putserv "PRIVMSG $chan :Hey il est $h:$m. Faudrais penser a aller se coucher"}
        1  {putserv "PRIVMSG $chan :$h:$m.... j'en connais qui vont être fais demain"}
        2  {putserv "PRIVMSG $chan :deja $h:$m. Lachez les films humhum et allez vous coucher ca vaudras mieux"}
        3  {putserv "PRIVMSG $chan :dites il est quand meme $h:$m, c'est pas la peine de vous priver de sommeil pour moi"}
        4  {putserv "PRIVMSG $chan :Oula $h:$m et on n'est la a discuter.... qui qui va pas savoir se lever tout a l'heure ? moi perso j'm'en tape j'suis un bot"}
        5  {putserv "PRIVMSG $chan :Il est $h:$m Paris s'eveille. Et vous n'avez pas sommeil ?"}
        6  {putserv "PRIVMSG $chan :dring dring dring... Hey ouai c'est le reveil deja $h:$m .Encore une nuit blanche"}
        7  {putserv "PRIVMSG $chan :Un cafe creme pour moi et de la confiture de fraises pour mes brioches. Merci"}
        8  {putserv "PRIVMSG $chan :Allez les enfants il est $h:$m, faut se preparer pour l'ecole"}
        9  {putserv "PRIVMSG $chan :Bon $h:$m, qui a ramener le journal ce matin ?"}
        10 {putserv "PRIVMSG $chan :AHHHHH $h:$m enfin l'heure de la pause cafe"}
        11 {putserv "PRIVMSG $chan :P'pa t'es a la bourre.... les autres, courage plus qu'une heure et c'est la pause dej"}
...

mais ou donc se trouve mon erreur ? ou vas t'il me chercher ce _@_ ?

Merci de vos regard experts et de vos reponses
Premièrement je te conseil de mette le tcl complet et de mettre [ tcl ] a la place de [ code ] Wink
ok desolé
donc voici le tcl complet
tcl
###############################################
##					     ##
##		Horloge bavarde		     ##
##					     ##
##	   copyright Teddy (c) 2009	     ##
##					     ##
###############################################

##################################################
## description :			     	##
## une horloge qui annonce a chaque heure un 	##
## message humoristique et sur simple		##
## commande elle donne l'heure et l'ephemeride	##
##					     	##
## commandes :				     	##
## !heure : donnes l'heure du shell	     	##
## !ephemeride : donnes l'éphémeriddu jour    ##
## 					     	##
## Attention mysqltcl est requis pour ce script ##
##################################################

## Zone a personnaliser

# chan ou interagir
set chan "#aad"

# decalage par rapport a GMT (-12 a +12)
set offset 1

# heure d'ete (1 "oui" / 0 "non")
set dst 0

# identifiant mysql
set my_host	"localhost"
set my_user 	"ephemeride"
set my_pass 	"passwd"
set my_db 	"ephemeride"

#chemin de  la librairie mysqltcl
load /usr/lib/tcltk/mysqltcl-3.05/libmysqltcl3.05.so

 
###############################################
##         NE PAS MODIFIER PLUS LOIN         ##
###############################################

##Version du script
set ver "Ver 1.8"

######### LE SCRIPT COMMENCE ICI ################

## annonce a heure fixe
## exemple bind time - " min heure jour mois annee " proc

# on definis les binds
bind time - "00 * * * *" pub_timer

# puis les proc
proc pub_timer {min hour day month year} {
 
# appel des variables globales
global offset dst chan

## definition des variable heure-minutes-secondes
 
set h [clock format [clock seconds] -format "%H"]
set m [clock format [clock seconds] -format "%M"]
 
if {$dst==1} {
        set h [expr $h+$offset+1]
        } else {
                set h [expr $h+$offset]
                }
if {$h == 24} {set h 0}

#switch pour avoir le message de l'heure
switch $h {
	0  {putserv "PRIVMSG $chan :Hey il est $h:$m. Faudrais penser a aller se coucher"}
	1  {putserv "PRIVMSG $chan :$h:$m.... j'en connais qui vont être fais demain"}
	2  {putserv "PRIVMSG $chan :deja $h:$m. Lachez les films humhum et allez vous coucher ca vaudras mieux"}
	3  {putserv "PRIVMSG $chan :dites il est quand meme $h:$m, c'est pas la peine de vous priver de sommeil pour moi"}
	4  {putserv "PRIVMSG $chan :Oula $h:$m et on n'est la a discuter.... qui qui va pas savoir se lever tout a l'heure ? moi perso j'm'en tape j'suis un bot"}
	5  {putserv "PRIVMSG $chan :Il est $h:$m Paris s'eveille. Et vous n'avez pas sommeil ?"}
	6  {putserv "PRIVMSG $chan :dring dring dring... Hey ouai c'est le reveil deja $h:$m .Encore une nuit blanche"}
	7  {putserv "PRIVMSG $chan :Un cafe creme pour moi et de la confiture de fraises pour mes brioches. Merci"}
	8  {putserv "PRIVMSG $chan :Allez les enfants il est $h:$m, faut se preparer pour l'ecole"}
	9  {putserv "PRIVMSG $chan :Bon $h:$m, qui a ramener le journal ce matin ?"}
	10 {putserv "PRIVMSG $chan :AHHHHH $h:$m enfin l'heure de la pause cafe"}
	11 {putserv "PRIVMSG $chan :P'pa t'es a la bourre.... les autres, courage plus qu'une heure et c'est la pause dej"}
	12 {putserv "PRIVMSG $chan :Enfin $h:$m, j'ai les crocs moi... bon y'a quoi au menu ?"}
	13 {putserv "PRIVMSG $chan :$h:$m...chut c'est le journal de TF1... Quel catastrophe vont ils encore nous pondre ?"}
	14 {putserv "PRIVMSG $chan :la vaisselle est faite, les gamins sont a l'ecole... hmmm $h:$m c'est une bonne heure pour la sieste devant les feux de l'amour"}
	15 {putserv "PRIVMSG $chan :Bon $h:$m l'aprem avance bien... on va commencer a preparer le gouter"}
	16 {putserv "PRIVMSG $chan :OUAIIIIIII il est %h:$m c'est l'heure du gouter. Je veux mon chocoBN avec la bouche qui sourit"}
	17 {putserv "PRIVMSG $chan :Ah, $h:$m !!  les chatteurs vont commencer a revenir (enfin apres les bouchons du retour)"}
	18 {putserv "PRIVMSG $chan :Chez nos amis outre manche $h:$m c'est la tea-time"}
	19 {putserv "PRIVMSG $chan :Ah ben il est deja $h:$m P'pa va pas tarder. On lui fais une blague ?"}
	20 {putserv "PRIVMSG $chan :Mettez France 3. il est $h:$m c'est bientot la meteo... qu'est ce qu'ils prevoient pour demain ?"}
	21 {putserv "PRIVMSG $chan :Comme d'hab $h:$m et rien a la TV.... Heureusement qu'on a $chan, qu'est ce qu'on s'emm...quiquinerais le soir sinon."}
	22 {putserv "PRIVMSG $chan :Allez les enfants il est deja $h:$m... c'est l'heure d'aller se coucher. Et il n'y a pas de ...mais heu... qui comptes"}
	23 {putserv "PRIVMSG $chan :Ah ben voila, il est $h:$m... les enfants sont au lit.. et XXL viens de reprendre l'antenne....Je vous vois v'nir canaillou..."}
	}
}

## horloge et Ephemeride

# annonce de l'heure
bind pub - !heure pub_time
 
proc pub_time {nick host and args} {
 
#appel des variables globales
global offset dst chan
## definition des variable heure-minutes-secondes
 
set h [clock format [clock seconds] -format "%H"]
set m [clock format [clock seconds] -format "%M"]
set s [clock format [clock seconds] -format "%S"]
if {$dst==1} {
        set h [expr $h+$offset+1]
        } else {
                set h [expr $h+$offset]
                }
if {$h==24} { set h 0 }
#envoi au chan
putserv "PRIVMSG $chan :DING DING DING au 3e Top il sera exactement $h:$m:$s"
putserv "PRIVMSG $chan :TOP... TOP... TOP"
}

# Ephemeride
bind pub - !ephemeride pub_ephemeride
 
proc pub_ephemeride {nick args} {
 
#appel des variable globales
global chan my_host my_user my_pass my_db

#definition des jour mois annee Njour Nsem
set nojour [clock format [clock seconds] -gmt true -format "%j"]e
set nosem [clock format [clock seconds] -gmt true -format "%V"]e
set date [clock format [clock seconds] -gmt true -format "le %a %d/%m/%Y"]

 
#mysql
# connection a la base mysql
set db_handle [mysqlconnect -host $my_host -user $my_user -password $my_pass -db $my_db ]

#definition de la date a rechercher
set dtable [clock format [clock seconds] -format "%d/%m"]

#creation de la requete SQL
set whereclause "WHERE JourMois='$dtable'"
set sql "SELECT * FROM saint $whereclause"

#envois de la requete au serveur
set result [mysqlquery $db_handle $sql]

#traitement de la reponse
if {[set row [mysqlnext $result]] != ""} {
	set saint [lindex $row 2]
	if {[lindex $row 1] != ""} {
	set dicton [lindex $row 1] 
	} else {
		set dicton "Faire les cent pas ou mettre la charrue avant les boeufs, ce n'est sans doute pas la bonne solution, alors, soyez patient... tout vient a  point..."
		}
	if {[lindex $row 4] != ""} {
	set anniv [lindex $row 4]
	} else {
	set anniv "personne aujourd'hui"
	}
 
	} else {
    		set saint ""
    		set dicton "Faire les cent pas ou mettre la charrue avant les boeufs, ce n'est sans doute pas la bonne solution, alors, soyez patient... tout vient a  point..."
		}

#envoi au chan
 
putserv "PRIVMSG $chan :Nous sommes $date. ($nojour jour de l'annee) Nous fetons $saint"
putserv "PRIVMSG $chan :Nous sommes dans la $nosem semaine de l'annee"
putserv "PRIVMSG $chan :Dicton du jour : $dicton"
putserv "PRIVMSG $chan :c'est l'anniversaire de : $anniv"

# deconnection de la base mysql
mysqlclose $db_handle
 
}
putlog "horlogebavarde.tcl $ver chargee avec succes"


A voir l'erreur, TCL doit prendre un nombre décimal pour un nombre octal.
En fait, c'est normal, car quand le nombre en question est précédé d'un 0 dans expr, il est automatiquement traité comme un nombre octal. D'ou le bug avec 08 09 etc => ce ne sont pas des nombres octaux valides.

Pour moins de problèmes, moi je dis, vaut mieux utiliser incr :
tcl
set h [clock format [clock seconds] -format "%H"]
set m [clock format [clock seconds] -format "%M"]
set s [clock format [clock seconds] -format "%S"]
if {$dst==1} {
        set h [expr $h+$offset+1]
        } else {
                set h [expr $h+$offset]
                }
if {$h==24} { set h 0 }



=> Après quelques changements:

tcl
set h [strftime "%H"]
incr h $offset
incr h $dst
if {$h == 24} { set h 0 }


Merci Artix j'ai testé ton idée, ca marche enfin correctement. Cependant une petite adaptation a due être apporté, à la place de
tcl
set h [strftime "%H"]


j'ai du utiliser
tcl
set h [strftime "%k"]


.
Mais bon le plus important c'est que le resultat attendu est obtenu.