Communauté sur les Eggdrops - Community about Eggdrops
lister les scripts chargés - Printable Version

+- Communauté sur les Eggdrops - Community about Eggdrops (https://forum.eggdrop.fr)
+-- Forum: Eggdrop et TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=8)
+--- Forum: Scripts TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=4)
+--- Thread: lister les scripts chargés (/showthread.php?tid=438)



lister les scripts chargés - frisk - 23/06/2009

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


RE: lister les scripts chargé - heretoc - 23/06/2009

Montre ton code deja et après on voit ? ^^


RE: lister les scripts chargé - frisk - 23/06/2009

c'est a dire que je ne script pas, donc je n'ai aucun code :D


RE: lister les scripts chargé - fedora - 23/06/2009

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


RE: lister les scripts chargé - MenzAgitat - 24/06/2009

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


RE: lister les scripts chargé - CrazyCat - 24/06/2009

Ah non, moi j'avais:

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

:D


RE: lister les scripts chargé - fedora - 24/06/2009

tcl.tcl ne fait il pas ce que frisk recherche ? ou le TCL "loadTcl version 1.4.4.05" ?


RE: lister les scripts chargés - Merwin - 24/06/2009

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.


RE: lister les scripts chargés - frisk - 24/06/2009

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


RE: lister les scripts chargés - Artix - 25/06/2009


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


RE: lister les scripts chargés - Merwin - 25/06/2009

validchan != botonchan
Le chan peut etre valide mais le bot n'est aps forcément dessus.


RE: lister les scripts chargés - frisk - 25/06/2009

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.


RE: lister les scripts chargés - Artix - 25/06/2009

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"