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


lister les scripts chargés
#1
Bonjour,
J'aimerais ajouter a mon eggdrop la commande ".listscript" et que celle ci me retourne la liste des scripts chargé dans l'eggdrop.
Est ce que qq'un pourrais me faire le process.
Merci
#2
Montre ton code deja et après on voit ? ^^
#3
c'est a dire que je ne script pas, donc je n'ai aucun code :D
#4
en surfant un peut sur le site tu trouvera quelque modèle donc essaye de toi même de crée un bout de code ensuite ont te corrigera . nous sommes pas ici pour crée des TCL sur commandes !
faut savoir y mettre un peut du sien.

cordialement
La différence entre Linux et Windows ,c'est que Linux c'est comme une belle fille , il faut l'apprivoiser , la comprendre , la séduire tandis que Windows , c'est comme une prostitué , il faut payer et surtout bien se protéger.
#5
Restez zen les gars, c'est un forum d'entraide donc inutile de poster pour dire "démerde-toi", d'autant qu'il vous dit qu'il ne scripte pas.


@frisk :
Je ne suis pas sûr que ce que tu veux soit possible car charger un script ne déclare rien de particulier hormis les élément qu'il contient.
Il est possible de lister les variables utilisées, les procédures, les binds etc... mais pas les scripts, je le crains.



Si tu es organisé et que tu ne laisses que les scripts que tu utilises dans le répertoire scripts, tu peux toujours compter sur la commande :
tcl
.tcl glob scripts/*.tcl

pour t'afficher la liste des .tcl qui se trouvent dans eggdrop/scripts.



Quelques autres commandes éventuellement utiles :
afficher une liste des variables déclarées :
tcl
.tcl info vars [namespace::][masque de recherche]

afficher une liste des procédures existantes
tcl
.tcl info procs [namespace::][masque de recherche]

afficher le contenu d'une procédure
tcl
.tcl info body [namespace::][nom de la procédure]

afficher une liste des variables globales
tcl
.tcl info globals [masque de recherche]

Les masques de recherche supportent les jokers ( * )





Edit :
Après mûre réflexion, j'ai imaginé cette technique :
Edite ton fichier eggdrop.conf et ajoute ceci juste avant la toute première ligne de chargement de tes scripts (les lignes source scripts/blablabla.tcl) :
tcl
###
### Enregistrement de chaque script chargé dans la liste $::loaded_scripts (par MenzAgitat)
proc register_script {scriptname} {
	global loaded_scripts
	lappend loaded_scripts
	if { [lsearch $loaded_scripts $scriptname] == -1 } {
		lappend loaded_scripts $scriptname
	}
	return $scriptname
}

et ensuite, modifie chaque ligne de chargement de tes scripts en prenant modèle sur l'exemple suivant :
tcl
source scripts/kikoulol.tcl

doit être modifié en
tcl
source scripts/[register_script kikoulol.tcl]

Après avoir fait ça, redémarre ton eggdrop et tu obtiens une magnifique variable globale du nom de $loaded_scripts contenant la liste de tous les scripts chargés.
La variable peut être consultée en tapant .set loaded_scripts depuis la partyline. Elle est pas belle la vie ?

Maintenant, je m'attends à voir débarquer CrazyCat d'une minute à l'autre, la bouche en coeur, et répondre "oulàà arrête la bibine Menza, tu connais pas la commande .ScriptsList ?"


Remarque : les commandes .tcl et .set peuvent être utilisées en partyline après en avoir débloqué l'usage comme indiqué ici : Aidez-nous à vous aider
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.
#6
Ah non, moi j'avais:

tcl
foreach script [scripts] {
   putlog "$script est chargé"
}

:D
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#7
tcl.tcl ne fait il pas ce que frisk recherche ? ou le TCL "loadTcl version 1.4.4.05" ?
La différence entre Linux et Windows ,c'est que Linux c'est comme une belle fille , il faut l'apprivoiser , la comprendre , la séduire tandis que Windows , c'est comme une prostitué , il faut payer et surtout bien se protéger.
#8
Le plus simple c'est de rename la commande 'source' dans une script que tu charges en premier.

Ensuite tu cré ta propre commande source (qui apelle la commande cachée que t'as rename) qui enregistre le fichier chargé, ça te permet d'avoir une liste de tous les fichiers chargés.
#9
Merci MenzAgitat.

Donc quand je tape .set loaded_scripts ça me met une liste comme ça:
(16:49:35) • <EvolutioN> [16:49] #FrisK# set loaded_scripts
(16:49:35) • <EvolutioN> Currently: alltools.tcl jokes.tcl http.tcl bseen.tcl ....

Est ce qu'il y a possibilité de créer une phrase du type: "Voici la liste des scripts chargés" ?

Ptite question aussi par rapport a un script que j'ai modifié.


tcl
bind dcc - publicite publicite
proc publicite { hand arg idx } { 
 global botnick evolution salon phrasepub
	set arg [split $arg]
	set salons [lindex $arg 0]
	if {[validchan $salons]} {
		putdcc $idx "$botnick est déjà sur le salon \002$salons\002"
		return 0
	}
	channel add $salons
putserv "SAJOIN $botnick $salons \n"
putserv "MODE $salons +qo $botnick $botnick \n"
putserv "PRIVMSG $salons $phrasepub \n"
channel remove $salons
}


quand je tape .publicite #test il me retourne: Tcl error [publicite]: invalid channel prefix
#10

tcl
proc publicite { hand arg idx } {

Un bind DCC envoie trois arguments à une procédure, à savoir dans l'ordre le handle de l'utilisateur, son idx et le texte qu'il a tapé. Donc dans ce cas, ça serait plus "hand idx arg" que "hand arg idx". Il vaut mieux aussi utiliser autre chose que "arg" pour éviter de confondre avec "args" (qui regroupe les arguments supplémentaires dans une liste).

Sinon j'ai quelques autres remarques concernant le script :
- La variable s'appelle salons, et pas salon. On peut donc penser que le script est concu pour fonctionner sur plusieurs chans (par exemple en les séparant par des virgules). Le problème, c'est que ca passera pas sur eggdrop, au niveau des "validchan" "channel add" etc.
- A cause du SAJOIN j'en conclus que le bot est IRCOp... Et donc, je pense qu'il serait carrément plus simple d'utiliser les services si possible (Global, BotServ, tout ça)
-

Voila une version modifiée pour prendre en compte les salons multiples :


tcl
bind dcc - publicite dcc:publicite:main
 
proc dcc:publicite:main {handle idx text} {
    foreach currentChan [split $text ", "] {
        if {$currentChan eq ""} { continue }
        if {[validchan $currentChan]} { putdcc $idx "Je suis déjà sur le canal $currentChan !"; continue }
        lappend chanList $currentChan
        append modeTargets "MODE $currentChan +oq $::botnick $::botnick\n" }
if {![llength $chanList]} { putdcc $idx "Canaux invalides ?" }
    set joinedList [join $chanList ","]
 
    # Note: Plutôt que de channel add / channel remove
    # il est plus simple de tout faire d'un coup, le bot quittera automatiquement le chan ensuite
    putdccraw 0 [string length [set rawText "SAJOIN $::botnick [join $joinedList]\n[set modeTargets]PRIVMSG [join $joinedList] :$::phrasepub"]] $rawText
    return }

Je ne l'ai pas testé mais (euh) je pense qu'il devrait fonctionner
#11
validchan != botonchan
Le chan peut etre valide mais le bot n'est aps forcément dessus.
#12
J'ai essayé ta version Artix, elle fonctionne mais a la fin de la phrase "$phrasepub" j'ai ceci:

PART #test

ensuite il part du salon.
#13
C'est du à une erreur de ma part dans le putdccraw

tcl
putdccraw 0 [string length [set rawText "SAJOIN $::botnick [join $joinedList]\n[set modeTargets]PRIVMSG [join $joinedList] :$::phrasepub"]] $rawText

Il faut rajouter un retour de ligne après la fin du texte :

tcl
putdccraw 0 [string length [set rawText "SAJOIN $::botnick [join $joinedList]\n[set modeTargets]PRIVMSG [join $joinedList] :[set ::phrasepub]\n"]] $rawText


@Merwin:
InutilBot Wrote:.tcl validchan #uh
Tcl: 0
.tcl validchan #access0
Tcl: 1
J'ai raté quelque chose ><' ?

Edit: Ah ca y'est j'ai compris, validchan concerne un canal pour lequel le bot à un record
Avec le mode +inactive on peut donc avoir validchan égal à 1 mais botonchan égal à 0
Dans ton cas, tu devrais remplacer le "validchan" par "botonchan"


Possibly Related Threads…
Thread Author Replies Views Last Post
  Lister les utilisateurs en tcl Dani 4 4,952 06/04/2012, 20:15
Last Post: aliasangelius
  Lister des utilisateurs sur un réseau IRC. ArKeNiS 5 5,233 26/07/2011, 17:43
Last Post: djkenny

Forum Jump:


Users browsing this thread: 1 Guest(s)