Petit soucis avec un script d'annonce de la saint du jour, etc...
#1
Bonjour

Je viens poste un petit script qui devrais annoncer la saint du jour, un dicton, levé de soleil etc.... Mais aussi dire les anniversaires des gens qui ont rentré leur anniversaire.

Mais un soucis au niveau de l'annonce de la saint de jour dicton levé de soleil quand je tape la commande !aujourdhui j'ai une erreure en PL

voici ce que ca me dis:
[00:38] Tcl error [aujourd:hui]: bad index "html": must be integer or end?-integer?

Par contre l'ajout des anniversaires fonctionne bien.

Voici le script

TCL
#################################################################################
#										#
# NOUVEAUJOUR.tcl affiche tous les jours à 00h15 et à 10h45 des informations	#
# sur le jour en cours (par exemple le saint du jour, le dicton du jour, heure	#
# du levé du soleil, etc).							#
# Ces informations peuvent être demandé à tout moment en tapant :		#
#			!aujourdhui						#
#										#
# De plus, vous pouvez mettre votre date d'anniversaire. Le bot le rappellera	#
# dans les infos du jour et vous souhaitera un bon anniv lorsque vous joindrez	#
# le channel. Pour add sa date de naissance :					#
#			/msg lebot monanniv <jj/mm/aaaa>			#
# Et pour voir celle de kk'un :							#
#			!anniv <nick>						#
#										#
#										#
#################################################################################

 
 
##### CONFIGURATION #####

### nom du channel sur lequel le bot affichera les informations du jour :
set nouveaujour(channel) "#delirium"

##### FIN DE LA CONFIGURATION #####

 
 
##### DEBUT DU PROGRAMME #####
 
 
bind pub - !aujourdhui aujourd:hui
 
proc aujourd:hui { nick uhost handle channel arg } {
	global nouveaujour
	if {$channel != $nouveaujour(channel)} { return 0 }
	putlog "#NOUVEAUJOUR# Consultation du jour par $nick sur $channel !"
	set res [catch { exec lynx -source http://www.ephemeride.com } x]
	if {$x != ""} {
		set reponse [string tolower $x]
	}
	set indextest [string first "img/sun.gif" $reponse]
 
	set test [bongettext "$reponse" "<td width=\"41\" class=\"info\">&nbsp;" "</td>" $indextest]
	set nouveaujour(leve_soleil) [lindex $test 0]
	set indextest [lindex $test 1]
 
	set test [bongettext "$reponse" "<td width=\"30\" class=\"info\">&nbsp;" "</td>" $indextest]
	set nouveaujour(couche_soleil) [lindex $test 0]
	set indextest [lindex $test 1]
 
        set indextest2 [string first "<font color=\"blue\">" $reponse]
 
        if { $indextest2 == -1 } {
                set test [bongettext "$reponse" "<font color=\"#ff5f5f\">" "</font>" $indextest]
        } else {
                set test [bongettext "$reponse" "<font color=\"blue\">" "</font>" $indextest]
        }
	set taille [llength $test]
	set nouveaujour(saint) [lrange $test 0 [expr $taille - 2]]
 
	set test [bongettext "$reponse" "«&nbsp;" "&nbsp;»" $indextest]
	regsub -all "\"" $test "-" test
	set taille [llength $test]
	set indextest [lindex $test [expr $taille - 1]]
	set nouveaujour(dicton) [lrange $test 0 [expr $taille - 2]]
 
	set test [bongettext "$reponse" "«&nbsp;" "&nbsp;»" $indextest]
	regsub -all "\"" $test "-" test
	set taille [llength $test]
	set indextest [lindex $test [expr $taille - 1]]
	set nouveaujour(proverbe) [lrange $test 0 [expr $taille - 2]]
 
	puthelp "privmsg $channel :\0033\[[lrange [ctime [unixtime]] 0 2]\] \003\0036Soleil\003 : levé à [traitementtexte [traitementhtml $nouveaujour(leve_soleil)]] et couché à [traitementtexte [traitementhtml $nouveaujour(couche_soleil)]] !"
	puthelp "privmsg $channel :\0033\[[lrange [ctime [unixtime]] 0 2]\]\003 \0036Fête du Jour\003 : [traitementtexte [traitementhtml $nouveaujour(saint)]]"
	puthelp "privmsg $channel :\0033\[[lrange [ctime [unixtime]] 0 2]\]\003 \0036Dicton du Jour\003 : \" [traitementtexte [traitementhtml $nouveaujour(dicton)]] \""
	puthelp "privmsg $channel :\0033\[[lrange [ctime [unixtime]] 0 2]\]\003 \0036Proverbe du Jour\003 : \" [traitementtexte [traitementhtml $nouveaujour(proverbe)]] \""
	foreach user [userlist $nouveaujour(channel)] {
		set un_anniv [un_anniv $user]
		if {$un_anniv != ""} {
			if {[lrange [ctime [unixtime]] 1 2] == "[lindex $un_anniv 1] [lindex [string trimleft $un_anniv 0] 0]" } {
				puthelp "privmsg $channel :\0033\[[lrange [ctime [unixtime]] 0 2]\] \003\0036Anniversaire du jour\003 : $user !!"
			}
		}
	}
	return 0
}
 
 
bind time - "* * * * *" nouveau_jour
 
proc nouveau_jour { min hour day month year } {
	global nouveaujour botnick
	set nouveaujour(ok) 0
	if {[lindex [ctime [unixtime]] 3] == "00:15:00"} {
		set nouveaujour(ok) 1
		puthelp "privmsg $nouveaujour(channel) :\002~~~~ Voila une nouvelle journée qui commence ! ~~~~\002"
	}
	if {[lindex [ctime [unixtime]] 3] == "10:45:00"} {
		set nouveaujour(ok) 1
		puthelp "privmsg $nouveaujour(channel) :\002~~~~ nouveaujour ! Voila pour les leves-tards ... ~~~~\002"
	}
	if {$nouveaujour(ok)} {
		set res [catch { exec lynx -source http://www.ephemeride.com } x]
		if {$x != ""} {
			set reponse [string tolower $x]
		}
		set indextest [string first "img/sun.gif" $reponse]
 
		set test [bongettext "$reponse" "<td width=\"41\" class=\"info\">&nbsp;" "</td>" $indextest]
		set nouveaujour(leve_soleil) [string range [lindex $test 0] 1 end]
		set indextest [lindex $test 1]
 
		set test [bongettext "$reponse" "<td width=\"30\" class=\"info\">&nbsp;" "</td>" $indextest]
		set nouveaujour(couche_soleil) [lindex $test 0]
		set indextest [lindex $test 1]
 
		set indextest2 [string first "<font color=\"blue\">" $reponse]
 
		if { $indextest2 == -1 } {
			set test [bongettext "$reponse" "<font color=\"#ff5f5f\">" "</font>" $indextest]
		} else {
			set test [bongettext "$reponse" "<font color=\"blue\">" "</font>" $indextest]
		}
		set taille [llength $test]
		set nouveaujour(saint) [lrange $test 0 [expr $taille - 2]]
 
		set test [bongettext "$reponse" "«&nbsp;" "&nbsp;»" $indextest]
		regsub -all "\"" $test "-" test
		set taille [llength $test]
		set indextest [lindex $test [expr $taille - 1]]
		set nouveaujour(dicton) [lrange $test 0 [expr $taille - 2]]
 
		set test [bongettext "$reponse" "«&nbsp;" "&nbsp;»" $indextest]
		regsub -all "\"" $test "-" test
		set taille [llength $test]
		set indextest [lindex $test [expr $taille - 1]]
		set nouveaujour(proverbe) [lrange $test 0 [expr $taille - 2]]
 
		puthelp "privmsg $nouveaujour(channel) :\0033\[[lrange [ctime [unixtime]] 0 2]\] \003\0036Soleil\003 : levé à [traitementtexte [traitementhtml $nouveaujour(leve_soleil)]] et couché à [traitementtexte [traitementhtml $nouveaujour(couche_soleil)]] !"
		puthelp "privmsg $nouveaujour(channel) :\0033\[[lrange [ctime [unixtime]] 0 2]\]\003 \0036Fête du Jour\003 : [traitementtexte [traitementhtml $nouveaujour(saint)]]"
		puthelp "privmsg $nouveaujour(channel) :\0033\[[lrange [ctime [unixtime]] 0 2]\]\003 \0036Dicton du Jour\003 : \" [traitementtexte [traitementhtml $nouveaujour(dicton)]] \""
		puthelp "privmsg $nouveaujour(channel) :\0033\[[lrange [ctime [unixtime]] 0 2]\]\003 \0036Proverbe du Jour\003 : \" [traitementtexte [traitementhtml $nouveaujour(proverbe)]] \""
		foreach user [userlist $nouveaujour(channel)] {
			set un_anniv [un_anniv $user]
			if {$un_anniv != ""} {
				if {[lrange [ctime [unixtime]] 1 2] == "[lindex $un_anniv 1] [lindex [string trimleft $un_anniv 0] 0]" } {
					puthelp "privmsg $nouveaujour(channel) :\0033\[[lrange [ctime [unixtime]] 0 2]\] \003\0036Anniversaire du jour\003 : $user !!"
				}
			}
		}
		return 0
	}
}

### /msg lebot monanniv <jj/mm/aaaa>
 
bind msg - monanniv monanniv:msg
 
proc monanniv:msg {nick host hand arg} {
	global botnick
	if {($arg == "") || ([string length $arg] != 10)} {
		puthelp "notice $nick :Commande : \002/msg $botnick monanniv <jj/mm/aaaa>\002"
		puthelp "notice $nick :Tapez : \002/msg $botnick finanniv\002 pour que votre date d'anniversaire soit supprimé de la mémoire du bot."
		return 0
	} else {
		set monanniv_jour [string range $arg 0 1]
		set monanniv_mois [string range $arg 3 4]
		set monanniv_annee [string range $arg 6 9]
		set monanniv_mois [datefr_dateus $monanniv_mois]
		setuser $hand XTRA ANNIV "$monanniv_jour $monanniv_mois $monanniv_annee"
		set monanniv_mois [dateus_datefr $monanniv_mois]
		puthelp "notice $nick :Votre anniversaire est le $monanniv_jour $monanniv_mois $monanniv_annee"
		save
		return 0
	}
}

### !anniv <handle>
 
bind pub - !anniv anniv:pub
 
proc anniv:pub {nick host hand chan arg} {
	global botnick
	if {$arg == ""} {
		puthelp "notice $nick :Commande : \002!anniv <nick_de_la_personne_dans_le_bot>\002"
		return 0
	} else {
		set handle [lindex $arg 0]
		if {![validuser $handle]} {
			puthelp "notice $nick :Désolé mais je ne connais pas $handle !"
			return 0
		} else {
			set anniv [un_anniv $handle]
			if {$anniv == ""} {
				puthelp "privmsg $chan :Désolé, mais $handle n'a pas d'anniversaire d'enregistré !"
				puthelp "privmsg $chan :Si vous voulez enregistrer votre date d'anniversaire, tapez : /msg $botnick monanniv <jj/mm/aaaa>"
				return 0
			} else {
				set anniv_mois [dateus_datefr [lindex $anniv 1]]
				puthelp "privmsg $chan :$handle est né le [lindex $anniv 0] $anniv_mois [lindex $anniv 2]"
				return 0
			}
		}
	}
	return 0
}

 
### Fonction pour convertir la date d'anniv des gens !
 
proc datefr_dateus { moisfr } {
	if {$moisfr == "01"} { return "Jan" }
	if {$moisfr == "02"} { return "Feb" }
	if {$moisfr == "03"} { return "Mar" }
	if {$moisfr == "04"} { return "Apr" }
	if {$moisfr == "05"} { return "May" }
	if {$moisfr == "06"} { return "Jun" }
	if {$moisfr == "07"} { return "Jul" }
	if {$moisfr == "08"} { return "Aug" }
	if {$moisfr == "09"} { return "Sep" }
	if {$moisfr == "10"} { return "Oct" }
	if {$moisfr == "11"} { return "Nov" }
	if {$moisfr == "12"} { return "Dec" } 
	return 0
}
 
proc dateus_datefr { moisus } {
	if {$moisus == "Jan"} { return "Janvier" }
	if {$moisus == "Feb"} { return "Fevrier" }
	if {$moisus == "Mar"} { return "Mars" }
	if {$moisus == "Apr"} { return "Avril" }
	if {$moisus == "May"} { return "Mai" }
	if {$moisus == "Jun"} { return "Juin" }
	if {$moisus == "Jul"} { return "Juillet" }
	if {$moisus == "Aug"} { return "Aout" }
	if {$moisus == "Sep"} { return "Septembre" }
	if {$moisus == "Oct"} { return "Octobre" }
	if {$moisus == "Nov"} { return "Novembre" }
	if {$moisus == "Dec"} { return "Decembre" }
}
 
proc un_anniv { handle } {
	set anniv [getuser $handle XTRA ANNIV]
	if {$anniv == ""} {
		return ""
	} else {
		return "$anniv"
	}
}

### bon anniversaire on join
bind join - * join:anniv
 
proc join:anniv {nick host handle channel} {
	global nouveaujour
	if {![validuser $handle]} { return 0 }
	if {$channel != $nouveaujour(channel)} { return 0 }
	set un_anniv [un_anniv $handle]
	if {$un_anniv != ""} {
		if {[lrange [ctime [unixtime]] 1 2] == "[lindex $un_anniv 1] [lindex [string trimleft $un_anniv 0] 0]" } {
			puthelp "privmsg $channel :Bon anniversaire $nick !!!"
		}
	}
	return 0	
}

 
### outils
 
proc traitementhtml { contenu } {
	regsub -all "&lt;" $contenu "<" contenu
	regsub -all "&gt;" $contenu ">" contenu
	regsub -all "&amp;" $contenu "et" contenu
	regsub -all "&quot;" $contenu "" contenu
	regsub -all "&Aacute;" $contenu "Á" contenu
	regsub -all "&Acirc;" $contenu "Â" contenu
	regsub -all "&Agrave;" $contenu "À" contenu
	regsub -all "&Aring;" $contenu "Å" contenu
	regsub -all "&Atilde;" $contenu "Ã" contenu
	regsub -all "&Auml;" $contenu "Ä" contenu
	regsub -all "&Ccedil;" $contenu "Ç" contenu
	regsub -all "&Eacute;" $contenu "É" contenu
	regsub -all "&Ecirc;" $contenu "Ê" contenu
	regsub -all "&Egrave;" $contenu "È" contenu
	regsub -all "&Iacute;" $contenu "͍" contenu
	regsub -all "&Icirc;" $contenu "Î" contenu
	regsub -all "&Igrave;" $contenu "í" contenu
	regsub -all "&Iuml;" $contenu "Ï" contenu
	regsub -all "&Ntilde;" $contenu "Ñ" contenu
	regsub -all "&Oacute;" $contenu "Ó" contenu
	regsub -all "&Ocirc;" $contenu "Ô" contenu
	regsub -all "&Ograve;" $contenu "Ò" contenu
	regsub -all "&Oslash;" $contenu "Ø" contenu
	regsub -all "&Otilde;" $contenu "Õ" contenu
	regsub -all "&Ouml;" $contenu "Ö" contenu
	regsub -all "&Uacute;" $contenu "Ú" contenu
	regsub -all "&Ucirc;" $contenu "Û" contenu
	regsub -all "&Ugrave;" $contenu "Ù" contenu
	regsub -all "&Uuml;" $contenu "í" contenu
	regsub -all "&Yacute;" $contenu "Ý" contenu
	regsub -all "&aacute;" $contenu "á" contenu
	regsub -all "&aelig;" $contenu "ae" contenu
	regsub -all "&oelig;" $contenu "oe" contenu
	regsub -all "&agrave;" $contenu "à" contenu
	regsub -all "&aring;" $contenu "å" contenu
	regsub -all "&atilde;" $contenu "ã" contenu
	regsub -all "&auml;" $contenu "ä" contenu
	regsub -all "&ccedil;" $contenu "ç" contenu
	regsub -all "&eacute;" $contenu "é" contenu
	regsub -all "&euml;" $contenu "ë" contenu
	regsub -all "&iacute;" $contenu "í" contenu
	regsub -all "&egrave;" $contenu "è" contenu
	regsub -all "&igrave;" $contenu "ì" contenu
	regsub -all "&iuml;" $contenu "ï" contenu
	regsub -all "&ntilde;" $contenu "ñ" contenu
	regsub -all "&oacute;" $contenu "ó" contenu
	regsub -all "&ocirc;" $contenu "ô" contenu
	regsub -all "&acirc;" $contenu "â" contenu
	regsub -all "&ecirc;" $contenu "ê" contenu
	regsub -all "&ograve;" $contenu "ò" contenu
	regsub -all "&icirc;" $contenu "î" contenu
	regsub -all "&otilde;" $contenu "õ" contenu
	regsub -all "&ouml;" $contenu "ö" contenu
	regsub -all "&uacute;" $contenu "ú" contenu
	regsub -all "&ucirc;" $contenu "û" contenu
	regsub -all "&ugrave;" $contenu "ù" contenu
	regsub -all "&uuml;" $contenu "ü" contenu
	regsub -all "&yuml;" $contenu "ÿ" contenu
	regsub -all "&AElig;" $contenu "AE" contenu
	regsub -all "&OElig;" $contenu "OE" contenu
	regsub -all "&reg;" $contenu "®" contenu
	regsub -all "&copy;" $contenu "©" contenu
	regsub -all "&trade;" $contenu "(tm)" contenu
	regsub -all "&plusmn;" $contenu "±" contenu
	regsub -all "&deg;" $contenu "°" contenu
	regsub -all "&sup1;" $contenu "¹" contenu
	regsub -all "&sup2;" $contenu "²" contenu
	regsub -all "&sup3;" $contenu "³" contenu
	regsub -all "&times;" $contenu "×" contenu
	regsub -all "&divide;" $contenu "÷" contenu
	regsub -all "&euro;" $contenu "euro" contenu
	regsub -all -nocase "<p>" $contenu "" contenu
	regsub -all -nocase "</p>" $contenu "" contenu
	regsub -all -nocase "<i>" $contenu "" contenu
	regsub -all -nocase "</i>" $contenu "" contenu
	regsub -all -nocase "<b>" $contenu "" contenu
	regsub -all -nocase "<u>" $contenu "" contenu
	regsub -all -nocase "</u>" $contenu "" contenu
	regsub -all -nocase "</b>" $contenu "" contenu
	regsub -all -nocase "<br>" $contenu "" contenu
	regsub -all -nocase "Å“" $contenu "oe" contenu
	regsub -all -nocase "&laquo;" $contenu "\"" contenu
	regsub -all -nocase "&raquo;" $contenu "\"" contenu
	regsub -all -nocase "{" $contenu "" contenu
	regsub -all -nocase "}" $contenu "" contenu
	return $contenu
}
 
 
proc traitementtexte { contenu } {
	regsub -all "{" $contenu "" contenu
	regsub -all "}" $contenu "" contenu
	regsub -all "\"" $contenu "\'" contenu
	return $contenu
}
 
proc bongettext { data start end index } {
	set index0 [string first $start $data $index]
	set index1 [expr $index0 + [string length $start]]
	set index2 [string first $end $data $index1]
	set index2 [expr $index2 - 1]
	set index  [expr $index2 + [string length $end]]
	return "[string range $data $index1 $index2] $index"
}



Si quelqu'un a une petite idée....

Merci de votre futur aide
Répondre Avertir
#2
salut

jais un souci avec ce script, quand je tape !aujourdhui

jais cette erreur en pl

Tcl error [aujourd:hui]: bad index "": must be integer?[+-]integer? or end?[+-]integer?

jais beau regarde mais j'arrive pas a trouver, si quelqu'un serais bien simpa pour m'aider sa serais merveilleux.

merci d'avance Smile
Répondre Avertir
#3
Salut,

loulou7593 a écrit :Bonjour

Je viens poste un petit script qui devrais annoncer la saint du jour, un dicton,

Sur Ubuntu et Debian tu as le script calendar qui te donne déjà pas mal d'infos, ça éviterait de dépendre d'un site que tu ne maîtrises pas.
Voilà ce que ça donne par exemple : http://pasdenom.info/ephemeride/
Faudrait que je trie un peu ou que je lise le man de calendar pour n'avoir que du français.

Un jour faudrait que j'essaie de me mettre au tcl pour faire un script fortune ou ephemeride.
Répondre Avertir
#4
Depuis plus de 2 ans que ce message a été posté, je pense que le site a changé. Donc le script ne fonctionne plus comme il faut.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté