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


[Script] Probleme TCL
#1
Bonjour étant novice en tcl j'ai voulu essayer de codé qu'elle que chose en prenant l'aide du code de aliaseangelus de son tcl autorised mais il me detect une erreur a la ligne 1 donc ici =>


tcl
namespace eval ::autorise {



tcl
namespace eval ::autorise {
 
    # Nous vérifions si ya le package requis pour le msgcat.
    package require msgcat
    # Nous mettons la langue de msgcat en français.
    ::msgcat::mclocale fr
    # Nom du fichier ou seront les pseudos autorisé.
    variable fichiers "operateur.db"
    # Les messages de msgcat.
    ::msgcat::mcset fr msg1 "\00314Felicitation \0034° \0033$nick \0034° \037\0031a etait ajouté dans la liste des opérateur de $chan sur l'host %host\037\0031"
    # Procédure de création du fichier Autorise.
    if {![file exists $fichiers]} {
        set load [open $fichiers w+]
        close $load
        putlog "\2Je crée le fichier $fichiers\2"
    }
	# Procédure de join.
    bind join - "$::autorise::salons *" [namespace current]::joinauto
    proc joinauto {nick host hand chan} {
        variable salons
        set k [lindex [split $nick |] 0]
        set vnick $nick
        if [isbotnick $nick] return
        if {[acceesalon $nick]==0} {
            pushmode $salons +o $nick
            return 0
        }
		# Procédure d'ajout de pseudo autorise.
    bind pub o "!opadd" [namespace current]::+ajout
    proc +ajout { nick host hand chan arg } {
        variable fichiers
        variable salons
        set temp [lindex $arg 0]
        if {$temp == ""} {
            putserv "NOTICE $nick :Utilisation: !opadd <pseudo>"
            putserv "NOTICE $nick :Exemple !opadd $nick"
            return 0
        }
        set lis "[fread $fichiers]"
        if {[lsearch -exact "x $fichiers" "$temp"]!="0"} {
            lappend lis $temp
            fwrite $fichiers $temp
            putserv "NOTICE $nick :\002$temp\002 \0034a été ajouté $host\0034"
            putserv "PRIVMSG $salons :\002$temp\002 \0034est ajouté au opérateur\0034"
            return 0
        }
        putserv "NOTICE $nick :\002Erreur:\002$temp\002 \0034est déjà dans la liste\0034"
        return 0
    }
	# Procédure de suppression de pseudo autorise.
    bind pub o "!opdel" [namespace current]::-ajout
    proc -ajout { nick host hand chan arg } {
        variable fichiers
        variable salons
        set temp [lindex $arg 0]
        if {$temp == ""} {
            putserv "NOTICE $nick :Utilisation: !opdel <pseudo>"
            putserv "NOTICE $nick :Exemple: !opdel $nick"
            return 0
        }
        set autoajout "[fread $fichiers]"
        set tmp ""
        foreach bb $autoajout {
            if {![string match $temp $bb]} {lappend tmp $bb}
        }
        fdel $fichiers $tmp
        putserv "NOTICE $nick :\002$temp\002 \0034supprimé des operateur\0034"
        putserv "PRIVMSG $salons :\002$temp\002 \0034est supprimé des operateur\0034"
        return 0
    }
	# Procédure pour voir la liste des autorise.
    bind pub o "!opliste" [namespace current]::auto
    proc auto { nick host hand chan arg } {
        variable fichiers
        variable salons
        set fp [open $fichiers "r"]
        set fc -1
        putserv "notice $nick :\037\00300,01 -> Liste des operateur. <-\037\003"
        while {![eof $fp]} {
            set data [gets $fp]
            incr fc
            if {$data !=""} {
                putserv "notice $nick :\0031\[ \0034$data\0031\0031 ]\0031"
            }
            unset data
        }
        close $fp
        putserv "notice $nick :\037\00300,01 -> Fin de la liste des operateur. <-\037\003"
    }
	# Ne pas toucher Systeme Proc  !!
    proc acceesalon {nick} {
        variable fichiers
        set fa [open $fichiers r]
        set access 0
        while { ![eof $fa]} {
        set ligne [gets $fa]
        if {[string first [string tolower $ligne] [string tolower $nick]]==0} {
            set access 1
        }
        }
close $fa
return $access
    }
	# Procédure d'écriture de fichier.
    proc fwrite {fi arg} {
        set f [open $fi a]
        puts $f $arg
        close $f
    }
    # Procédure de suppression de fichier.
    proc fdel {fi arg} {
        set f [open $fi w]
        puts $f $arg
        close $f
    }
    # Procédure de lecture de fichier.
    proc fread {fi} {
        set f [open $fi r]
        set t [gets $f]
        close $f
        return $t
    }
}
putlog "\002\0034Chargement.. \002\037\0031op.tcl V1.0 by toretto\037\0031"


Merci si une personne peux maidé.
Site Web: Clic ici Nous rejoindres par mIRC -> Clic Ici
inutile d'avoir une grosse machine si il y'a un con deriere l'ecran :D
#2
Quel est exactement le message d'erreur ?

"Envoyé depuis mon GT-I9100 avec Tapatalk"
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#3
(25/02/2014, 19:44)CrazyCat Wrote: Quel est exactement le message d'erreur ?

"Envoyé depuis mon GT-I9100 avec Tapatalk"

Voicis le message d'erreur quand je rehash l'eggdrop


tcl
|20:02:31| <Protector> [20:02:39] Tcl error in file 'air.conf':
|20:02:31| <Protector> [20:02:39] can't read "chan": no such variable
|20:02:31| <Protector>     while executing
|20:02:31| <Protector> "::msgcat::mcset fr msg1 "\00314Felicitation \0034° \0033$nick \0034a° \037\0031a etait ajoute dans la liste des operateur de $chan sur l'host %host\..."
|20:02:32| <Protector>     (in namespace eval "::autorise" script line 10)
|20:02:32| <Protector>     invoked from within
|20:02:32| <Protector> "namespace eval ::autorise {
|20:02:32| <Protector>     
|20:02:32| <Protector>     # Nous vérifions si ya le package requis pour le msgcat.
|20:02:32| <Protector>     package require msgcat
|20:02:32| <Protector>     # Nous mettons la langue..."
|20:02:32| <Protector>     (file "scripts/op.tcl" line 1)
|20:02:32| <Protector>     invoke
|20:02:32| <Protector> [20:02:39] * FICHIER DE CONFIGURATION NON CHARGE (INTROUVABLE OU ERREUR)
-
DCC session closed

Site Web: Clic ici Nous rejoindres par mIRC -> Clic Ici
inutile d'avoir une grosse machine si il y'a un con deriere l'ecran :D
#4
Effectivement, il y a une erreur, mais c'est dans la ligne:

tcl
::msgcat::mcset fr msg1 "\00314Felicitation \0034° \0033$nick \0034° \037\0031a etait ajoutà dans la liste des opÃrateur de $chan sur l'host %host\037\0031"


A mon avis, c'est %chan et non pas $chan (et idem pour $nick), ce qui donnerait:

tcl
::msgcat::mcset fr msg1 "\00314Félicitations \0034° \0033%nick \0034° \037\0031a été ajouté dans la liste des opérateur de %chan sur l'host %host\037\0031"

irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#5
(25/02/2014, 23:59)CrazyCat Wrote: Effectivement, il y a une erreur, mais c'est dans la ligne:

tcl
::msgcat::mcset fr msg1 "\00314Felicitation \0034° \0033$nick \0034° \037\0031a etait ajoutà dans la liste des opÃrateur de $chan sur l'host %host\037\0031"


A mon avis, c'est %chan et non pas $chan (et idem pour $nick), ce qui donnerait:

tcl
::msgcat::mcset fr msg1 "\00314Félicitations \0034° \0033%nick \0034° \037\0031a été ajouté dans la liste des opérateur de %chan sur l'host %host\037\0031"

J'ai une erreur a le ligne 36 voici l'erreur apres un rehash


tcl
|23:19:40| <Protector> [23:19:48] Je crée le fichier operateur.db
|23:19:40| <Protector> [23:19:48] Tcl error in file 'air.conf':
|23:19:40| <Protector> [23:19:48] can't read "::autorise::pseudo": no such variable
|23:19:40| <Protector>     while executing
|23:19:40| <Protector> "bind join - "$::autorise::pseudo *" [namespace current]::joinauto"
|23:19:40| <Protector>     (file "scripts/op.tcl" line 36)
|23:19:40| <Protector>     invoked from within
|23:19:40| <Protector> "source scripts/op.tcl"
|23:19:40| <Protector>     (file "air.conf" line 115)
|23:19:40| <Protector> [23:19:48] * FICHIER DE CONFIGURATION NON CHARGE (INTROUVABLE OU ERREUR)
-
DCC session closed


La ligne 36 c'est celle la


tcl
bind join - "$::autorise::salons *" [namespace current]::joinauto

Site Web: Clic ici Nous rejoindres par mIRC -> Clic Ici
inutile d'avoir une grosse machine si il y'a un con deriere l'ecran :D
#6
J'ai l'impression que tu n'as pas le script complet ou bien que tu l'as mal configuré.
Où l'as-tu récupéré exactement ?
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#7
(26/02/2014, 00:27)CrazyCat Wrote: J'ai l'impression que tu n'as pas le script complet ou bien que tu l'as mal configuré.
Où l'as-tu récupéré exactement ?

Je les pris ici c le tcl de aliasangelus de autorised.tcl que j'ai esseyer de modifié...
Site Web: Clic ici Nous rejoindres par mIRC -> Clic Ici
inutile d'avoir une grosse machine si il y'a un con deriere l'ecran :D
#8
"ici" où ? Sur le forum ? parce que le tcl fonctionnel est à http://scripts.eggdrop.fr/details-Autori...-s157.html
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#9
(26/02/2014, 00:38)CrazyCat Wrote: "ici" où ? Sur le forum ? parce que le tcl fonctionnel est à http://scripts.eggdrop.fr/details-Autori...-s157.html

Je les recup dans la section telechargement !
Site Web: Clic ici Nous rejoindres par mIRC -> Clic Ici
inutile d'avoir une grosse machine si il y'a un con deriere l'ecran :D
#10
Salut,

Déjà tu as un gros soucis..
Comme la dit Crazy c'est %chan dans le message de msgcat et non pas $chan.
En faite msgcat gère le format de msgcat sous cette forme pour après lors d'un appel dans un putserv par exemple va se retrouver en $...
Je te montre un exemple :

Message msgcat :


tcl
::msgcat::mcset fr msg1 "\00314Felicitation \0034° \0033%nick \0034° \037\0031a etait ajoutà dans la liste des opÃrateur de %chan sur l'host %host\037\0031"


Après dans le putserv sa donnera ceci :


tcl
putserv "privmsg $chan :[::msgcat::mc msg1 $nick $chan $host]"


Voici comment faire.
De plus ont peut voir que ton msgcat "msg1" n'es stipuler nulle part dans ton code..
Donc si tu déclare une phrase en msgcat, et que tu ne la stipule pas dans ton code de join par exemple ou autre.. Tu aura obligatoirement une erreur.

D'ou ton erreur "que l'eggdrop ne trouve pas msgcat, et/ou ne trouve pas la variable"
Essaye de roulez avec une voiture sans essence, tu verra que sa voudra pas.

Relis bien le poste : http://forum.eggdrop.fr/Autorise-t-1239.html
Ligne par ligne, et regarde comment et fait le système du msgcat, et comment il et appelez dans le putserv.

Je regarderais mieux plus tard, Mais je pense pas me tromper dans ce que je dit :)

EDIT : Je ferais aussi une modifications sur une chose, Car y'a un bug dans le code je viens de le voir en regardant le tcl.
Au sujet des pseudos y'a un bugs me semble t-il
#11
(26/02/2014, 13:20)aliasangelius Wrote: Salut,

Déjà tu as un gros soucis..
Comme la dit Crazy c'est %chan dans le message de msgcat et non pas $chan.
En faite msgcat gère le format de msgcat sous cette forme pour après lors d'un appel dans un putserv par exemple va se retrouver en $...
Je te montre un exemple :

Message msgcat :


tcl
::msgcat::mcset fr msg1 "\00314Felicitation \0034° \0033%nick \0034° \037\0031a etait ajoutà dans la liste des opÃrateur de %chan sur l'host %host\037\0031"


Après dans le putserv sa donnera ceci :


tcl
putserv "privmsg $chan :[::msgcat::mc msg1 $nick $chan $host]"


Voici comment faire.
De plus ont peut voir que ton msgcat "msg1" n'es stipuler nulle part dans ton code..
Donc si tu déclare une phrase en msgcat, et que tu ne la stipule pas dans ton code de join par exemple ou autre.. Tu aura obligatoirement une erreur.

D'ou ton erreur "que l'eggdrop ne trouve pas msgcat, et/ou ne trouve pas la variable"
Essaye de roulez avec une voiture sans essence, tu verra que sa voudra pas.

Relis bien le poste : http://forum.eggdrop.fr/Autorise-t-1239.html
Ligne par ligne, et regarde comment et fait le système du msgcat, et comment il et appelez dans le putserv.

Je regarderais mieux plus tard, Mais je pense pas me tromper dans ce que je dit :)

EDIT : Je ferais aussi une modifications sur une chose, Car y'a un bug dans le code je viens de le voir en regardant le tcl.
Au sujet des pseudos y'a un bugs me semble t-il

Merci Aliasangelus je vais regardé sa de plus prés...
Site Web: Clic ici Nous rejoindres par mIRC -> Clic Ici
inutile d'avoir une grosse machine si il y'a un con deriere l'ecran :D
#12
Re,

Voici le code TCL refait.
Alors regarde bien ton code à toi, Et regarde mes modifications.
Et dit moi ce que tu trouve de différents, Et bien sur test le code car je ne peux le tester disposant d'aucun eggdrop.

Voici le code :


tcl
namespace eval ::autorise {
 
    # Nous vÃrifions si ya le package requis pour le msgcat.
    package require msgcat
    # Nous mettons la langue de msgcat en français.
    ::msgcat::mclocale fr
    # Nom du fichier ou seront les pseudos autorisÃ.
    variable fichiers "operateur.db"
    # Les messages de msgcat.
    ::msgcat::mcset fr Join "\0031Auto-Op Accepter Pour \0034 %s \0031Sur \0034%s"
    ::msgcat::mcset fr Ajout "\00314Félicitation \0034° \0033%s \0034° \037\0031a etait ajoutà dans la liste des opÃrateur de %s sur l'host %s\037\0031"
    ::msgcat::mcset fr Del "\0031Auto-Op Supprimé Pour \0034%s \0031Sur \0034%s"
    # Listes des binds.
    bind join - "$::autorise::salons *" [namespace current]::joinauto
    bind pub o "!opadd" [namespace current]::+ajout
    bind pub o "!opdel" [namespace current]::-ajout
    # ProcÃdure de crÃation du fichier Autorise.
    if {![file exists $fichiers]} {
       set load [open $fichiers w+]
       close $load
       putlog "\2Je crÃe le fichier $fichiers\2"
    }
   # ProcÃdure de join.
    proc joinauto {nick host hand chan} {
       variable salons
       set k [lindex [split $nick |] 0]
       set vnick $nick
       if [isbotnick $nick] return
       if {[acceesalon $nick]==0} {
        putserv "privmsg $chan :[::msgcat::mc Join $nick $chan]"
            pushmode $salons +o $nick
            return 0
       }
      # ProcÃdure d'ajout de pseudo autorise.
    proc +ajout { nick host hand chan arg } {
       variable fichiers
       variable salons
       set temp [lindex $arg 0]
       if {$temp == ""} {
            putserv "NOTICE $nick :Utilisation: !opadd <pseudo>"
            putserv "NOTICE $nick :Exemple !opadd $nick"
            return 0
       }
       set lis "[fread $fichiers]"
       if {[lsearch -exact "x $fichiers" "$temp"]!="0"} {
            lappend lis $temp
            fwrite $fichiers $temp
            putserv "privmsg $chan :[::msgcat::mc Ajout $nick $chan $host]"
            return 0
       }
       putserv "NOTICE $nick :\002Erreur:\002$temp\002 \0034est dÃjà dans la liste\0034"
       return 0
    }
   # ProcÃdure de suppression de pseudo autorise.
    proc -ajout { nick host hand chan arg } {
       variable fichiers
       variable salons
       set temp [lindex $arg 0]
       if {$temp == ""} {
            putserv "NOTICE $nick :Utilisation: !opdel <pseudo>"
            putserv "NOTICE $nick :Exemple: !opdel $nick"
            return 0
       }
       set autoajout "[fread $fichiers]"
       set tmp ""
       foreach bb $autoajout {
            if {![string match $temp $bb]} {lappend tmp $bb}
       }
       fdel $fichiers $tmp
       putserv "privmsg $chan :[::msgcat::mc Del $nick $chan]"
       return 0
    }
   # ProcÃdure pour voir la liste des autorise.
    bind pub o "!opliste" [namespace current]::auto
    proc auto { nick host hand chan arg } {
       variable fichiers
       variable salons
       set fp [open $fichiers "r"]
       set fc -1
       putserv "notice $nick :\037\00300,01 -> Liste des operateur. <-\037\003"
       while {![eof $fp]} {
            set data [gets $fp]
            incr fc
            if {$data !=""} {
                putserv "notice $nick :\0031\[ \0034$data\0031\0031 ]\0031"
            }
            unset data
       }
       close $fp
       putserv "notice $nick :\037\00300,01 -> Fin de la liste des operateur. <-\037\003"
    }
   # Ne pas toucher Systeme Proc !!
    proc acceesalon {nick} {
       variable fichiers
       set fa [open $fichiers r]
       set access 0
       while { ![eof $fa]} {
       set ligne [gets $fa]
       if {[string tolower $nick] == [string tolower $ligne]} {
            set access 1
       }
       }
close $fa
return $access
    }
   # ProcÃdure d'Ãcriture de fichier.
    proc fwrite {fi arg} {
       set f [open $fi a]
       puts $f $arg
       close $f
    }
    # ProcÃdure de suppression de fichier.
    proc fdel {fi arg} {
       set f [open $fi w]
       puts $f $arg
       close $f
    }
    # ProcÃdure de lecture de fichier.
    proc fread {fi} {
       set f [open $fi r]
       set t [gets $f]
       close $f
       return $t
    }
}
putlog "\002\0034Chargement.. \002\037\0031op.tcl V1.0 by toretto\037\0031"

#13
Je les recommancé de zero le code maintenanc aucune erreur en PL mais parcontre quand je tape example !opadd pseudo il me l'ajoute bien mais il le mais pas +o sur le chan demandé voici le code


tcl
namespace eval ::autorise {
 
    # Nous vérifions si ya le package requis pour le msgcat.
    package require msgcat
    # Nous mettons la langue de msgcat en français.
    ::msgcat::mclocale fr
    # Salon back ou va se situé l'autorise.
    variable salons "#Accueil"
    # Nom du fichier ou seront les pseudos autorisé.
    variable fichiers "operateur.db"
    # Les messages de msgcat.
    ::msgcat::mcset fr msg1 "\00314Felicitation \0034° \0033%nick \0034° \037\0031a etait ajoute dans la liste des operateur de %chan sur l'host %host\037\0031"
    # Procédure de création du fichier Autorise.
    if {![file exists $fichiers]} {
        set load [open $fichiers w+]
        close $load
        putlog "\2Je crée le fichier $fichiers\2"
    }
	# Procédure de join.
    bind join - "$::autorise::salons *" [namespace current]::joinauto
    proc joinauto {nick host hand chan} {
        variable salons
        set k [lindex [split $nick |] 0]
        set vnick $nick
        if [isbotnick $nick] return
        if {[acceesalon $nick]==1} {
        }
            putserv "privmsg $chan :[::msgcat::mc msg1 $nick $chan $host]"
            putmode $salons +o $nick
            return 1
        }
		# Procédure d'ajout de pseudo autorise.
    bind pub o "!opadd" [namespace current]::+ajout
    proc +ajout { nick host hand chan arg } {
        variable fichiers
        variable salons
        set temp [lindex $arg 0]
        if {$temp == ""} {
            putserv "NOTICE $nick :Utilisation: !opadd <pseudo>"
            putserv "NOTICE $nick :Exemple !opadd $nick"
            return 0
        }
        set lis "[fread $fichiers]"
        if {[lsearch -exact "x $fichiers" "$temp"]!="0"} {
            lappend lis $temp
            fwrite $fichiers $temp
            putserv "NOTICE $nick :\002$temp\002 \0034a été ajouté\0034"
            putserv "PRIVMSG $salons :\002$temp\002 \0034est ajouté au operateur\0034"
            return 0
        }
        putserv "NOTICE $nick :\002Erreur:\002$temp\002 \0034est déjà dans la liste des operateur\0034"
        return 0
    }
	# Procédure de suppression de pseudo autorise.
    bind pub o "!opdel" [namespace current]::-ajout
    proc -ajout { nick host hand chan arg } {
        variable fichiers
        variable salons
        set temp [lindex $arg 0]
        if {$temp == ""} {
            putserv "NOTICE $nick :Utilisation: !opdel <pseudo>"
            putserv "NOTICE $nick :Exemple: !opdel $nick"
            return 0
        }
        set autoajout "[fread $fichiers]"
        set tmp ""
        foreach bb $autoajout {
            if {![string match $temp $bb]} {lappend tmp $bb}
        }
        fdel $fichiers $tmp
        putserv "NOTICE $nick :\002$temp\002 \0034supprimé des operateur\0034"
        putserv "PRIVMSG $salons :\002$temp\002 \0034est supprimé des operateur\0034"
        return 0
    }
	# Procédure pour voir la liste des autorise.
    bind pub o "!oplist" [namespace current]::auto
    proc auto { nick host hand chan arg } {
        variable fichiers
        variable salons
        set fp [open $fichiers "r"]
        set fc -1
        putserv "notice $nick :\037\00300,01 -> Liste des operateur. <-\037\003"
        while {![eof $fp]} {
            set data [gets $fp]
            incr fc
            if {$data !=""} {
                putserv "notice $nick :\0031\[ \0034$data\0031\0031 ]\0031"
            }
            unset data
        }
        close $fp
        putserv "notice $nick :\037\00300,01 -> Fin de la liste des operateur. <-\037\003"
    }
	# Ne pas toucher Systeme Proc  !!
    proc acceesalon {nick} {
        variable fichiers
        set fa [open $fichiers r]
        set access 0
        while { ![eof $fa]} {
        set ligne [gets $fa]
        if {[string first [string tolower $ligne] [string tolower $nick]]==0} {
            set access 1
        }
        }
close $fa
return $access
    }
    # Procédure d'écriture de fichier.
    proc fwrite {fi arg} {
        set f [open $fi a]
        puts $f $arg
        close $f
    }
    # Procédure de suppression de fichier.
    proc fdel {fi arg} {
        set f [open $fi w]
        puts $f $arg
        close $f
    }
    # Procédure de lecture de fichier.
    proc fread {fi} {
        set f [open $fi r]
        set t [gets $f]
        close $f
        return $t
    }
}

Site Web: Clic ici Nous rejoindres par mIRC -> Clic Ici
inutile d'avoir une grosse machine si il y'a un con deriere l'ecran :D
#14
Prend le code que j'ai mis juste avant et test voir
#15
(26/02/2014, 16:49)aliasangelius Wrote: Prend le code que j'ai mis juste avant et test voir

Je les testé il me fais planter l'egg... Erreur ligne 25
Site Web: Clic ici Nous rejoindres par mIRC -> Clic Ici
inutile d'avoir une grosse machine si il y'a un con deriere l'ecran :D


Forum Jump:


Users browsing this thread: 1 Guest(s)