Communauté sur les Eggdrops - Community about Eggdrops
petite astuce pour les binds pub/msg indentique - Printable Version

+- Communauté sur les Eggdrops - Community about Eggdrops (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)
+--- Thread: petite astuce pour les binds pub/msg indentique (/showthread.php?tid=911)



petite astuce pour les binds pub/msg indentique - djkenny - 12/03/2011

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 ;)


RE: petite astuce pour les binds pub/msg indentique - Artix - 23/03/2011

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é)


RE: petite astuce pour les binds pub/msg indentique - CrazyCat - 23/03/2011

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.


RE: petite astuce pour les binds pub/msg indentique - djkenny - 23/03/2011

effectivement c'est plutôt pas mal même si ca ne fonctionnera qu'avec eggdrop


RE: petite astuce pour les binds pub/msg indentique - djkenny - 23/03/2011

@ 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


RE: petite astuce pour les binds pub/msg indentique - CrazyCat - 23/03/2011

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.


RE: petite astuce pour les binds pub/msg indentique - djkenny - 23/03/2011

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


RE: petite astuce pour les binds pub/msg indentique - CrazyCat - 23/03/2011

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.