Alternative à getchanmode car celui-ci ne voit que les modes du RFC1459
Démonstration
getchanmodes #testchan
Tcl: +Ctrn
* MenzAgitat sets mode: +mQS
getchanmodes #testchan
Tcl:+mCtrn
Dans cet exemple, on voit que les modes Q et S sont complètement ignorés par
getchanmode.
Voici donc une méthode alternative pour récupérer les modes d'un chan.
Variable à déclarer
array set getchanmodes_session {}
Ceci est à mettre à l'endroit où l'on veut récupérer les modes d'un chan
variable getchanmodes_session([md5 $chan]) [::tcl::dict::create "variable1" $variable1 "variable2" $variable2]
putserv "MODE $chan"
}
Ajoutez au
dict toutes les variables que vous pourriez avoir besoin de récupérer après avoir reçu les modes du chan.
$variable1 et
$variable2 ne sont là que pour l'exemple.
Vous devez terminer la procédure à cet endroit, comme l'indique le
} que j'ai volontairement ajouté à la fin, puisqu'on attend de connaître les modes du chan avant de continuer.
Ajoutez ensuite cette procédure qui s'occupera de réceptionner la réponse du serveur
proc getchanmodes {sender raw data} {
variable getchanmodes_session
set chan [lindex $data 1]
set chan_hash [md5 $chan]
if { [::tcl::info::exists getchanmodes_session($chan_hash)] } {
set variable1 [::tcl::dict::get $getchanmodes_session($chan_hash) "variable1"]
set variable2 [::tcl::dict::get $getchanmodes_session($chan_hash) "variable2"]
unset getchanmodes_session($chan_hash)
set chanmodes [join [lrange [split $data] 2 end]]
suite_des_operations $chan $chanmodes $variable1 $variable2
}
}
Cette procédure récupère les modes qu'on a demandé et appelle la proc
suite_des_operations qui contient la suite de votre code, en lui passant en paramètre
$chanmodes (qui contient les modes que l'on souhaitait connaître), ainsi que les autres paramètres que vous aurez éventuellement choisi de transmettre d'une proc à une autre comme
$arg1,
$arg2, ...
Pour finir, vous devez ajouter ce bind
bind raw - 324 getchanmodes