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
Ce petit bout de code permet de passer outre les codes de contrôle (couleurs, gras, ...) dans les lignes qu'il reçoit, ce qui est fort intéressant pour les commandes de type PUB et MSG.
Note 1 : ceci affecte entièrement l'eggdrop, donc les scripts fait pour éviter l'abus de couleurs ne fonctionneront plus
Note 2 : si vous avez un eggdrop (très) ancien, vous pouvez remplacer set a [stripcodes * $a] par set a [stripcodes abcgru $a]
(08/09/2021, 09:40)CrazyCat Wrote: Ce petit bout de code permet de passer outre les codes de contrôle (couleurs, gras, ...) dans les lignes qu'il reçoit, ce qui est fort intéressant pour les commandes de type PUB et MSG.
Note 1 : ceci affecte entièrement l'eggdrop, donc les scripts fait pour éviter l'abus de couleurs ne fonctionneront plus
Note 2 : si vous avez un eggdrop (très) ancien, vous pouvez remplacer set a [stripcodes * $a] par set a [stripcodes abcgru $a]
Très bien vu,
Cela fais un certains temps que je réfléchis sur un problème récurant :
Les couleurs pour les binds: PUB/MSG/PUBM/MSGM
Je suis confronter très régulièrement a devoir 'catch' du textes colorer et il y a toujours les même problèmes savoir comment réaliser le déclenchement proprement et de manière sûr.
Quand tu arrive a faire des choses comme des PUBM "*" et [stripcodes * $text] pour après vérifié que ta un [binds] existant sans couleurs ... ca deviens vite le bordel, pour cité qu'un exemple, dont to code fait pareil mais peut-être de manière plus radicale.
Personnellement, je pense qu'il faut proposer quelque chose a eggheads pour pouvoir utiliser les PUB/MSG/PUBM/MSGM sans couleurs directement. soi des binds qui remove auto ( stripcodes ), soit un argument a ceux existant. Ou une autre approche qui permet le déclenchement sans format de style facilement. L'avantage est que ca l'influencera pas l'intégralité de l'eggdrop.
Retrouvez les dernières modifications de mes scripts TCL (versions Alpha/Bêta) ainsi que d'autres de mes réalisations sur ma page GitHub et les versions stables dans la section scripts de ce site 8-)
Hello tous.
Personnellement j'utilise une autre approche, qui consiste à :
faire un dict {commande proc ...}
faire un bind pubm - * [namespace current]::stripProc; #qui strip tous les codes dans la commande mais les conserve pour les arguments
(ça utilise donc le dict créé pour faire le lien commande/proc à lancer, logique).
Ça fonctionne assez bien, c'est limité au namespace, et ça me permet de faire des news avec mise en forme, par exemple.
Oui.
Voilà ce que j'utilise (les proc sont dans un tcl à part chez moi).
Et désolé si ça n'est pas très très propre...
En tout cas, ça me filtre bien au niveau de la commande, et conserve la mise en forme du reste, si elle change par rapport au début de ligne évidemment.
Dans l'exemple, j'ai pris mes news toutes bêtes, parce que ça illustre bien l'idée => on conserve bien les codes mis dans le texte donné.
tcl
proc varexists name {return[info exists [namespace current]::$name]}proc getvar {name}{if{![varexists $name]}{return0}namespaceupvar[namespace current]$name tmp
return$tmp}proc stripAllCodes str {return[stripcodes*$str]}proc argsList argument {set argument [string map {\{"" \}"" \" \\\"} $argument] # " ici pour la coloration syntaxique
if{![string is list$argument]}{set argument [split[lindex$argument0]]}return$argument}proc filterPubBindz {nick user handle chan args}{return[core_filterPubBindz "pubbindz"$nick$user$handle$chan$args]}proc core_filterPubBindz {bindzNames nick uhost handle chan args}{set orig [argsList $args]set args [argsList [stripAllCodes $args]]set cmd [lindex$args0]set bindz [getvar $bindzNames]if{![::tcl::dict::exists$bindz$cmd]}{return1}set i [lsearch$orig$cmd]if{$i==-1}{set i 0}set orig [lreplace$orig0$i]set procz [::tcl::dict::get$bindz$cmd]if{$procz!= ""}{return[$procz$nick$uhost$handle$chan$orig]}return1}variable pubbindz [::tcl::dict::create!helpnews help !news read!delnews del !addnews send !modnews mod]bindpubm - *[namespace current]::filterPubBindz
Pour faire plus propre, peut-être nommer en commençant par Var et puis l'action (le verbe) Exists, Get.
Tu mets des accolades pour getvar à {name} et pas à varexists. respecte un seul "style de code"
Je ne suis pas sûr de la raison de l'emploi du namespace dans ces deux fonctions, je me permet de transcrire comme je pense le mieux:
Quand je lit ceci:
Si $argument n'ai pas une liste alors on le prend l'élément zéro de la Liste et on le split (en liste?)
Quelque chose ne va pas. à savoir que "lindex" par définition agit sur une liste (d'où le "L" de "lindex")
tcl
proc core_filterPubBindz {bindzNames nick uhost handle chan args}{set orig [argsList $args]set args [argsList [stripAllCodes $args]]set cmd [lindex$args0]set bindz [getvar $bindzNames]if{![::tcl::dict::exists$bindz$cmd]}{return1}set i [lsearch$orig$cmd]if{$i==-1}{set i 0}set orig [lreplace$orig0$i]set procz [::tcl::dict::get$bindz$cmd]if{$procz!= ""}{return[$procz$nick$uhost$handle$chan$orig]}return1}
Je ne comprends pas tout, tu pourrais un peu commenter le code ?
tcl
variable pubbindz [::tcl::dict::create!helpnews help !news read!delnews del !addnews send !modnews mod]
Cette variable est appeler quand ? C'est relation avec tes dict ?
Retrouvez les dernières modifications de mes scripts TCL (versions Alpha/Bêta) ainsi que d'autres de mes réalisations sur ma page GitHub et les versions stables dans la section scripts de ce site 8-)
Non ça ne peut pas fonctionner, le but étant de remplacer les " par des \" (ton "\\\" est une chaîne de caractère non terminée...)
et le commentaire ajoutait un " pour que le nombre en soit pair sur la ligne (pour la coloration syntaxique, donc !).
Ensuite, en effet c'est un peu bête de mettre un coup name et l'autre {name} (d'autant que je n'aime pas ^^).
Pour ce qui est de mettre des majuscules, pourquoi pas, par contre varExists est construit sur le même modèle que tous les fileExists du monde...
Je lirai les autres modifications liées aux variables plus tard.
Enfin, oui, le dict est utilisé dans la proc core_filterPubBindz, elle fait le lien entre le nom de la commande et le nom de la proc.
Voilà pour le moment.
Mais en tout état de cause, ça fonctionne tranquille chez moi, je donnais juste un aperçu de comment je fais pour me débarrasser des codes dans les commandes, tout en les conservant pour les arguments...