diff --git a/Bantracker/plugin.py b/Bantracker/plugin.py index 49f7360..2f38b9a 100644 --- a/Bantracker/plugin.py +++ b/Bantracker/plugin.py @@ -55,13 +55,21 @@ tz = 'UTC' def now(): return cPickle.dumps(datetime.datetime.now(pytz.timezone(tz))) + def capab(user, capability): - try: - if capability in list(user.capabilities): + capability = capability.lower() + capabilities = list(user.capabilities) + # Capability hierarchy # + if capability == "bantracker": + if capab(user.name, "admin"): return True - else: - return False - except: + if capability == "admin": + if capab(user.name, "owner"): + return True + # End # + if capability in capabilities: + return True + else: return False def hostmaskPatternEqual(pattern, hostmask): @@ -531,7 +539,7 @@ class Bantracker(callbacks.Plugin): hostmask = self.nick_to_host(irc, target) data = self.sort_bans(channel) - if 'owner' in list(user.capabilities) or 'admin' in list(user.capabilities): + if capab(user, 'admin'): if len(queue.msgcache) > 0: irc.reply("Warning: still syncing (%i)" % len(queue.msgcache)) @@ -560,7 +568,7 @@ class Bantracker(callbacks.Plugin): for i in ret: irc.reply("Match: %s by %s in %s on %s (ID: %s)" % (i[0] + (i[1],))) - if 'botmsg' in list(user.capabilities): + if capab(user, 'botmsg'): if target.split('!', 1)[0] != '*': irc.reply("%s/bans.cgi?log=%s&mark=%s" % (self.registryValue('bansite'), i[1], target.split('!')[0]), private=True) else: @@ -697,7 +705,7 @@ class Bantracker(callbacks.Plugin): user = self.check_auth(irc, msg, args) if not user: return - if 'botmsg' in list(user.capabilities): + if capab(user, 'botmsg'): user.removeCapability('botmsg') irc.reply("Disabled") else: diff --git a/Encyclopedia/plugin.py b/Encyclopedia/plugin.py index 1f8ab44..17eef56 100644 --- a/Encyclopedia/plugin.py +++ b/Encyclopedia/plugin.py @@ -64,17 +64,31 @@ def queue(irc, to, msg): irc.queueMsg(ircmsgs.privmsg(to, msg)) def capab(prefix, capability): + capability = capability.lower() if prefix.find('!') > 0: user = prefix[:prefix.find('!')] else: user = prefix try: - if 'editfactoids' in list(ircdb.users.getUser(prefix).capabilities): - return True - else: - return False + user = ircdb.users.getUser(prefix) + capabilities = list(user.capabilities) except: return False + # Capability hierarchy # + if capability == "editfactoids": + if capab(user.name, "addeditors"): + return True + if capability == "addeditors": + if capab(user.name, "admin"): + return True + if capability == "admin": + if capab(user.name, "owner"): + return True + # End # + if capability in capabilities: + return True + else: + return False class Encyclopedia(callbacks.Plugin): """!factoid: show factoid""" @@ -128,8 +142,7 @@ class Encyclopedia(callbacks.Plugin): Lists all the users who are in the list of editors. """ - irc.reply(', '.join([ircdb.users.getUser(u).name for u in ircdb.users.users \ - if 'editfactoids' in ircdb.users.getUser(u).capabilities]), private=True) + irc.reply(', '.join([u.name for u in ircdb.users.users.values() if capab(u.name, "editfactoids")]), private=True) editors = wrap(editors) def moderators(self, irc, msg, args): @@ -137,8 +150,7 @@ class Encyclopedia(callbacks.Plugin): Lists all the users who can add users to the list of editors. """ - irc.reply(', '.join([ircdb.users.getUser(u).name for u in ircdb.users.users \ - if 'addeditors' in ircdb.users.getUser(u).capabilities]), private=True) + irc.reply(', '.join([u.name for u in ircdb.users.users.values() if capab(u.name, 'addeditors')]), private=True) moderators = wrap(moderators) def get_target(self, nick, text, orig_target):