Improve is_admin and is_owner to check for cloak in privmsg if available.

This commit is contained in:
Vgr E.Barry 2015-02-01 06:08:44 -05:00
parent b490d91f7a
commit 1ce5d69113
3 changed files with 40 additions and 22 deletions

View File

@ -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))

View File

@ -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):

View File

@ -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: