]>
gitweb.pimeys.fr Git - bots/basile.git/blob - users.py
1 # -*- encoding: utf-8 -*-
3 """ Gestion des utilisateurs par Basile. """
10 """ Un utilisateur. Peut avoir plusieurs pseudos IRC, un seul idbde. """
11 def __init__(self
, pseudosirc
, idbde
):
12 self
.pseudosirc
, self
.idbde
= pseudosirc
, idbde
15 d
= {"pseudosirc" : self
.pseudosirc
, "idbde" : self
.idbde
}
18 def __unicode__(self
):
19 """ Retourne l'utilisateur affichable """
20 return unicode(self
.jsonize())
22 return unicode(self
).encode("utf-8")
24 return repr(str(self
))
26 def __eq__(self
, otheruser
):
27 """ Teste l'égalité entre deux utilisateurs (= ont un pseudo IRC commun).
28 Accepte aussi en deuxième une chaîne de caractères. """
29 myset
= set([p
.lower() for p
in self
.pseudosirc
])
30 if isinstance(otheruser
, User
):
31 hisset
= [p
.lower() for p
in otheruser
.pseudosirc
]
33 hisset
= [otheruser
.lower()]
34 return myset
.intersection(hisset
) != set()
36 def load_file(filename
):
37 """ Récupère les utilisateurs depuis le fichier """
38 with
open(filename
) as f
:
39 jsonusers
= json
.load(f
)
40 users
= [User(**u
) for u
in jsonusers
]
43 def save_file(users
, filename
):
44 """ Enregistre les utilisateurs dans le fichier """
45 with
open(filename
, "w") as f
:
46 raws
= [u
.jsonize() for u
in users
]
50 """ Stocke et distribue des utilisateurs. """
55 """ Charge le fichier d'utilisateurs dans la DB """
56 self
.userlist
= load_file(config
.users_file
)
59 """ Sauvegarde la DB dans le fichier d'utilisateurs """
60 save_file(self
.userlist
, config
.users_file
)
62 def add(self
, pseudoirc
, idbde
):
63 """ Enregistre un nouvel utilisateur, sauf si il existe déjà. """
64 if not self
.has(pseudoirc
):
65 newuser
= User(pseudosirc
=[pseudoirc
], idbde
=idbde
)
66 self
.userlist
.append(newuser
)
72 def group(self
, newpseudoirc
, oldpseudoirc
):
73 """ Enregistre un autre pseudo IRC à un utilisateur existant. """
74 user
= self
[oldpseudoirc
]
75 if newpseudoirc
.lower() in [p
.lower() for p
in user
.pseudosirc
]:
77 user
.pseudosirc
.append(newpseudoirc
)
80 def drop(self
, idbde
):
81 """ Enlève un utilisateur, via son idbde. """
82 idrop
= [i
for (i
, u
) in enumerate(self
.userlist
) if u
.idbde
== idbde
]
84 self
.userlist
.pop(idrop
[0])
87 raise KeyError("Pas d'utilisateur d'idbde %s." % (idbde
,))
89 def __getitem__(self
, pseudoirc
):
90 """ Récupère un utilisateur par son pseudo IRC. """
91 pseudo
= pseudoirc
.lower()
92 match
= [u
for u
in self
.userlist
if pseudo
in [p
.lower() for p
in u
.pseudosirc
]]
96 raise KeyError("Utilisateur inexistant : %r" % pseudoirc
)
98 def has(self
, pseudoirc
):
99 """ Vérifie si cet utilisateur existe dans la base (case-insensitive). """
101 user
= self
[pseudoirc
]
108 return repr(self
.userlist
)