Message automatique
#1
Bonjour,
J'ai un code "fonctionnel" sur un eggdrop qui lance un message toute les X minutes sur le salon prédéfini, hors mon soucis est que si je le passe sur un Windrop cela bug totalement et la phrase qui devrait être dite une fois est flood.
Je ne comprend pas trop pourquoi sous un eggdrop cela marche et pas sur un windrop si quelqu'un peu m'expliquer cela serais adorable ^^

Voici le code
TCL
#Salon ou le message va etre transmis
set salon_robot "#accueil"
# Message dit automatiquement toutes les X minutes : 120 (2h00)
set timerauto 120
# Liste des messages dit automatiquement 
set textauto {
"Hey coucou bienvenue par ici"
}
 
if {[string compare [string index $::timerauto 0] "!"] == 0} { set timer [string range $::timerauto 1 end] } { set timer [expr $::timerauto * 60] }
if {[lsearch -glob [utimers] "* go *"] == -1} { utimer $timer go }
proc go {} {
set phrase [lindex $::textauto [rand [llength $::textauto]]]
foreach chan $::salon_robot {
foreach line $::textauto { 
putserv "PRIVMSG $chan : $phrase"
}
}
if {[lsearch -glob [utimers] "* go *"] == -1} { utimer $::timer go }
}



A partir d'un eggdrop cela donne :
Code :
Hey coucou bienvenue par ici

A partir d'un windrop cela donne :
Code :
Hey coucou bienvenue par ici
Hey coucou bienvenue par ici
Hey coucou bienvenue par ici
Hey coucou bienvenue par ici

Merci d'avance de l'aide
Répondre
#2
Salut Poto,

Tiens au cas ou sa peut t'intêresser un code a l'arrache..

TCL
#########
# Animation #
#########
 
proc regul {arg} {
set arg [stripcodes abcugr $arg]
regsub -all "" $arg "" arg
regsub -all "" $arg "" arg
regsub -all "" $arg "" arg
regsub -all "" $arg "" arg
regsub -all "" $arg "" arg
regsub -all "" $arg "" arg
regsub -all "" $arg "" arg
set arg [stripcodes abcugr $arg]
return $arg
}
 
bind EVNT - init-server proc:initjeu
proc proc:initjeu { type } {
 
#### salon sur lequel se déroule le jeu #####
 
set ::salon "#accueil"

#############################################

#### temps minimum entre deux phrases #####
 
set ::temps "15"

########################

#### temps aléatoire max à ajouter au temps minimum ####
 
set ::add_temps "30"

############################################

#### Phrases à faire répéter #####
 
 
set ::phrases {
 
    "Hey coucou bienvenue par ici"
 
}

############################################
####### Fin de la config ###################
 
set ::active 0
}
 
bind pub o|o !active onn
proc onn { nick uhost hand chan arg } {
if [info exists ::active]&&($::active==1) {
putserv "PRIVMSG $::salon :Phrases déjà activé."
return
}
putserv "PRIVMSG $::salon :Phrases activé !"
active
}
 
bind pub o|o !inactive off
proc off { nick uhost hand chan arg } {
if ![info exists ::active]||($::active==0) {
putserv "PRIVMSG $::salon :Phrases est déjà déactivé !"
return
}
putserv "PRIVMSG $::salon :Phrases dé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]]]
set ::kickerz ""
set ::voicerz ""
putserv "PRIVMSG $::salon :\037\0036$::phrase\037\0036 !?"
set ::act 1
timer [expr $::temps + [rand $::add_temps]] { active }
}


Répondre Avertir
#3
Merci de ce code, mais j'aimerais bien finir ce que j'ai nettoyer
Je ne comprend toujours pas pour le Windrop .. j'ai aucune erreur en pl, même en ajoutant des putlogs
Répondre
#4
L'erreur viendrais pas du fait que tu ne kill pas ton timer par hasard ?
Sinon comme je t'es dit hier il faudrais voir niveau d'un return
Avec un return dans ce genre là :

TCL
#Salon ou le message va etre transmis
set salon_robot "#accueil"
# Message dit automatiquement toutes les X minutes : 120 (2h00)
set timerauto 120
# Liste des messages dit automatiquement 
set textauto {
    "Hey coucou bienvenue par ici"
}
 
proc go {} {
    set phrase [lindex $::textauto [rand [llength $::textauto]]]
    foreach chan $::salon_robot {
        foreach line $::textauto {
            putserv "PRIVMSG $chan : $phrase"
            return 0
        }
    }
    if {[lsearch -glob [utimers] "* go *"] == -1} { utimer $::timer go }
        if {[string compare [string index $::timerauto 0] "!"] == 0} { set timer [string range $::timerauto 1 end] } { set timer [expr $::timerauto * 60] }
}



Moi je le ferait comme ça ton code poto ensuite je suis pas sûr c'est à tester Smile
Répondre Avertir


Atteindre :


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