Communauté Eggdrop

Version complète : Annonce X minutes
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
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
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
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.
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]]] ????
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.
bonjour / bonsoir

merci Smile

cependant le timer de 10 minutes ne fonctionne pas Mad

ps: aucune erreur en pl Mad
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
bonjour / bonsoir

voici le tcl
Dans ta liste de messages "10 minutes", tu oublies de fermer une accolade.
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 }
}


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".
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 ?
Comme a dit uto sur #eggdrop: "Heu."
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
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.