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


[Tuto] Les fichiers comme DB
#16
Je cherche à comprendre le système surtout et c'est pour ma part très flou le tout
#17
ben en détaillant un peut ça donne:

- tu te auth -> /msg tonbot auth #salon pseudo password
- le bot ouvre le fichier contenant les information (pseudo password level host)
- si ça correspond il set une variable permettant de se rappeler que tu est auth, celle ci peut contenir par exemple le level et le salon sur lequel tu est autorisé.
- si tu demande le alist le bot recherche dans les variable de auth précédemment set celles qui correspondent au salon et te retourne la liste des pseudo avec leur level etc...
- si tu demande un op, le bot vérifie si la variable de auth pour ton pseudo existe et si le level qui est set dedans correspond au level de op, si c est le cas il te op sinon rien
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#18
Ok.

Donc dans ton exemple si je comprend bien tu parle de set le level.
Faire une variable genre : set level(op) "200" c'est ça que tu veut dire ?
#19
ba y te faudras 2 variables

level(op) 200 pour la commande
et par exemple
authed($pseudo) 350
pour l utilisateur qui viens de s authentifier

edite: authed($pseudo) $level même
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#20
Oui mais moi le level doit être dans le fichier et non dans un set sinon je me connais sa sera vite le bordel..
#21
ba si ca t amuse d ouvrir et fermerun fichier par utilisateur a chaque commande, bonne chance :)
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#22
J'ai jamais dit ça..
Je débute dans le système de fichier enfin la en ce moment je patoge plutôt..
J'essaye vraiment de comprendre chaque syntaxe et tout pour essayé de bien faire.

Si ouvrir/fermer à chaque fois n'es pas une bonne solution moi je sais pas je suis pas quelqu'un d'expérimenter dans ce domaine la.
#23
bon j vais tenter de t expliquer une dernière foi, avec des bout de code simples
on va commencer par la structure du fichier qui contient les données utilisateurs (pseudo pass...)

donc le fichier "users.db" (par exemples)
Quote:#accueil alias_angelius motdepassdefou 200 alias_angelius*!*@*
#services alias_angelius passwordquitu 350 alias_angelius*!*@*
#accueil autre_pseudo unmotdepass 400 sonhost*!*@*machin.net

donc ici on retrouve le salon ou est autorisé le pseudo avec son mot de pass, son level et le host avec lequel il sera reconnu

on passe a la proc de auth (très simpliste)
/msg lebot auth #salon pseudo pass

tcl
bind msg - auth mon:auth
 
proc mon:auth {nick host hand arg} {
    variable authed ;#on déclare la variable qui contiendra les utilisateurs identifié
 
    #on ouvre le fichier et récupère les données qui sont dedans
    set a [open users.db]
    set users [split [read $a] "\n"]
    close $a
    #les données sont contenues dans $users
 
    set salon [lindex $arg 0]
    set pseudo [lindex $arg 1]
    set pass [lindex $arg 2]
    foreach u $users {
        set c [lindex $u 0]
        #on verifi que le salon correspond au salon contenue dans la ligne du fichier, sinon on saute a la boucle suivante
        if ![string equal -nocase $c $salon] continue
        #on controle si le pseudo correspond, sinon on saute la boucle suivante
        set ps [lindex $u 1]
        if ![string equal -nocase $ps $pseudo] continue
        #on vérifie si le mot de passe correspond
        set pa [lindex $u 2]
         if ![string equal $pa $pass] continue
        #pour finir on teste le host
        set h [lindex $u 4]
        if ![string match -nocase $h "$nick!$host"] continue
        #arrivé la l utilisateur a remplis toutes les conditions pour s identifier donc on va le retenir
        set level [lindex $u 3]
        set authed($nick,$chan) $level
        putserv "NOTICE $nick :Vous êtes identifié sur le salon $salon"
        # et on fini la procédure
        return
    }
    #sinon arrivé la l utilisateur n'as pas d'accès donc on lui dit
    putserv "NOTICE $nick :Vous n'avez pas d'accès"
}
 
#le op maintenant
set level(op) 200
bind pub - !op mon:op
 
proc mon:op {nick host hand chan arg}
    global level
    variable authed
    #on vérifie que la personne est auth sur le salon et que le level est suffisant
    if {[info exists authed($nick,$chan)] && $authed($nick,$chan)>=$level(op)} {
        putserv "MODE $chan +o $nick"
    } else {
        putserv "NOTICE $nick :Accès refusé"
    }
}

C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#24
Salut,

Mais je ne comprends pas un truc tu as bien le level 200 dans le fichier ok.

Mais lors de ta procédure op tu fais un set level(op) 200 pourquoi par vérifié dans le fichier le level que la personne à ?
#25
J'ai l'impression que tu raisonnes à l'envers.
Si je comprends bien, tu voudrais vérifier que la personne a le niveau requis, et alors l'authentifier.

Il faut faire le contraire, comme le fait très bien djkenny : La personne s'authentifie, et après tu vérifies qu'elle a les droits suffisants pour effectuer l'action désirée.
Le set level(op) 200 est un paramètre de configuration, qui dit que si on est au minimum 200, alors on est opérateur.

Conclusion du script: Si la personne est correctement authentifiée sur le canal et qu'elle a un access d'au moins 200, on lui met le +o.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#26
petite correction au passage (une petite faute d inattention), il faut remplacer ca
tcl
set authed($nick,$chan) $level

par
tcl
set authed($nick,$salon) $level

C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#27
Mais c'est pas ce que je recherche comme système. enfin je ferait un truc d'exemple du moins je vais essayé pour que vous comprenez ce que moi je veux.
#28
ba c est un système générique, jusqu’à présent (mis à part le système de eggdrop qui utilise set/get user) j en ai jamais vu d'autre, ou alors avec de légères variantes.
mais si tu veux un système par level comme irix par exemple c est le seule moyen
C'est en reconnaissant ses erreurs que l'on progresse ;)
Away
#29
non moi ce que je cherche c'est regardez le level dans le fichier et non faire appel à un set qui mets le level comme tu as fait.
#30
ba le level est dans le fichier lol


tcl
set a [open users.db]
    set users [split [read $a] "\n"]
    close $a
.....
    #foreach ligne par ligne du fichier donc 1ere ligne
# $u == #accueil alias_angelius motdepassdefou 200 alias_angelius*!*@*
    foreach u $users {
.....
        # lindex $u 3 est bien égale au level, 200 dans ce cas la         
        set level [lindex $u 3]
        set authed($nick,$salon) $level
.....

C'est en reconnaissant ses erreurs que l'on progresse ;)
Away


Possibly Related Threads…
Thread Author Replies Views Last Post
  Questions sur les fichiers de configuration CrazyCat 11 5,704 17/10/2011, 22:39
Last Post: CrazyCat
  explication sur les fichiers .db lesny 2 4,669 27/02/2011, 19:11
Last Post: CrazyCat
  Recherche tuto tcl/sql BdS 2 4,002 08/11/2008, 02:10
Last Post: BdS
  tuto megahal. 0 169 Less than 1 minute ago
Last Post:
  Besoin d'aide pour manipuler les fichiers ini, txt et db 0 223 Less than 1 minute ago
Last Post:

Forum Jump:


Users browsing this thread: 1 Guest(s)