From 1ce5d691139e527605b4a0ac3cc580399dd7cea1 Mon Sep 17 00:00:00 2001 From: "Vgr E.Barry" Date: Sun, 1 Feb 2015 06:08:44 -0500 Subject: [PATCH] Improve is_admin and is_owner to check for cloak in privmsg if available. --- modules/wolfgame.py | 8 +++---- settings/wolfgame.py | 50 ++++++++++++++++++++++++++++++-------------- tools/decorators.py | 4 ++-- 3 files changed, 40 insertions(+), 22 deletions(-) diff --git a/modules/wolfgame.py b/modules/wolfgame.py index 8239690..44dfadd 100644 --- a/modules/wolfgame.py +++ b/modules/wolfgame.py @@ -6048,7 +6048,7 @@ def get_help(cli, rnick, chan, rest): in fn[0].aliases and fn[0].chan): fns.append("\u0002"+name+"\u0002") afns = [] - if is_admin(nick): + if is_admin(nick, cloak): for name, fn in COMMANDS.items(): if fn[0].admin_only and name not in fn[0].aliases: afns.append("\u0002"+name+"\u0002") @@ -6069,7 +6069,7 @@ def on_invite(cli, nick, something, chan): if chan == botconfig.CHANNEL: cli.join(chan) return # No questions - if is_admin(parse_nick(nick)[0]): + if is_admin(*parse_nick(nick)[:4:3]): cli.join(chan) # Allows the bot to be present in any channel debuglog(nick, "INVITE", chan, display=True) else: @@ -6590,7 +6590,7 @@ def fsend(cli, nick, chan, rest): cli.send(rest) def _say(cli, raw_nick, rest, command, action=False): - nick = parse_nick(raw_nick)[0] + nick, cloak = parse_nick(raw_nick)[:4:3] rest = rest.split(" ", 1) if len(rest) < 2: @@ -6601,7 +6601,7 @@ def _say(cli, raw_nick, rest, command, action=False): (target, message) = rest - if not is_admin(nick): + if not is_admin(nick, cloak): if nick not in var.USERS: pm(cli, nick, "You have to be in {0} to use this command.".format( botconfig.CHANNEL)) diff --git a/settings/wolfgame.py b/settings/wolfgame.py index 207b0fa..25991e7 100644 --- a/settings/wolfgame.py +++ b/settings/wolfgame.py @@ -247,24 +247,42 @@ PING_IN_ACCS = [] # accounts of people who have opted in for ping is_role = lambda plyr, rol: rol in ROLES and plyr in ROLES[rol] -def is_admin(nick): - if nick not in USERS.keys(): - return False - if USERS[nick]["account"] != "*": # Check only account - if [ptn for ptn in botconfig.OWNERS_ACCOUNTS+botconfig.ADMINS_ACCOUNTS if fnmatch.fnmatch(USERS[nick]["account"].lower(), ptn.lower())]: - return True - if [ptn for ptn in botconfig.OWNERS+botconfig.ADMINS if fnmatch.fnmatch(USERS[nick]["cloak"].lower(), ptn.lower())]: - return True +def is_admin(nick, cloak=None, acc=None): + if nick in USERS.keys(): + if not cloak: + cloak = USERS[nick]["cloak"] + if not acc: + acc = USERS[nick]["account"] + + if acc and acc != "*": + for pattern in set(botconfig.OWNERS_ACCOUNTS + botconfig.ADMINS_ACCOUNTS): + if fnmatch.fnmatch(acc.lower(), pattern.lower()): + return True + + if cloak: + for pattern in set(botconfig.OWNERS + botconfig.ADMINS): + if fnmatch.fnmatch(cloak.lower(), pattern.lower()): + return True + return False -def is_owner(nick): - if nick not in USERS.keys(): - return False - if USERS[nick]["account"] != "*": - if [ptn for ptn in botconfig.OWNERS_ACCOUNTS if fnmatch.fnmatch(USERS[nick]["account"].lower(), ptn.lower())]: - return True - if [ptn for ptn in botconfig.OWNERS if fnmatch.fnmatch(USERS[nick]["cloak"].lower(), ptn.lower())]: - return True +def is_owner(nick, cloak=None, acc=None): + if nick in USERS.keys(): + if not cloak: + cloak = USERS[nick]["cloak"] + if not acc: + acc = USERS[nick]["account"] + + if acc and acc != "*": + for pattern in botconfig.OWNERS_ACCOUNTS: + if fnmatch.fnmatch(acc.lower(), pattern.lower()): + return True + + if cloak: + for pattern in botconfig.OWNERS: + if fnmatch.fnmatch(cloak.lower(), pattern.lower()): + return True + return False def plural(role): diff --git a/tools/decorators.py b/tools/decorators.py index e833180..69c6861 100644 --- a/tools/decorators.py +++ b/tools/decorators.py @@ -110,14 +110,14 @@ def generate(fdict, permissions=True, **kwargs): adminlog(largs[2], rawnick, s[0], largs[3]) return f(*largs) # no questions if owner_only: - if var.is_owner(nick): + if var.is_owner(nick, cloak): adminlog(largs[2], rawnick, s[0], largs[3]) return f(*largs) else: largs[0].notice(nick, "You are not the owner.") return if admin_only: - if var.is_admin(nick): + if var.is_admin(nick, cloak): adminlog(largs[2], rawnick, s[0], largs[3]) return f(*largs) else: