Caught signals that would otherwise be fatal and saveless.
[halbot.git] / perms.py
blob16ecc330bf61a1092e55152d503f2f4124a240d7
1 class Perms(object):
2 symbols = {}
3 names = {}
4 def __init__(self, level, symbol=None, name=None):
5 self.level = level
6 self.symbol = symbol
7 if symbol:
8 Perms.symbols[symbol] = self
9 self.name = name
10 if name:
11 Perms.names[name] = self
12 def __cmp__(self, other):
13 return self.level - other.level
14 def __str__(self):
15 if self.name:
16 return self.name
17 elif self.symbol:
18 return self.symbol
19 else:
20 return str(self.level)
21 #@staticmethod
22 def from_symbol(symbol):
23 return Perms.symbols.get(symbol, Perms(0))
24 from_symbol = staticmethod(from_symbol)
25 #@staticmethod
26 def from_name(name):
27 return Perms.names.get(name.lower(), Perms(0))
28 from_name = staticmethod(from_name)
29 ban = Perms(-2, None, "banned")
30 none = Perms(-1, None, "none")
31 present = Perms(0, None, "present") # Default for from_symbol, albeit == not is.
32 voice = Perms(1, "+", "voice")
33 hop = Perms(2, "%", "halfop")
34 op = Perms(3, "@", "op")
35 admin = Perms(4, "&", "admin")
36 owner = Perms(5, "~", "owner")
37 ircop = Perms(6, None, "ircop")
39 def get_perms(who, where, info):
40 from globals import private, my_users
41 if info.ircop:
42 return ircop
43 if where == private:
44 server_perm = owner
45 else:
46 server_perm = info.channel_perms.get(where, none)
47 if info.registered:
48 my_perm = my_users.get(who, none)
49 else:
50 my_perm = none
51 return max(server_perm, my_perm)