Accueil





Faire pointer des binds de type différents vers une seule procédure



Il peut être utile de faire pointer des binds de types différents vers une seule procédure.

Le problème qui se pose est que différents types de binds enverront différents arguments à la proc.

Nous utiliserons dans nos exemples les binds pub, msg et dcc qui retournent respectivement 5, 4 et 3 arguments


Nous allons voir 2 méthodes pour gérer ça.



1ère méthode


Binds
bind pub -|- !public_command ProcName bind msg -|- private_command ProcName bind dcc -|- dcc_command ProcName


Procédure
proc ProcName {args} { switch -- [set display_mode [llength $args]] { 5 { lassign $args nick host hand chan arg set display_queue "help" set display_method "PRIVMSG" set display_target $chan } 4 { lassign $args nick host hand arg set display_queue "help" set display_method "PRIVMSG" set display_target $nick } 3 { lassign $args hand idx arg set display_queue "dcc" set display_method "" set display_target $idx } } switch -- $display_mode { 4 - 5 { put$display_queue "$display_method $display_target :Commande acceptée, voici les arguments que vous avez passés à la commande : $arg" } 3 { putdcc $idx "Commande acceptée, voici les arguments que vous avez passés à la commande : $arg" } } }


Démonstration
# Sur un chan : !public_command test Commande acceptée, voici les arguments que vous avez passés à la commande : test
# Par message privé : /msg boole private_command test Commande acceptée, voici les arguments que vous avez passés à la commande : test
# En partyline .dcc_command test Commande acceptée, voici les arguments que vous avez passés à la commande : test




2ème méthode


Cette méthode utilise les arguments réservés qui sont automatiquement renseignés par les binds et dont vous trouverez un tableau plus bas.


Binds
bind pub -|- !public_command { ProcName $_pubm1 $_pubm2 $_pubm3 $_pubm4 $_pubm5 ; # } bind msg -|- private_command { ProcName $_msgm1 $_msgm2 $_msgm3 $_msgm1 $_msgm4 ; # } bind dcc -|- dcc_command { ProcName [hand2nick $_dcc1] [getchanhost [hand2nick $_dcc1]] $_dcc1 $_dcc2 $_dcc3 ; # }


Procédure
proc ProcName {nick host hand target arg} { putlog "arguments reçus : nick = $nick | host = $host | hand = $hand | target = $target | arg = $arg" }


Démonstration
!public_command test Tcl: arguments reçus : nick = MenzAgitat | host = ~menz.agit@EpiK-CB59667E.fbx.proxad.net | hand = MenzAgitat | target = #testchan | arg = !public_command test
/msg Eggdrop private_command test Tcl: arguments reçus : nick = MenzAgitat | host = ~menz.agit@EpiK-CB59667E.fbx.proxad.net | hand = MenzAgitat | target = MenzAgitat | arg = private_command test
.dcc_command test Tcl:arguments reçus : nick = MenzAgitat | host = ~menz.agit@EpiK-CB59667E.fbx.proxad.net | hand = MenzAgitat | target = 6 | arg = test # Remarque : le 6 reçu correspond à l'idx, c'est à dire au canal auquel est connecté l'utilisateur en partyline.



Type Globals
MSG nick user@host handle text
$_msg1 $_msg2 $_msg3 $_msg4
DCC handle idx text
$_dcc1 $_dcc2 $_dcc3
FIL handle idx text
$_fil1 $_fil2 $_fil3
PUB nick user@host handle channel text
$_pub1 $_pub2 $_pub3 $_pub4 $_pub5
MSGM nick user@host handle text
$_msgm1 $_msgm2 $_msgm3 $_msgm4
PUBM nick user@host handle channel text
$_pubm1 $_pubm2 $_pubm3 $_pubm4 $_pubm5
NOTC nick user@host handle text dest
$_notc1 $_notc2 $_notc3 $_notc4 $_notc5
JOIN nick user@host handle channel
$_jp1 $_jp2 $_jp3 $_jp4
PART nick user@host handle channel msg
$_p1 $_p2 $_p3 $_p4 $_p5
SIGN nick user@host handle channel reason
$_stnm1 $_stnm2 $_stnm3 $_stnm4 $_stnm5
TOPC nick user@host handle channel topic
$_stnm1 $_stnm2 $_stnm3 $_stnm4 $_stnm5
KICK nick user@host handle channel target reason
$_kick1 $_kick2 $_kick3 $_kick4 $_kick5 $_kick6
NICK nick user@host handle channel newnick
$_stnm1 $_stnm2 $_stnm3 $_stnm4 $_stnm5

©2005-2016 Menz Agitat