Autorise
#1
Bonjour,

Je reviens vers vous car je suis dans un dilème..
Donc j'explique la conception du TCL avant tout.

Le but du TCL et de vérifié dans un fichier si un pseudo et dedans.
Si le pseudo et bien dedans l'eggdrop Voice la personne.
Par contre si la personne et inconnue dans le même fichier l'eggdrop éjecte la personne.

Voici donc maintenant mon soucis.
J'ai donc inscris un pseudo dans le fichier.

Exemple :
Citation :[11:11:50] (alias_angelius) .+autorise FaNaTiC
[11:11:52] Notice Talk-me ~¤~ FaNaTiC a été ajouté ~¤~
[11:11:53] (@Talk-me) FaNaTiC est ajouté au pseudos autorisé

Ensuite je rajoute mon pseudo "alias_angelius" avec la même commande.
Il me dit la même phrase ci dessus.

Donc dans le fichier je me retrouve avec : FaNaTiC
Et alias_angelius
Sachant que alias_angelius et en dessous de FaNaTiC.

La tout fonctionne parfaitement.
Maintenant Voici le vrai soucis.. :

Je vais donc faire un /part et /join sur le salon.
Citation :[11:11:58] [Part] alias_angelius [040Hindifferent@4266579431.com] est parti de #blabla
[11:11:58] [Join] alias_angelius [040Hindifferent@4266579431.com] a rejoint #blabla
[11:11:58] (@Talk-me) Authentification ° Refusé ° pour alias_angelius

Donc là il me dit que je ne suis pas autorisé..
Sachant que je suis bien dans le fichier.

Je ne comprend pas trop le soucis.

Voici le code TCL pour plus d'informations.

tcl
#*******************#
# Autorise.tcl V1.0 #
#*******************#
 
# Description du code TCL.
 
#***********************************#
# TCL en NameSpace.                 #
# Utilisation de msgcat.            #
# Utilisation des procédure         #
# Pushmode/Putkick.                 #
#***********************************#
 
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 "#blabla"
    # Nom du fichier ou seront les pseudos autorisé.
    variable fichiers "autorise_salon.db"
    # Les messages de msgcat.
    ::msgcat::mcset fr msg1 "\00314Authentification \0034° \0033Acceptée \0034° \037\0031pour %s\037\0031"
    ::msgcat::mcset fr msg2 "\00314Authentification \0034° \0034Refusé \0034° \037\0031pour %s\037\0031"
    ::msgcat::mcset fr kickmsg "\037\0031Accès refusé.\037 \0032->\0034Salon Privé\0032<-\037\0032"
    # 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
        set hostmask "[split [getchanhost $vnick $chan] @]"
        set hostmask "!*@*[lindex $hostmask 1]"
        if [isbotnick $nick] return
        if {[acceesalon $nick]==0} {
            putquick "privmsg $salons :[::msgcat::mc msg2 $nick]"
            #pushmode $salons +b $k!*@*
            #pushmode $salons +b $k|*!*@*
            #putkick $salons $vnick :[::msgcat::mc kickmsg]
            return 1
        }
            putquick "privmsg $salons :[::msgcat::mc msg1 $nick]"
            pushmode $salons +v $nick
            return 0
        }
    # Procédure d'ajout de pseudo autorise.
    bind pub o ".+autorise" [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: .+autorise <pseudo>"
            putserv "NOTICE $nick :Exemple .+autorise $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 pseudos autorisé\0034"
            return 0
        }
        putserv "NOTICE $nick :\002Erreur:\002$temp\002 \0034est déjà autorisé\0034"
        return 0
    }
    # Procédure de suppression de pseudo autorise.
    bind pub o ".-autorise" [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: .-autorise <pseudo>"
            putserv "NOTICE $nick :Exemple: .-autorise $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 autorisé\0034"
        putserv "PRIVMSG $salons :\002$temp\002 \0034est supprimé des pseudo autorisé\0034"
        return 0
    }
    # Ne pas toucher Systeme Proc  !!
    proc acceesalon {nick} {
        variable fichiers
        set access 0
        set fa [open "$fichiers" r]
        while {![eof $fa]} {
            set get [gets $fa]
            if {[string first [string tolower $get] [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
    }
}


  Répondre   Avertir
#2
Superbe:
tcl
while {![eof $fa]} {
   set get [gets $fa]
   if {[string first [string tolower $get] [string tolower $nick]]==0} {
      set access 1
   }
   close $fa
   return $access
}


Donc, tu démarres ta boucle, tu lis la première ligne et quoi qu'il arrive tu fermes l'accès au fichier et tu retournes $access ?
  Répondre   Avertir
#3
J'ai modifié ainsi :

tcl
set fa [open "$fichiers" r]
        while {![eof $fa]} {
            set get [gets $fa]
            if {[string first [string tolower $get] [string tolower $nick]]==0} {
            }
            close $fa
        }



Mais j'ai toujours mon soucis de join même étant dans le fichier..

Je comprend rien franchement..
  Répondre   Avertir
#4
Ton close est TOUJOURS dans ton while. Et la àa ne fait plus rien.
C'est pourtant facile à faire:
tcl
set fa [open $fichiers r]
set access 0
while { ![eof $fa]} {
   set ligne [gets $fa]
   if {[string first [string tolower $get] [string tolower $nick]]==0} {
      set access 1
   }
}
close $fa
return $access


  Répondre   Avertir
#5
Merci sa fonctionne parfaitement comme sa !! J'ai modifié $get par $ligne par contre Smile

Petite chose CrazyCat tu peut me donner une explication ?
Car même corrigé j'ai toujour pas compris en faite :/
  Répondre   Avertir
#6
Je pense que je vais juste commenter mon code, il est assez parlant.
tcl
set fa [open $fichiers r] # on ouvre le fichier en lecture
set access 0 # on initialise $access à 0 (valeur par défaut, renvoyée si rien ne matche)
while { ![eof $fa]} { # Tant qu'on est pas à la fin du fichier
   set ligne [gets $fa] # on lit une ligne
   if {[string first [string tolower $ligne] [string tolower $nick]]==0} { # si le nick est dans la ligne
      set access 1 # on passe $access à 1
   } # fin du if (donc si nick n'est pas dans la ligne, on ne fait rien)
} # fin du tant que (si on est pas à la fin du fichier, on boucle pour la ligne suivante)
close $fa # On peut fermer le fichier, on a tout lu
return $access # On retourne $access maintenant qu'on a tout lu


Ce système aurait pu être optimisé, par exemple en faisant sortir du while sitôt qu'on a la bonne valeur (ça évite de tout lire). Pour celà, il suffit de changer le while:
tcl
while { ![eof $fa] && $access==0} {


  Répondre   Avertir
#7
Oui là je comprend mieux c'est beaucoup plus clair merci Smile.

Heu oui en optimisant comme sa mais j'aime pas je le trouve moins strict le code si tu optimise comme ceci.
De préférence j'adopte plutôt pour la version non optimisé..
  Répondre   Avertir
#8
Tcl mis en téléchargement si celà intêresse du monde.
Utilisation du pushmode/putkick.

http://scripts.eggdrop.fr/details-Autori...-s157.html
  Répondre   Avertir
#9
bonjour,

le script marche trés bien, lorsque j'ajoute Inoko en pseudo autorisé, mais si une autre personne prend un pseudo Inoko2 par exemple, cette personne pourra rentrer dans le salon. Comment rectifier ce bug?
  Répondre   Avertir
#10
salut ,

Peut etre en utilisant ce que l'eggdrop connais dejà: les flags
Ou peut etre un simple system de @host, et non de pseudo!*@* ( bien que avec les ip dynamiqueq ça ne vas pas être pratique du tout, ni securisé.)

Eventuellement n'autoriser le salon qu'aux pseudos enRegistrés, dejà ça limiterait la "casse".

Cordialement.

nota:
Quel est l'interet de ce tcl ? dans une utilisation normale d'un salon, je mettrait le voice auto sur level 1 , et le salon en mode +R et/ou accés via chanserv.
Les services existent dans la majeure partie des reseaux IRC, et sont fonctionnels. (ceci n'est qu'une question, en rien une attaque Smile )

Cordialement.
  Répondre   Avertir
#11
J'imagine que l'intérêt de ce TCL est pour les réseaux tels qu'Undernet (où les services ne sont pas faciles à obtenir).

Pour ne plus avoir ce souci sur les nicks "ressemblants", il faut modifier la ligne 121:
tcl
if {[string first [string tolower $ligne] [string tolower $nick]]==0} {


Par quelque chose du genre:
tcl
if {[string tolower $nick] == [string tolower $ligne]} {


  Répondre   Avertir
#12
Bonjour,

@cestlemien,
En faite ya des réseau irc ou il n ya pas de services comme chanserv etc (unreal).
Moi je suis sur un server de type ircu ou les services tu doit les faire toi même..

Ensuite Le concept de ce tcl et lorsque des personnes créer un salon et désire avoir une back
Pour évité les modes comme +k ou +i etc Ben ce tcl à pour fonctions de remplacer ceci ce qui et légérement mieux d'un certains points de vue.

Merci CrazyCat pour ta réponse j'ai pas tester Je le ferait pour voir..
Après je pense qu'une fois tester et si sa fonctionne bien je vais mettre à jour le tcl en téléchargement.

@Inoko,
Si tu as tester avant moi.. Fait nous parvenir si cela corrige ton soucis ou pas merci Smile
  Répondre   Avertir
#13
oui, j'ai testé avec la modification de crazy et j'ai plus l'erreur des pseudos, merci.
  Répondre   Avertir
#14
Ok Merci je met à jours une v2 prochainement avec d'autre modifications au code.
  Répondre   Avertir
#15
bonsoir es que le tcl est fonctionne ? car moi quand je fais

Pour information je suis owner sur du bot et donc quand je fais .autorise je ne vois pas les personnes qui sont autorisées puis je vois pas les personnes que j'ai autorisé dans la back.

Pourriez-vous m'aider s il vous plait ?

en vous remerciant d avance Smile
  Répondre   Avertir


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)