Communauté sur les Eggdrops - Community about Eggdrops
[Tuto] Les fichiers comme DB - Printable Version

+- Communauté sur les Eggdrops - Community about Eggdrops (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)
+--- Thread: [Tuto] Les fichiers comme DB (/showthread.php?tid=974)

Pages: 1 2 3 4


[Tuto] Les fichiers comme DB - CrazyCat - 21/06/2011

Très souvent, voire trop souvent, on demande comment utiliser un fichier comme base de données. Et trop souvent, la personne qui demande n'a pas la moindre idée de l'utilisation d'une base de données, quel que soit son format.

Donc, que l'on utilise une base de données "normale" ou des fichiers (notez le pluriel), il faut garder à l'esprit la structure des données. Autant parfois utiliser une seule table, ou un fichier "plat", s'avère logique, autant il faut parfois penser à des choses plus complexes.

Et il y a aussi la question des requêtes, de ce qui doit être chargé à l'avance ou pas. Avec des fichiers, on ne peut pas faire de jointures, donc il faut bien réfléchir à tout ça.

Le dernier cas, c'est alias_angelius qui veut faire un système de gestion de droits par utilisateur et par canal, et qui pense faire un fichier plat. Pour ma part, et parce que je travaille très souvent avec des bases de données, j'envisage tout de suite 3 sources:
- utilisateur: nick, password
- canal: canal, description, n'importe quoi...
- level: nick, canal, level

Toutes les requêtes se feront donc au moins en 2 temps:
- vérification de l'utilisateur (utilisateur existe dans le fichier, password concorde), on peut utiliser un flag user temporaire pour vérifier si l'utilisateur est authentifié. (pour ma part, je ferais ça en utilisant la userlist)
- récupération de la ligne de "level" qui contient ET nick ET canal (une bonne regexp, c'est plus rapide)
Derrière ça, on analyse le level, ou son absence, et hop.

Ce système a l'avantage de ne pas brider les bases à une et une seule utilisation, elles peuvent être étendues. Et surtout, ça permet de gérer le fait qu'un utilisateur ait des accès sur plusieurs canaux tout en gardant les contraintes d'unicité.

Très vite, un code dans le wiki pour expliquer tout ça en pratique.


RE: [Tuto] Les fichiers comme DB - fedora - 21/06/2011

merci CrazyCat pour ce tuto qui je pense va bien nous aidez :)


RE: [Tuto] Les fichiers comme DB - CrazyCat - 24/06/2011

Allez hop, j'ai fait http://wiki.eggdrop.fr/Fichiers_et_DB


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

salut,

je suis pas trop d'accors avec toi, le fait d'ouvrir/fermer le fichier à chaque invocation de la proc n'est pas trop une bonne idée, il serait plus judicieux de charger les informations du fichier dans une variable au chargement du tcl (soit une simple var, soit un array, soit un dict) et de sauvegarder de temps en temps avec un bind evnt save.

http://www.eggdrop.fr/board/Lecture-fichier-%28ou-bdd%29-t-973-1.html#pid7037


RE: [Tuto] Les fichiers comme DB - CrazyCat - 25/06/2011

Oui et non.
Mon but dans ce mini-tuto était de montrer comment on peut rechercher une entrée particulière dans un fichier, pas de donner une solution miracle. Ensuite, tout charger dans une variable ou pas, ça dépend de ce qui est dans le fichier. De même que de faire un read ou de lire le fichier ligne par ligne...

Bref, c'est juste un exemple d'utilisation, pas LA règle à suivre.


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

Bonjour,

En faite je n’ai pas vraiment compris.

Je m'explique..
Donc le système de tuto que tu as fait sur le wiki concernant l'ouverture/fermeture ceci j'ai compris parfaitement ce que je ne comprenez pas vraiment avant.

Ensuite tu fais divers appels dans la procédure qui correspond à pseudo,chan,pass,level si je me trompe pas non ?
Ensuite ma question serait :

Si tu as level donc tu fais appel à level jusque la pas de soucis ok.
Mais ma question et si dans la ligne de niveaux.db au moment ou tu dois regardez le level qui sera par exemple 200 pour se auth.
Comment tu regarde ceci ?

C'est ça que je n'arrive pas trop à comprendre ça reste superflus encore :/


RE: [Tuto] Les fichiers comme DB - CrazyCat - 27/06/2011

alias_angelius Wrote:Bonjour,

En faite je n’ai pas vraiment compris.

Je m'explique..
Donc le système de tuto que tu as fait sur le wiki concernant l'ouverture/fermeture ceci j'ai compris parfaitement ce que je ne comprenez pas vraiment avant.

Ensuite tu fais divers appels dans la procédure qui correspond à pseudo,chan,pass,level si je me trompe pas non ?
Ensuite ma question serait :

Si tu as level donc tu fais appel à level jusque la pas de soucis ok.
Mais ma question et si dans la ligne de niveaux.db au moment ou tu dois regardez le level qui sera par exemple 200 pour se auth.
Comment tu regarde ceci ?

C'est ça que je n'arrive pas trop à comprendre ça reste superflus encore :/

Moi je ne comprends pas ta question.
On ne va jamais chercher les utilisateurs qui ont un level de 200, on va chercher l'utilisateur d'un canal et on regarde la valeur de son level.
Si tu veux, je traduis en SQL:

Code:
-- Ce que je comprends de ton idée
SELECT nick, channel FROM niveaux WHERE level = 200;
-- Et après chercher s'il y a l'utilisateur et le canal ?
--
-- Ce que je fais
SELECT level FROM niveaux WHERE nick='machin' AND canal='#bidule'
-- Là, on connait directement le niveau, on avait déjà avant nick et canal vu que c'est dans la commande tcl



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

En SQL... déjà en db j'ai du mal alors SQL..

En gros tu va enregistrer un utilisateur sur #fou ont va dire que ça va donner :

alias_angelius,#fou,200

Si je veux que tel commande soi au level 200 exemple ton système qui et l'exemple le !auth.
Je dois bien regardez si la personne qui tente de tapez la commande pour s'authentifié elle à bien le level requis.

Tu vois ce que je veux dire ?


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

dans ce cas la, (et encore une foi), tu n as pas besoin de ré-ouvrir le fichier. lors de la procédure de auth tu utilise une variable, par exemple authed($seudo), qui contiendra entre autre le level de la personne.

édite: si tu commences à ouvrir le fichier a chaque procédures la ça deviens vraiment du gros n importe quoi


RE: [Tuto] Les fichiers comme DB - CrazyCat - 27/06/2011

Ou mieux: authed($pseudo$channel) pour qu'une personne puisse être authentifiée sur différents canaux avec des levels différents.
alias_angelius Wrote:En SQL... déjà en db j'ai du mal alors SQL..
SQL est le langage utilisé pour les requêtes en bases de données.
alias_angelius Wrote:En gros tu va enregistrer un utilisateur sur #fou ont va dire que ça va donner :

alias_angelius,#fou,200

Si je veux que tel commande soi au level 200 exemple ton système qui et l'exemple le !auth.
Je dois bien regardez si la personne qui tente de tapez la commande pour s'authentifié elle à bien le level requis.

Tu vois ce que je veux dire ?
Non. Mets les mots dans l'ordre, et les bons mots, c'est illisible et incompréhensible.


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

personnellement j'utiliserais dict, la variable authed($pseudo) ressemblerait a ça:
{{#salon1 200} {#salon2 250} {#salon3 400}} etc..
c est plus simple à gérer lors du changement de pseudo


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

Bon je vais donnais un exemple pour que tu puisses comprendre CrazyCat..

Tu va coder un bind pub qui sera par exemple !alist
Ce fameux bind pub donnera la liste des personnes authentifié auprès de l'eggdrop et donc grâce au code que tu auras fait.
Mais à savoir pour tapez cette commande ainsi pour que le bot puisse t'autoriser à pouvoir voir qui et authentifié ou pas il faut un level.

Et donc ce fameux level l'eggdrop va le chercher dans le fichier niveaux.db sur la ligne ou tu as "level"
Et donc ce fameux "level" doit être remplacé par un chiffre me semble t-il non ?!

Donc exemple sur ce que j'appel "level" :

200 = opérateur par exemple.

Ce qui nous donnera si la personne na pas le "level 200" elle n'aura pas accès à la commande !alist.
Tu vois ce que je veux dire CrazyCat ?


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

en gros un peut comme un IriX pour la gestion des utilisateurs ...


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

Sa dépend de quel IriX tu parle.. Comme celui micrObe qui et en langage C il fait ce genre de chose à peut près.

Mais j'ai parlé de !alist car c'est le seul exemple stupide que j'ai trouvé sur le coup.


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

alias_angelius Wrote:Bon je vais donnais un exemple pour que tu puisses comprendre CrazyCat..

Tu va coder un bind pub qui sera par exemple !alist
Ce fameux bind pub donnera la liste des personnes authentifié auprès de l'eggdrop et donc grâce au code que tu auras fait.
Mais à savoir pour tapez cette commande ainsi pour que le bot puisse t'autoriser à pouvoir voir qui et authentifié ou pas il faut un level.

Et donc ce fameux level l'eggdrop va le chercher dans le fichier niveaux.db sur la ligne ou tu as "level"
Et donc ce fameux "level" doit être remplacé par un chiffre me semble t-il non ?!

Donc exemple sur ce que j'appel "level" :

200 = opérateur par exemple.

Ce qui nous donnera si la personne na pas le "level 200" elle n'aura pas accès à la commande !alist.
Tu vois ce que je veux dire CrazyCat ?

je crois que tu n'as pas compris, le fichier qui contient les accès, tu ne l ouvre qu une seule foi lors de l authentification. ensuite tu set le level dans une variable et dans ta proc de alist tu récupere le résultat de la variable.