]>
gitweb.pimeys.fr Git - bots/basile.git/blob - users.py
368f9784200e0cc6e60e7cd52afb07eb41940775
1 # -*- encoding: utf-8 -*-
3 """ Gestion des utilisateurs par Basile. """
11 """ Un utilisateur. Peut avoir plusieurs pseudos IRC, un seul idbde. """
12 def __init__(self
, pseudosirc
, idbde
):
13 self
.pseudosirc
, self
.idbde
= pseudosirc
, idbde
16 d
= {"pseudosirc" : self
.pseudosirc
, "idbde" : self
.idbde
}
19 def __unicode__(self
):
20 """ Retourne l'utilisateur affichable """
21 return unicode(self
.jsonize())
23 return unicode(self
).encode("utf-8")
25 return repr(str(self
))
27 def __eq__(self
, otheruser
):
28 """ Teste l'égalité entre deux utilisateurs (= ont un pseudo IRC commun).
29 Accepte aussi en deuxième une chaîne de caractères. """
30 myset
= set([p
.lower() for p
in self
.pseudosirc
])
31 if isinstance(otheruser
, User
):
32 hisset
= [p
.lower() for p
in otheruser
.pseudosirc
]
34 hisset
= [otheruser
.lower()]
35 return myset
.intersection(hisset
) != set()
37 def get_infos(self
, sock
, serv
, canal
):
38 """ Récupère sur le serveur les infos sur le compte. """
39 return nk
.get_infos(sock
, self
.idbde
, serv
, canal
)
41 def load_file(filename
):
42 """ Récupère les utilisateurs depuis le fichier """
43 with
open(filename
) as f
:
44 jsonusers
= json
.load(f
)
45 users
= [User(**u
) for u
in jsonusers
]
48 def save_file(users
, filename
):
49 """ Enregistre les utilisateurs dans le fichier """
50 with
open(filename
, "w") as f
:
51 raws
= [u
.jsonize() for u
in users
]
55 """ Stocke et distribue des utilisateurs. """
60 """ Charge le fichier d'utilisateurs dans la DB """
61 self
.userlist
= load_file(config
.users_file
)
64 """ Sauvegarde la DB dans le fichier d'utilisateurs """
65 save_file(self
.userlist
, config
.users_file
)
67 def add(self
, pseudoirc
, idbde
):
68 """ Enregistre un nouvel utilisateur, sauf si il existe déjà. """
69 if not self
.has(pseudoirc
):
70 newuser
= User(pseudosirc
=[pseudoirc
], idbde
=idbde
)
71 self
.userlist
.append(newuser
)
77 def group(self
, newpseudoirc
, oldpseudoirc
):
78 """ Enregistre un autre pseudo IRC à un utilisateur existant. """
79 user
= self
[oldpseudoirc
]
80 if newpseudoirc
.lower() in [p
.lower() for p
in user
.pseudosirc
]:
82 user
.pseudosirc
.append(newpseudoirc
)
85 def drop(self
, idbde
):
86 """ Enlève un utilisateur, via son idbde. """
87 idrop
= [i
for (i
, u
) in enumerate(self
.userlist
) if u
.idbde
== idbde
]
89 self
.userlist
.pop(idrop
[0])
92 raise KeyError("Pas d'utilisateur d'idbde %s." % (idbde
,))
94 def __getitem__(self
, pseudoirc
):
95 """ Récupère un utilisateur par son pseudo IRC. """
96 pseudo
= pseudoirc
.lower()
97 match
= [u
for u
in self
.userlist
if pseudo
in [p
.lower() for p
in u
.pseudosirc
]]
101 raise KeyError("Utilisateur inexistant : %r" % pseudoirc
)
103 def has(self
, pseudoirc
):
104 """ Vérifie si cet utilisateur existe dans la base (case-insensitive). """
106 user
= self
[pseudoirc
]
113 return repr(self
.userlist
)