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


Alternative à getchanmode car celui-ci ne voit que les modes du RFC1459
#1
Démonstration
Code :
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
tcl
array set getchanmodes_session {}



Ceci est à mettre à l'endroit où l'on veut récupérer les modes d'un chan
tcl
	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
tcl
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
tcl
bind raw - 324 getchanmodes



Source : http://www.boulets.oqp.me/tcl/routines/t...-0017.html
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
  Répondre
#2
Salut,

Code très sympatique ! Je pense l'inclure dans un namespace prochainement.
Mais une question me trotte, Pourquoi l'utilisation du md5 pour la conversion ?
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre
#3
 
La conversion ?
Le MD5 sert à obtenir un hash à partir du nom du chan, qui est ensuite utilisé comme identificateur de session.
 
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
  Répondre
#4
C'est à dire ?
"Désoler pas trop compris le système", l'histoire du hash à partir du nom du chan..
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre
#5
 
Admettons que :
- le script est utilisé sur plusieurs chans en même temps
- plusieurs requêtes sont envoyées au serveur presque au même moment pour interroger les modes du chan

L'Eggdrop va envoyer plusieurs requêtes et recevoir plusieurs réponses après quelques instants.

Pour savoir quelle réponse du serveur correspond à quelle requête envoyée, l'Eggdrop crée une session associée à chaque requête.
La session reste ouverte tant que la réponse attendue n'a pas été reçue.
Chaque session est identifiée par le nom du chan duquel la requête provient.

Pour garder en mémoire ces sessions, je définis un array.
Comme les arrays n'aiment pas trop les caractères spéciaux dans les noms de clés et que le nom d'un chan peut contenir des caractères spéciaux, je crée un hash MD5 à partir du nom du chan (car je suis sûr que ce hash ne contiendra rien d'autre que des caractères alphanumériques), et je l'utilise comme identificateur de session.
 
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
  Répondre
#6
D'accord, oui la c'est beaucoup plus clair !
J'ai compris ce que tu veut dire, et ce que cela sert.

Merci de cette explications, en effet c'est même mieux comment tu as fait.
Sa correspond vraiment à ce que je recherche.

Merci pour tout Menz :)
Vous interdisez les erreurs, vous empêchez ainsi la victoire.

Ma super kikoo-page loll
  Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)