Make DISABLE_ACCOUNTS actually disable account-related stuff.

Right now the only thing that still tracks accounts if DISABLE_ACCOUNTS
is True is stats stuff (in sqlite), as I'm unsure of how we want to
handle that for when accounts aren't enabled; likely track by nick but
unsure on that right now.

This further implements issue #112 but doesn't fix it entirely yet.
This commit is contained in:
skizzerz 2015-07-19 14:33:49 -05:00
parent 40a7337ee8
commit 93345c990d
3 changed files with 71 additions and 44 deletions

View File

@ -125,7 +125,7 @@ class cmd:
adminlog(chan, rawnick, self.name, rest) adminlog(chan, rawnick, self.name, rest)
return self.func(*largs) return self.func(*largs)
if acc: if not var.DISABLE_ACCOUNTS and acc:
for pattern in var.DENY_ACCOUNTS: for pattern in var.DENY_ACCOUNTS:
if fnmatch.fnmatch(acc.lower(), pattern.lower()): if fnmatch.fnmatch(acc.lower(), pattern.lower()):
for command in self.cmds: for command in self.cmds:

View File

@ -299,7 +299,7 @@ def check_priv(priv):
if not acc: if not acc:
acc = USERS[nick]["account"] acc = USERS[nick]["account"]
if acc and acc != "*": if not var.DISABLE_ACCOUNTS and acc and acc != "*":
for pattern in accounts: for pattern in accounts:
if fnmatch.fnmatch(acc.lower(), pattern.lower()): if fnmatch.fnmatch(acc.lower(), pattern.lower()):
return True return True

View File

@ -673,7 +673,7 @@ def is_user_simple(nick):
acc = var.USERS[nick]["account"] acc = var.USERS[nick]["account"]
else: else:
return False return False
if acc and acc != "*": if acc and acc != "*" and not var.DISABLE_ACCOUNTS:
if acc in var.SIMPLE_NOTIFY_ACCS: if acc in var.SIMPLE_NOTIFY_ACCS:
return True return True
return False return False
@ -694,7 +694,7 @@ def mark_prefer_notice(cli, nick, chan, rest):
if not acc or acc == "*": if not acc or acc == "*":
acc = None acc = None
if acc: # Do things by account if logged in if acc and not var.DISABLE_ACCOUNTS: # Do things by account if logged in
if acc in var.PREFER_NOTICE_ACCS: if acc in var.PREFER_NOTICE_ACCS:
var.PREFER_NOTICE_ACCS.remove(acc) var.PREFER_NOTICE_ACCS.remove(acc)
var.remove_prefer_notice_acc(acc) var.remove_prefer_notice_acc(acc)
@ -725,7 +725,7 @@ def mark_prefer_notice(cli, nick, chan, rest):
cli.notice(nick, "The bot will now always NOTICE you.") cli.notice(nick, "The bot will now always NOTICE you.")
def is_user_notice(nick): def is_user_notice(nick):
if nick in var.USERS and var.USERS[nick]["account"] and var.USERS[nick]["account"] != "*": if nick in var.USERS and var.USERS[nick]["account"] and var.USERS[nick]["account"] != "*" and not var.DISABLE_ACCOUNTS:
if var.USERS[nick]["account"] in var.PREFER_NOTICE_ACCS: if var.USERS[nick]["account"] in var.PREFER_NOTICE_ACCS:
return True return True
if nick in var.USERS and var.USERS[nick]["cloak"] in var.PREFER_NOTICE and not var.ACCOUNTS_ONLY: if nick in var.USERS and var.USERS[nick]["cloak"] in var.PREFER_NOTICE and not var.ACCOUNTS_ONLY:
@ -801,7 +801,7 @@ def is_user_altpinged(nick):
acc = var.USERS[nick]["account"] acc = var.USERS[nick]["account"]
else: else:
return (False, None) return (False, None)
if acc and acc != "*": if not var.DISABLE_ACCOUNTS and acc and acc != "*":
if acc in var.PING_IF_PREFS_ACCS.keys(): if acc in var.PING_IF_PREFS_ACCS.keys():
return (True, var.PING_IF_PREFS_ACCS[acc]) return (True, var.PING_IF_PREFS_ACCS[acc])
elif not var.ACCOUNTS_ONLY and cloak in var.PING_IF_PREFS.keys(): elif not var.ACCOUNTS_ONLY and cloak in var.PING_IF_PREFS.keys():
@ -813,7 +813,7 @@ def toggle_altpinged_status(nick, value, old=None):
cloak = var.USERS[nick]["cloak"] cloak = var.USERS[nick]["cloak"]
acc = var.USERS[nick]["account"] acc = var.USERS[nick]["account"]
if value == 0: if value == 0:
if acc and acc != "*": if not var.DISABLE_ACCOUNTS and acc and acc != "*":
if acc in var.PING_IF_PREFS_ACCS.keys(): if acc in var.PING_IF_PREFS_ACCS.keys():
del var.PING_IF_PREFS_ACCS[acc] del var.PING_IF_PREFS_ACCS[acc]
var.set_pingif_status(acc, True, 0) var.set_pingif_status(acc, True, 0)
@ -831,7 +831,7 @@ def toggle_altpinged_status(nick, value, old=None):
if cloak in var.PING_IF_NUMS[old]: if cloak in var.PING_IF_NUMS[old]:
var.PING_IF_NUMS[old].remove(cloak) var.PING_IF_NUMS[old].remove(cloak)
else: else:
if acc and acc != "*": if not var.DISABLE_ACCOUNTS and acc and acc != "*":
var.PING_IF_PREFS_ACCS[acc] = value var.PING_IF_PREFS_ACCS[acc] = value
var.set_pingif_status(acc, True, value) var.set_pingif_status(acc, True, value)
with var.WARNING_LOCK: with var.WARNING_LOCK:
@ -864,6 +864,7 @@ def join_timer_handler(cli):
chk_acc = [] chk_acc = []
# Add accounts/hosts to the list of possible players to ping # Add accounts/hosts to the list of possible players to ping
if not var.DISABLE_ACCOUNTS:
for num in var.PING_IF_NUMS_ACCS: for num in var.PING_IF_NUMS_ACCS:
if num <= len(pl): if num <= len(pl):
chk_acc.extend(var.PING_IF_NUMS_ACCS[num]) chk_acc.extend(var.PING_IF_NUMS_ACCS[num])
@ -874,6 +875,7 @@ def join_timer_handler(cli):
checker.extend(var.PING_IF_NUMS[num]) checker.extend(var.PING_IF_NUMS[num])
# Don't ping alt connections of users that have already joined # Don't ping alt connections of users that have already joined
if not var.DISABLE_ACCOUNTS:
for acc in (var.USERS[player]["account"] for player in pl if player in var.USERS): for acc in (var.USERS[player]["account"] for player in pl if player in var.USERS):
var.PINGED_ALREADY_ACCS.add(acc) var.PINGED_ALREADY_ACCS.add(acc)
@ -891,6 +893,15 @@ def join_timer_handler(cli):
var.PINGING_IFS = False var.PINGING_IFS = False
return return
@hook("whoreply", hookid=387)
def ping_altpingers_noacc(cli, svr, botnick, chan, user, host, server, nick, status, rest):
if ("G" in status or is_user_stasised(nick)[0] or not var.PINGING_IFS or
nick == botnick or nick in pl):
return
to_ping.append(nick)
var.PINGED_ALREADY.add(host)
@hook("whospcrpl", hookid=387) @hook("whospcrpl", hookid=387)
def ping_altpingers(cli, server, nick, ident, cloak, _, user, status, acc): def ping_altpingers(cli, server, nick, ident, cloak, _, user, status, acc):
if ("G" in status or is_user_stasised(user)[0] or not var.PINGING_IFS or if ("G" in status or is_user_stasised(user)[0] or not var.PINGING_IFS or
@ -926,7 +937,10 @@ def join_timer_handler(cli):
cli.msg(botconfig.CHANNEL, msg) cli.msg(botconfig.CHANNEL, msg)
if not var.DISABLE_ACCOUNTS:
cli.who(botconfig.CHANNEL, "%uhsnfa") cli.who(botconfig.CHANNEL, "%uhsnfa")
else:
cli.who(botconfig.CHANNEL)
@cmd("join", "j", phases=("none", "join")) @cmd("join", "j", phases=("none", "join"))
def join(cli, nick, chan, rest): def join(cli, nick, chan, rest):
@ -968,7 +982,7 @@ def join_player(cli, player, chan, who = None, forced = False):
acc = None acc = None
else: else:
return # Not normal return # Not normal
if not acc or acc == "*": if not acc or acc == "*" or var.DISABLE_ACCOUNTS:
acc = None acc = None
(is_stasised, stasis_amt) = is_user_stasised(player) (is_stasised, stasis_amt) = is_user_stasised(player)
@ -978,7 +992,7 @@ def join_player(cli, player, chan, who = None, forced = False):
if cloak in var.STASISED: if cloak in var.STASISED:
var.set_stasis(cloak, 0) var.set_stasis(cloak, 0)
del var.STASISED[cloak] del var.STASISED[cloak]
if acc in var.STASISED_ACCS: if not var.DISABLE_ACCOUNTS and acc in var.STASISED_ACCS:
var.set_stasis_acc(acc, 0) var.set_stasis_acc(acc, 0)
del var.STASISED_ACCS[acc] del var.STASISED_ACCS[acc]
else: else:
@ -1189,7 +1203,7 @@ def on_account(cli, rnick, acc):
with var.GRAVEYARD_LOCK: with var.GRAVEYARD_LOCK:
clk = var.DISCONNECTED[nick][1] clk = var.DISCONNECTED[nick][1]
act = var.DISCONNECTED[nick][0] act = var.DISCONNECTED[nick][0]
if acc == act or (cloak == clk and not var.ACCOUNTS_ONLY): if (acc == act and not var.DISABLE_ACCOUNTS) or (cloak == clk and not var.ACCOUNTS_ONLY):
cli.mode(chan, "+v", nick, nick+"!*@*") cli.mode(chan, "+v", nick, nick+"!*@*")
del var.DISCONNECTED[nick] del var.DISCONNECTED[nick]
var.LAST_SAID_TIME[nick] = datetime.now() var.LAST_SAID_TIME[nick] = datetime.now()
@ -2194,6 +2208,7 @@ def stop_game(cli, winner = "", abort = False):
for plr, rol in plrl.items(): for plr, rol in plrl.items():
orol = rol # original role, since we overwrite rol in case of clone orol = rol # original role, since we overwrite rol in case of clone
splr = plr # plr stripped of the (dced) bit at the front, since other dicts don't have that splr = plr # plr stripped of the (dced) bit at the front, since other dicts don't have that
# TODO: figure out how player stats should work when var.DISABLE_ACCOUNTS is True; likely track by nick
if plr.startswith("(dced)") and plr[6:] in var.DCED_PLAYERS.keys(): if plr.startswith("(dced)") and plr[6:] in var.DCED_PLAYERS.keys():
acc = var.DCED_PLAYERS[plr[6:]]["account"] acc = var.DCED_PLAYERS[plr[6:]]["account"]
splr = plr[6:] splr = plr[6:]
@ -2963,7 +2978,7 @@ def on_join(cli, raw_nick, chan, acc="*", rname=""):
if nick in var.DISCONNECTED.keys(): if nick in var.DISCONNECTED.keys():
clk = var.DISCONNECTED[nick][1] clk = var.DISCONNECTED[nick][1]
act = var.DISCONNECTED[nick][0] act = var.DISCONNECTED[nick][0]
if acc == act or (cloak == clk and not var.ACCOUNTS_ONLY): if (acc == act and not var.DISABLE_ACCOUNTS) or (cloak == clk and not var.ACCOUNTS_ONLY):
cli.mode(chan, "+v", nick, nick+"!*@*") cli.mode(chan, "+v", nick, nick+"!*@*")
del var.DISCONNECTED[nick] del var.DISCONNECTED[nick]
var.LAST_SAID_TIME[nick] = datetime.now() var.LAST_SAID_TIME[nick] = datetime.now()
@ -6857,6 +6872,7 @@ def start(cli, nick, chan, forced = False, restart = ""):
if var.STASISED[cloak] <= 0: if var.STASISED[cloak] <= 0:
del var.STASISED[cloak] del var.STASISED[cloak]
if not var.DISABLE_ACCOUNTS:
for acc in list(var.STASISED_ACCS.keys()): for acc in list(var.STASISED_ACCS.keys()):
var.STASISED_ACCS[acc] -= 1 var.STASISED_ACCS[acc] -= 1
var.set_stasis_acc(acc, var.STASISED_ACCS[acc]) var.set_stasis_acc(acc, var.STASISED_ACCS[acc])
@ -6943,7 +6959,7 @@ def fstasis(cli, nick, chan, rest):
msg = "\u0002{0}\u0002 (Host: {1}) is no longer in stasis.".format(data[0], cloak) msg = "\u0002{0}\u0002 (Host: {1}) is no longer in stasis.".format(data[0], cloak)
else: else:
msg = "\u0002{0}\u0002 (Host: {1}) is not in stasis.".format(data[0], cloak) msg = "\u0002{0}\u0002 (Host: {1}) is not in stasis.".format(data[0], cloak)
if acc: if not var.DISABLE_ACCOUNTS and acc:
if len(data) == 1: if len(data) == 1:
if acc in var.STASISED_ACCS: if acc in var.STASISED_ACCS:
plural = "" if var.STASISED_ACCS[acc] == 1 else "s" plural = "" if var.STASISED_ACCS[acc] == 1 else "s"
@ -6986,14 +7002,21 @@ def fstasis(cli, nick, chan, rest):
cloakstas = dict(var.STASISED) cloakstas = dict(var.STASISED)
accstas = dict(var.STASISED_ACCS) accstas = dict(var.STASISED_ACCS)
for stas in var.USERS: for stas in var.USERS:
if var.USERS[stas]["account"] in accstas: if not var.DISABLE_ACCOUNTS and var.USERS[stas]["account"] in accstas:
stasised[var.USERS[stas]["account"]+" (Account)"] = accstas.pop(var.USERS[stas]["account"]) stasised[var.USERS[stas]["account"]+" (Account)"] = accstas.pop(var.USERS[stas]["account"])
#if var.USERS[stas]["cloak"] in cloakstas: #if var.USERS[stas]["cloak"] in cloakstas:
# del cloakstas[var.USERS[stas]["cloak"]] # del cloakstas[var.USERS[stas]["cloak"]]
elif var.USERS[stas]["cloak"] in cloakstas: elif var.USERS[stas]["cloak"] in cloakstas:
if var.DISABLE_ACCOUNTS:
stasised[var.USERS[stas]["cloak"]] = cloakstas.pop(var.USERS[stas]["cloak"])
else:
stasised[var.USERS[stas]["cloak"]+" (Host)"] = cloakstas.pop(var.USERS[stas]["cloak"]) stasised[var.USERS[stas]["cloak"]+" (Host)"] = cloakstas.pop(var.USERS[stas]["cloak"])
for oldcloak in cloakstas: for oldcloak in cloakstas:
if var.DISABLE_ACCOUNTS:
stasised[oldcloak] = cloakstas[oldcloak]
else:
stasised[oldcloak+" (Host)"] = cloakstas[oldcloak] stasised[oldcloak+" (Host)"] = cloakstas[oldcloak]
if not var.DISABLE_ACCOUNTS:
for oldacc in accstas: for oldacc in accstas:
stasised[oldacc+" (Account)"] = accstas[oldacc] stasised[oldacc+" (Account)"] = accstas[oldacc]
msg = "Currently stasised: {0}".format(", ".join( msg = "Currently stasised: {0}".format(", ".join(
@ -7029,7 +7052,7 @@ def is_user_stasised(nick):
acc = var.USERS[nick]["account"] acc = var.USERS[nick]["account"]
else: else:
return False, None return False, None
if acc and acc != "*": if not var.DISABLE_ACCOUNTS and acc and acc != "*":
if acc in var.STASISED_ACCS: if acc in var.STASISED_ACCS:
return True, var.STASISED_ACCS[acc] return True, var.STASISED_ACCS[acc]
for clk in var.STASISED: for clk in var.STASISED:
@ -7084,7 +7107,7 @@ def allow_deny(cli, nick, chan, rest, mode):
if not acc or acc == "*": if not acc or acc == "*":
acc = None acc = None
if acc: if not var.DISABLE_ACCOUNTS and acc:
if mode == "allow": if mode == "allow":
variable = var.ALLOW_ACCOUNTS variable = var.ALLOW_ACCOUNTS
else: else:
@ -7195,6 +7218,7 @@ def allow_deny(cli, nick, chan, rest, mode):
else: else:
users_to_cmds = {} users_to_cmds = {}
if not var.DISABLE_ACCOUNTS:
if mode == "allow": if mode == "allow":
variable = var.ALLOW_ACCOUNTS variable = var.ALLOW_ACCOUNTS
else: else:
@ -7212,6 +7236,9 @@ def allow_deny(cli, nick, chan, rest, mode):
variable = var.DENY variable = var.DENY
if variable: if variable:
for cloak, varied in variable.items(): for cloak, varied in variable.items():
if var.DISABLE_ACCOUNTS:
users_to_cmds[cloak] = sorted(varied, key=str.lower)
else:
users_to_cmds[cloak+" (Host)"] = sorted(varied, key=str.lower) users_to_cmds[cloak+" (Host)"] = sorted(varied, key=str.lower)
@ -7444,7 +7471,7 @@ def wiki(cli, nick, chan, rest):
cli.notice(nick, "Could not find information on that role in https://github.com/lykoss/lykos/wiki") cli.notice(nick, "Could not find information on that role in https://github.com/lykoss/lykos/wiki")
return return
# wiki links only have lowercase aschii chars, and spaces are replaced with a dash # wiki links only have lowercase ascii chars, and spaces are replaced with a dash
wikilink = "https://github.com/lykoss/lykos/wiki#{0}".format("".join( wikilink = "https://github.com/lykoss/lykos/wiki#{0}".format("".join(
x.lower() for x in match.group(1).replace(" ", "-") if x in string.ascii_letters+"-")) x.lower() for x in match.group(1).replace(" ", "-") if x in string.ascii_letters+"-"))
if nick == chan: if nick == chan: