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


Script pour afficher la date à une heure donnée (ephemeride)
#1
Bonjour,

Je cherchais un script qui serait capable de faire dire à mon eggdrop à une heure donnée "La date est jour/mois/année"

Je suppose que ce genre de chose doit vous sembler tout con mais mes compétences en codages TCL sont très minces (même si je me soigne)

J'ai donc réussi à trouver un script qui se base sur le site http://www.ephemeride.com/ pour annoncer à une (ou plusieurs) heures données différentes infos prise sur le site.

Voici le code :


tcl
# nouveaujour (13/06/2003)							#
#################################################################################
#    ___          ___           ___           ___          _____    		#
#   /  /\        /  /\         /  /\         /  /\        /  /::\   		#
#  /  /:/       /  /::\       /  /::\       /  /::\      /  /:/\:\  		#
# /__/::\      /  /:/\:\     /  /:/\:\     /  /:/\:\    /  /:/  \:\ 		#
# \__\/\:\    /  /:/~/::\   /  /:/~/:/    /  /:/  \:\  /__/:/ \__\:|		#
#    \  \:\  /__/:/ /:/\:\ /__/:/ /:/___ /__/:/ \__\:\ \  \:\ /  /:/		#
#     \__\:\ \  \:\/:/__\/ \  \:\/:::::/ \  \:\ /  /:/  \  \:\  /:/ 		#
#     /  /:/  \  \::/       \  \::/~~~~   \  \:\  /:/    \  \:\/:/  		#
#    /__/:/    \  \:\        \  \:\        \  \:\/:/      \  \::/   		#
#    \__\/      \  \:\        \  \:\        \  \::/        \__\/    		#
#                \__\/         \__\/         \__\/                  		#
#										#
#										#
#					 ___					#
#  			     ___        /  /\                  			#
#  			    /  /\      /  /:/                  			#
#  			   /  /:/     /  /:/       ___     ___ 			#
#  			  /  /:/     /  /:/  ___  /__/\   /  /\			#
#  			 /  /::\    /__/:/  /  /\ \  \:\ /  /:/			#
# 			/__/:/\:\   \  \:\ /  /:/  \  \:\  /:/ 			#
# 			\__\/  \:\   \  \:\  /:/    \  \:\/:/  			#
# 			     \  \:\   \  \:\/:/      \  \::/   			#
# 			      \__\/    \  \::/        \__\/    			#
# 			                \__\/                  			#
#										#
#										#
#					web  : http://tcl.lagon-bleu.org	#
#					mail : jarod_angel@yahoo.fr		#
#					IRC  : Jarod_@IRCNet #buffy		#
#					       Asco@UNDERNet #tyranz		#
#										#
#################################################################################
#										#
# 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>						#
#										#
# HTTP.TCL est nécessaire ! ( http://jarodirc.free.fr/tcl/http.tcl )		#
#										#
#################################################################################
 
 
 
##### CONFIGURATION #####
 
### nom du channel sur lequel le bot affichera les informations du jour :
set nouveaujour(channel) "#channel"
 
##### 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"
}
 
 
putlog "\0032NOUVEAUJOUR.TCL\003 (\0031313/06/2003\003) par Jarod_"


Bien évidement j'ai changé la ligne où il y a besoin de renseigner le chan où les infos doivent être echoed :

Code:
set nouveaujour(channel) "#channel"
Ensuite j'ai trouvé les deux lignes où l'on set les heures auxquelles le script doit se déclencher.

Quand sur le chan en question j'essaye d'éxécuter le trigger "!aujourdhui" j'ai cette erreur en PL :

Code:
[11:43:35] <MonBot> [11:42:58] #NOUVEAUJOUR# Consultation du jour par 0wner sur #animateurs !
[11:43:35] <MonBot> [11:42:58] Tcl error [aujourd:hui]: bad index "": must be integer?[+-]integer? or end?[+-]integer?
Avez-vous une idée de pourquoi cette erreur et si le script est trop ancien alors m'aiguiller sur le fait de faire dire à mon bot la date tous les jours à une heure donnée.

Merci par avance de l'aide que vous pourrez m'apporter.

Bonne journée.


Messages In This Thread
Script pour afficher la date à une heure donnée (ephemeride) - by conscience - 01/06/2013, 11:58
RE: Script d'ephemeride - by MrStephane - 01/06/2013, 17:44
RE: Script d'ephemeride - by conscience - 01/06/2013, 18:03
RE: Script d'ephemeride - by conscience - 02/06/2013, 11:00

Possibly Related Threads…
Thread Author Replies Views Last Post
  Modifier le script du trivia pour défiler les questions dans l'ordre Mimisth 2 3,551 05/12/2015, 19:45
Last Post: MisterS
  aide pour un script svp s2drk 3 5,087 11/08/2014, 23:23
Last Post: CrazyCat
  aide pour le script Nostromo1st 13 8,268 16/09/2013, 16:24
Last Post: Nostromo1st
  [Demande] Afficher un messsage avec une commande lilo 2 3,924 02/08/2013, 09:59
Last Post: lilo
  Aide pour faire un script TCL Ahriman 6 6,358 01/07/2012, 00:13
Last Post: Ahriman
  Afficher les résultats sur une seule ligne ArKeNiS 3 4,789 25/09/2011, 14:24
Last Post: ArKeNiS
  Je suis bloquer pour mon 1er script NesCrex 6 5,680 24/02/2011, 22:53
Last Post: CrazyCat
  Aide pour un script... simple ? akya 8 6,291 15/07/2010, 22:57
Last Post: CrazyCat
  Aide pour modifier un script de quote t1bz 12 8,001 05/06/2010, 12:16
Last Post: t1bz
  adduser et modification de donnée avec accès sql foufou 3 4,003 01/03/2010, 21:42
Last Post: fedora

Forum Jump:


Users browsing this thread: 1 Guest(s)