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


petite astuce pour les binds pub/msg indentique
#1
il est parfois utile d avoir des binds pub et msg qui font la même chose
exemple: !op et /msg bot op #salon
il convient de faire une procédure par bind puisque celles ci n'acceptent pas le même nombre d arguments

tcl
bind pub o !op pub:op
bind msg o op msg:op
 
proc pub:op {nick host hand chan arg} {
    putserv "MODE $chan +o $nick"
}
 
proc msg:op {nick host hand arg} {
    set chan [lindex $arg 0]
    if ![validchan $chan] {
        putserv "NOTICE $nick :salon invalide."
        return
    }
    putserv "MODE $chan +o $nick"
}


seulement ça peut devenir extrêmement lassant de devoir copier/coller les procs alors que l'on peut gérer ca directement avec tcl
ici on déclarera seulement "args" pour la procédure (qui admet un nombre illimité d argument)

tcl
bind pub o !op test:op
bind msg o op test:op
 
proc test:op args {
    set arg [lassign $args nick host hand chan]
    if {[llength $chan]>1} {
        set arg [lassign $chan chan]
        if ![validchan $chan] {
            putserv "NOTICE $nick :salon invalide."
            return
        }
    }
    putserv "MODE $chan +o $nick"
}


on vas maintenant créer une proc qui gère l'assignement des arguments histoire de ne pas devoir tout réécrire pour chaques commandes

tcl
proc arg_assign {} {
    uplevel 1 {
        set arg [lassign $args nick host hand chan]
        if {[llength $chan]>1} {
            set arg [lassign $chan chan]
        }
    }
}
 
bind pub o !op test:op
bind msg o op test:op
 
proc test:op args {
    arg_assign
    if ![validchan $chan] {
        putserv "NOTICE $nick :salon invalide."
        return
    }
    putserv "MODE $chan +o $nick"
}


voila, en espérant que ça pourra vous être utile ;)
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#2
Perso je préfère cette variante:


tcl
bind pub o !op {procOp pub $_pub4 $_pub3 $_pub5}
bind msg o op {procOp msg $_msg1 $_msg3 $_msg4}
bind dcc o op {procOp dcc}
 
proc putuser {text} {
upvar 1 bindtype bindtype target target
if {$bindtype eq "dcc"} { putdcc $target $text
} else { putserv [concat PRIVMSG $target :$text] }
return }
 
proc procOp {bindtype target hand text args} {
# Whateverhappensinyourlifeforever
# ...
putuser "SLT LOL"
return }


C'est plus simple à mon avis, et ca permet de faire marcher ça avec n'importe quel type de bind - il suffit de trouver un ordre de variables qui va bien avec le bind en question.

J'ajouterais que combiné avec une double ou triple boucle foreach, c'est le top pour placer tous les binds d'un script d'un coup! (testé et approuvé)
#3
Moi, j'ai plus propre et plus explicite, et qui lave plus blanc même à basse température:

tcl
bind pub o !op op:pub
bind msg o !op op:msg
 
proc op:pub {nick uhost handle chan args} {
   pushmode $chan +o $nick
}
proc op:msg {nick uhost handle args} {
   if {!validchan [lindex $args 0]} { return 0;}
   op:pub $nick $uhost $handle [lindex $args 0] {""}
}

En plus, ça permet de faire facilement des contrôles différents en fonction du mode d'appel de la commande.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#4
effectivement c'est plutôt pas mal même si ca ne fonctionnera qu'avec eggdrop
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#5
@ CrazyCat : personnellement je n'aime pas du tout cette manière de faire même si je l ai utilisée dans le passé

edit: le but étant de créer une seule procédure pour les 2 binds
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#6
djkenny Wrote:effectivement c'est plutôt pas mal même si ca ne fonctionnera qu'avec eggdrop
J'imagine que tu réponds à Artix, mon message s'est intercalé.
Je me permets de répondre tout de même: "Oui, mais d'un autre côté c'est le sujet général du forum"

djkenny Wrote:@ CrazyCat : personnellement je n'aime pas du tout cette manière de faire même si je l ai utilisée dans le passé
edit: le but étant de créer une seule procédure pour les 2 binds
Les goûts et les couleurs, on ne peut pas critiquer. Pour ma part, j'aime bien qu'un code soit rapidement explicite, surtout un tcl, mais vos solutions sont très intéressantes à lire même si je sais que je ne les utiliserais surement pas.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#7
je suis d accord avec toi CrazyCat les gouts et les couleurs.. je donne juste mon point de vue
concernant eggdrop c' est vrais que c est le sujet du forum (d'ailleur une section tcl pur serais peu être la bien venue?) sachant que certaine personne peuvent utiliser sbnc / tcldrop / xchat / tcl-bot ou autre logiciel eggcompat
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#8
Ce sera vu lors de la mise en place du nouveau forum, pour l'instant je ne fais pas de nouvelles sections.
Mais il y a une section "un peu plus loin" qui permet de s'éloigner d'eggdrop, elle est à utiliser.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP


Possibly Related Threads…
Thread Author Replies Views Last Post
  Binds: savoir quand l'eggdrop rejoins un salon. (autoop) TuX 5 4,105 02/09/2013, 08:44
Last Post: CrazyCat
  [Astuce] url_encode en tcl CrazyCat 0 2,491 01/07/2009, 22:29
Last Post: CrazyCat

Forum Jump:


Users browsing this thread: 1 Guest(s)