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
Répondre Avertir
#2
Montre ton code deja et après on voit ? ^^
Répondre
#3
c'est a dire que je ne script pas, donc je n'ai aucun code Very Happy
Répondre Avertir
#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
[font=Times New Roman]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.[/font]
Répondre Avertir
#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
Répondre Avertir
#6
Ah non, moi j'avais:
TCL
foreach script [scripts] {
   putlog "$script est chargé"
}


Very Happy
Répondre
#7
tcl.tcl ne fait il pas ce que frisk recherche ? ou le TCL "loadTcl version 1.4.4.05" ?
[font=Times New Roman]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.[/font]
Répondre Avertir
#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.
Répondre Avertir
#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
Répondre Avertir
#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
Répondre Avertir
#11
validchan != botonchan
Le chan peut etre valide mais le bot n'est aps forcément dessus.
Répondre Avertir
#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.
Répondre Avertir
#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 a écrit :.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"
Répondre Avertir


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté