Communauté Eggdrop
[Tuto] Les fichiers comme DB - Version imprimable

+- Communauté Eggdrop (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)
+--- Sujet : [Tuto] Les fichiers comme DB (/showthread.php?tid=974)

Pages : 1 2 3 4


RE: [Tuto] Les fichiers comme DB - aliasangelius - 28/06/2011

Je cherche à comprendre le système surtout et c'est pour ma part très flou le tout


RE: [Tuto] Les fichiers comme DB - djkenny - 28/06/2011

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


RE: [Tuto] Les fichiers comme DB - aliasangelius - 28/06/2011

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 ?


RE: [Tuto] Les fichiers comme DB - djkenny - 28/06/2011

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


RE: [Tuto] Les fichiers comme DB - aliasangelius - 28/06/2011

Oui mais moi le level doit être dans le fichier et non dans un set sinon je me connais sa sera vite le bordel..


RE: [Tuto] Les fichiers comme DB - djkenny - 28/06/2011

ba si ca t amuse d ouvrir et fermerun fichier par utilisateur a chaque commande, bonne chance Smile


RE: [Tuto] Les fichiers comme DB - aliasangelius - 28/06/2011

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.


RE: [Tuto] Les fichiers comme DB - djkenny - 28/06/2011

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)
Citation :#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é"
    }
}





RE: [Tuto] Les fichiers comme DB - aliasangelius - 01/07/2011

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 à ?


RE: [Tuto] Les fichiers comme DB - CrazyCat - 01/07/2011

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.


RE: [Tuto] Les fichiers comme DB - djkenny - 02/07/2011

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





RE: [Tuto] Les fichiers comme DB - aliasangelius - 02/07/2011

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.


RE: [Tuto] Les fichiers comme DB - djkenny - 02/07/2011

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


RE: [Tuto] Les fichiers comme DB - aliasangelius - 02/07/2011

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.


RE: [Tuto] Les fichiers comme DB - djkenny - 02/07/2011

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
.....