+- Communauté Eggdrop (https://forum.eggdrop.fr)
+-- Forum : Eggdrop et TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=8)
+--- Forum : Scripts TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=4)
+--- Sujet : Script pour afficher la date à une heure donnée (ephemeride) (/showthread.php?tid=1347)
Script pour afficher la date à une heure donnée (ephemeride) - conscience - 01/06/2013
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.
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.
(01/06/2013, 17:44)MrStephane a écrit : allo conscience
je ne c'est pas si sa peut t'aider
mais jais ce script la que moi j'utilise.
voici le script.
Bonjour MrStephane,
Merci pour avoir pris le temps de me répondre.
Si je ne me trompe pas ton script echo sur le chan l'heure qu'il est avec le trigger ?
De mon côté ce que j'aimerais c'est que le bot, tout seul sans avoir besoin de trigger, à une ou plusieurs heures données, écrive sur le #chan par exemple : "Un nouveau jour vient de naître : nous sommes le lundi 26 juin 2013" (c'est mon côté poète)
Bon j'essaye de trouver ma soluce au moins pour afficher la date, le script en lui-même je ne pense pas y arriver tout seul sans votre aide
J'ai vu qu'il existait une commande "strftime" et j'ai pensé à un genre de "script"
Désolé par avance aux puristes car je risque d'écrire de grosses bêtises, je ne me base que sur de l'empirisme en regardant et en essayant de comprendre quelques bouts de scripts par-ci par-là !
tcl
if{[lindex[ctime [unixtime]]3] == "08:00:00"}{
puthelp "privmsg #animateurs :\002Un nouveau jour se lève ! Nous sommes le : [strftime %A %e %B %Y]\002"}
Dans mon esprit le script check l'heure du serveur et regarde si elle correspond à 8h00 (du matin), si oui elle envoie un message au serveur (basse priorité) et et lui demande d'afficher la phrase en gras sur le channel #animateurs. J'ai mis le "strftime" et ses arguments entre-crochet mais je ne sais pas trop...
Qu'en pensez-vous ? En espérant ne pas trop avoir écrit n'importe quoi !
Est-ce que cela a des chances de fonctionner tel quel ? Ou faut-il ajouter une procédure ou autre ?
Niveau test, j'ai donc créé un newday.tcl dans mon rep /scripts
J'ai ensuite ajouter une ligne dans mon eggdrop.conf "source /scripts/newday.tcl"
J'ai fait un .restart et un .rehash en PL
Quand l'heure précisée dans le script est arrivée... rien ni en PL ni sur le chan #animateurs
Help
RE: Script pour afficher la date à une heure donnée (ephemeride) - CrazyCat - 02/06/2013
Quel bind déclenche la procédure contenant ce code ?
Et figure toi que pour déclencher une procédure à un moment donné, il y a le bind time
Pour appeler une procédure "aujourd'hui" tous les jours à 08h00 et 10h30 :
tcl
bind time - "00 08 * * *" aujourdhui
bind time - "30 10 * * *" aujourdhui
RE: Script pour afficher la date à une heure donnée (ephemeride) - conscience - 02/06/2013
(02/06/2013, 18:16)CrazyCat a écrit : Quel bind déclenche la procédure contenant ce code ?
Et figure toi que pour déclencher une procédure à un moment donné, il y a le bind time
Pour appeler une procédure "aujourd'hui" tous les jours à 08h00 et 10h30 :
tcl
bind time - "00 08 * * *" aujourdhui
bind time - "30 10 * * *" aujourdhui
Tu viens d'éclairer ma journée, je vais me pencher sur ton message.
Du coup le "if" ne sert plus à rien et je suppose qu'il faut je crée une "proc" "aujourdhui"
J'ai bon ?
Merci encore, je te (vous) tiens au courant de mes avancées
RE: Script pour afficher la date à une heure donnée (ephemeride) - CrazyCat - 02/06/2013
C'est exactement ça.
RE: Script pour afficher la date à une heure donnée (ephemeride) - conscience - 03/06/2013
Salut !
Alors voici le script que je viens de load :
tcl
bind time - "00 08 * * *" say:time
bind time - "33 07 * * *" say:time
bind pub - "!time" say:timeproc say:time{nick uhost handle chan args}{set ajd [clockformat[clock seconds] -format"Un nouveau jour s'est levé sur Pyramide il est %H:%M et nous sommes le %A %d %B %Y" -local fr]
putserv "privmsg $chan :$ajd"}
putlog "\002Script date du jour chargé\002"
J'ai rajouté un trigger "!time" qui fonctionne parfaitement.
Par contre à l'heure indiquée je n'ai rien qui s'affiche, je pense que c'est parce que je n'ai pas précisé de channel en particulier...
Il faut que je me penche sur ça : {nick uhost handle chan args} où j'avoue avoir copié bêtement sans trop comprendre
J'aimerai que le trigger fonctionne sur tous les chan où l'egg est présent et que la phrase s'affiche automatiquement sur UN channel en particulier
Merci de votre aide, c'est précieux pour un débutant comme moi qui tâtonne de façon empirique.
RE: Script pour afficher la date à une heure donnée (ephemeride) - aliasangelius - 03/06/2013
Bonjour,
Je pense que sa devrez t'aider.. C'est du vite fait à l'arrache bien sur mais le principe et la si je ne me trompe pas..
tcl
namespaceeval ::ann{
procsal { min hour day month year }{set lis8h {Un nouveau jour s'est levé sur Pyramide il est %H:%M et nous sommes le %A %d %B %Y"}
foreach c [channels] {
putserv "PRIVMSG $c :${lis8h}}}
bind cron - "/8 * * * * *" procsal
}
RE: Script pour afficher la date à une heure donnée (ephemeride) - CrazyCat - 03/06/2013
Tes binds time et pub appellent la même procédure, laquelle ne reçoit pas les mêmes informations.
Il faut que tu fasses une procédure "intermédiaire" pour l'un des deux appels.
Exemple:
tcl
bind time - "00 08 * * *" say:time
bind time - "33 07 * * *" say:time
bind pub - "!time" say:pubtime
set tchan "#bla"
# ici la procédure globaleproc say:time{ho mi da mo ye}{set ajd [clockformat[clock seconds] -format"Un nouveau jour s'est levé sur Pyramide il est %H:%M et nous sommes le %A %d %B %Y" -local fr]
putserv "privmsg $::tchan :$ajd"}
# ici la procédure appelée par !timeproc say:pubtime {nick uhost handle chan args}{if{[string tolower $chan]!= [string tolower $::tchan]}{return0;} # Ligne juste au dessus : on ne réagit que si c'est sur le canal où on doit afficher l'heure
say:time00000}
putlog "\002Script date du jour chargé\002"
RE: Script pour afficher la date à une heure donnée (ephemeride) - conscience - 04/06/2013
Et bien merci à Aliasangelius et CrazyCat pour leurs conseils !
J'y vois maintenant beaucoup plus clair
Il faut juste que je comprenne la 1ère ligne de chacune de tes procédures, surtout ce qui est entre {}
tcl
proc say:time{ho mi da mo ye}
tcl
proc say:pubtime {nick uhost handle chan args}
En tout cas merci pour votre aide toujours très précieuse, je suis ravi d'être tombé sur votre forum même si je n'y apporte pas grand chose côté TCL.
Bonne journée tout le monde !
RE: Script pour afficher la date à une heure donnée (ephemeride) - aliasangelius - 04/06/2013
Salut,
tcl
proc say:time{ho mi da mo ye}
Ceci et des raccourcis de : hour, min, day, month, year tout comme si tu avais :
tcl
proc:blabla { nick host hand chan arg }[tcl]
Tu peut transformer sa en :
[tcl]proc:blabla { n h h c a }
Ensuite tu retrouve par exemple si tu doit appeler $nick en $n
Tu vois le principe ?
Après pour ce qui la seconde procédure :
tcl
proc say:pubtime {nick uhost handle chan args}
nick correspond par exemple à la personne qui exécute la commande !op.
Exemple tu va taper !op le bot va éxécuter le mode +o sur $nick qui et toi.
uhost = le host moi perso je fait jamais uhost mais host directement..
handle = ton accès plus ou moins dans l'eggdrop.
Exemple lorsque tu es en pl tu tape .match * il va te sortir les pseudos enregistré dans sa base de données plus exactement les handle c'est ça en faite.
chan c'est ce qui correspond au salon lorsque tu appel $chan
Exemple tu et sur #toto et tu tape !op le bot va faire : mode +o $nick sur $chan et $chan correspond à #toto.. Même si selon moi il et préférable de mettre un "set chan [lindex $arg 2] Par exemple"
et args tu l'utilise lorsque tu appel par exemple la victime ou une autre utilisation.
Exemple $nick viens de kick $args sur $chan même si $args moi je préfére pareil "set args..." avec un split sur arg celon la fonction..
En gros c'est ça
RE: Script pour afficher la date à une heure donnée (ephemeride) - CrazyCat - 04/06/2013
Ce que dit alias est juste, en gros, à un détail près, et très important.
aliasangelius a écrit :Ceci et des raccourcis de : hour, min, day, month, year
Ce ne sont pas du tout des raccourcis mais des nommages de variables.
Un bind time envoit 5 éléments à la procédure. Il faut donc que la déclaration de la procédure contienne l'affectation de ces éléments à des variables utilisables.
Ensuite, le nommage n'a pas ou peu d'importance, le but est juste de rendre le code relativement lisible et explicite.
Tu vois d'ailleurs l'appel explicite à la procédure:
tcl
say:time00000
Il y a bien 5 arguments envoyés.
Autre petit nota:
tcl
proc:blabla { n h h c a }
Ca, jamais : il y a deux fois l'affectation à $h...
RE: Script pour afficher la date à une heure donnée (ephemeride) - aliasangelius - 04/06/2013
Salut CC,
Oui en effet j'ai fait une erreur c'est plus explicité comment tu le dit
Pour ce qui et des n h h c a je suis d'accord avec toi je prenez un exemple tout comme j'aurais pus dire n h c a c'était pour expliquer plus ou moins.
Même si pour ma part faire ce type de chose dans une procédure je trouve ça idiot et inutile il et préférable de faire un code stricte !