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 $display_target "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 Eggdrop 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 |