Communauté Eggdrop
Annonce X minutes - Version imprimable

+- 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 : Annonce X minutes (/showthread.php?tid=1078)



Annonce X minutes - lesny - 22/11/2011

bonjour / bonsoir

j'ai DL ce TCL la donner par crazycats il y a un moment d ecela cependant quelque erreur subvienne

TCL
#fréquence en minutes
set freq 1
 
# la fonction d'affichage
proc message {} {
   puthelp "PRIVMSG #easyfurious :ceci est un message test"
   list [utimer $::freq message]
}
 
message



voila il est dit

#fréquence en minutes

hors cela et plutôt en second ce qui es assez chiant ^_^


et si possible je voudrais par exemple

mettre une annonce "bienvenue blabla" tous les 5 minutes

et "recherche de webmaster" tous les 10 minutes

etc...

si quelqu’un peux m'aider cela serais gentil

d'avance merci


RE: Annonce X minutes - uto - 22/11/2011

Un essai (je n'ai pas testé et il vaudrait mieux utiliser un namespace)
Code :
proc annonce5min { min hour day month year } {
set liste5min { {Voici un message diffusé toutes les 5 min} {Voici un autre message} }
    set reply5min [lindex $liste5min [rand [llength $liste5min]]]
    putserv "PRIVMSG #chan : ${reply5min}"
}
proc annonce10min { min hour day month year } {
set liste10min { {Voici un message diffusé toutes les 10 min} {Voici un autre message} }
    set reply10min [lindex $liste10min [rand [llength $liste10min]]]
    putserv "PRIVMSG #chan : ${reply10min}"
}
bind cron - "*/5 * * * *" annonce5min
bind cron - "*/10 * * * *" annonce10min

Remplacer #chan et les messages entres accolades
restart pour tester


RE: Annonce X minutes - CrazyCat - 22/11/2011

Effectivement, il y avait une erreur dans ce bout de code, utimer est en secondes. Ce qui est bien expliqué ici.
Et frakir a raison, depuis la sortie d'eggdrop 1.6.20, il vaut mieux utiliser le bind cron pour ce genre d'action.
Seul petit détail: le set dans la procédure, ça n'est pas top à mon avis.


RE: Annonce X minutes - lesny - 22/11/2011

bonjour / bonsoir

merci a vous deux cela a l'air de fonctionner je vous tiens au courant si deventuel erreur survienne

juste peut être une erreur mais => set reply10min [lindex $liste10min [rand [llength $liste5min]]]

ne serais pas => set reply10min [lindex $liste10min [rand [llength $liste10min]]] ????


RE: Annonce X minutes - CrazyCat - 22/11/2011

Si Smile
Un copié/collé malencontreux de frakir, je n'ai pas tout vérifié.

De toutes manières, les codes donnés ici ne sont pas à recopier tel quel mais à comprendre, ce que tu sembles avoir fait.


RE: Annonce X minutes - lesny - 22/11/2011

bonjour / bonsoir

merci Smile

cependant le timer de 10 minutes ne fonctionne pas Mad

ps: aucune erreur en pl Mad


RE: Annonce X minutes - CrazyCat - 23/11/2011

Je viens de vérifier si des crons qui se déclenchent en même temps ne posent pas de souci, la réponse est non.
Donc, peut-être une erreur dans ton script, peux tu le copier ici stp (sans rien en modifier) ? Merci


RE: Annonce X minutes - lesny - 23/11/2011

bonjour / bonsoir

voici le tcl


RE: Annonce X minutes - CrazyCat - 23/11/2011

Dans ta liste de messages "10 minutes", tu oublies de fermer une accolade.


RE: Annonce X minutes - aliasangelius - 24/11/2011

Bonjour,

Même avec la version d'eggdrop 1.6.20 il et possible de faire un timer en minutes sans utilisé bind cron.

Exemple d'un morceau de code tcl :

TCL
bind EVNT - init-server proc:initje
proc proc:initje { type } {
 
    #### salon sur lequel se déroule le timer #####
    set ::salon "#salon"
    #### temps minimum entre deux phrases #####
    set ::temps "60"
    #### temps aléatoire max à ajouter au temps minimum ####
    set ::add_temps "5"
    #### Phrases à faire répéter #####
    set ::phrases {
        "blablabla"
        "reblablabla"
    }
    set ::active 0
}
 
bind pub -|- !active onn
proc onn { nick uhost hand chan arg } {
    if [info exists ::active]&&($::active==1) {
        putserv "PRIVMSG $::salon :\0031Les Annonces sont déjà \0034activé\0031, veuillez d'abord les \0034désactivé avant de le relancer !"
        return
    }
    putserv "PRIVMSG $::salon :\0031Les Annonces sont \0034activé !"
    active
}
 
bind pub o|o !inactive off
proc off { nick uhost hand chan arg } {
    if ![info exists ::active]||($::active==0) {
        putserv "PRIVMSG $::salon :\0031Les Annonces sont déjà \0034déactivé !"
        return
    }
    putserv "PRIVMSG $::salon :\0031Les Annonces sont \0034désactivé !"
    set ::active 0
    foreach t [timers] {
        if {[lindex $t 1] == " active "} {
            killtimer [lindex $t 2]
        }
    }
}
 
proc active {} {
    set ::active 1
    set ::phrase [lindex $::phrases [rand [llength $::phrases]]]
    putserv "PRIVMSG $::salon :\0031Annonces : \0034 $::phrase\0031"
    timer [expr $::temps + [rand $::add_temps]] { active }
}





RE: Annonce X minutes - CrazyCat - 24/11/2011

CrazyCat a écrit :Et frakir a raison, depuis la sortie d'eggdrop 1.6.20, il vaut mieux utiliser le bind cron pour ce genre d'action.

alias_angelius a écrit :Même avec la version d'eggdrop 1.6.20 il et possible de faire un timer en minutes sans utilisé bind cron.

"Il vaut mieux" ne veut pas dire "il est imopssible".


RE: Annonce X minutes - aliasangelius - 25/11/2011

Oui,

Donc sa donnerais en exemple comme ceci :

TCL
bind cron - "*/5 * * * *" active
proc active { min hour day month weekday } {
set ::active 1
    set ::phrase [lindex $::phrases [rand [llength $::phrases]]]
    putserv "PRIVMSG $::salon :\0031Annonces : \0034 $::phrase\0031"
    timer [expr $::temps + [rand $::add_temps]] { active }
}



Si je ne me trompe pas ?


RE: Annonce X minutes - CrazyCat - 25/11/2011

Comme a dit uto sur #eggdrop: "Heu."


RE: Annonce X minutes - djkenny - 25/11/2011

alias_angelius a écrit :Oui,

Donc sa donnerais en exemple comme ceci :

TCL
bind cron - "*/5 * * * *" active
proc active { min hour day month weekday } {
set ::active 1
    set ::phrase [lindex $::phrases [rand [llength $::phrases]]]
    putserv "PRIVMSG $::salon :\0031Annonces : \0034 $::phrase\0031"
    timer [expr $::temps + [rand $::add_temps]] { active }
}



Si je ne me trompe pas ?

avec le bind cron + le timer tu vas faire exploser ton eggdrop Mad
de plus je ne vois pas de que fait la variable ::active ni pourquoi tu utilises une global pour $phrase


RE: Annonce X minutes - CrazyCat - 25/11/2011

Et je ne vois pas l'intérêt de chercher ce qu'il faudrait faire alors que frakir a déjà donné le code.