From 76ad219e873d6bd300523826fd70798816b44b42 Mon Sep 17 00:00:00 2001 From: jcao219 Date: Sun, 17 Jul 2011 18:35:59 -0500 Subject: [PATCH] fixed bugs introduced by the last commit --- decorators.py | 10 +++++++++- wolfbot.py | 9 ++++++--- wolfgame.py | 38 ++++++++++++++++++++++++++------------ 3 files changed, 41 insertions(+), 16 deletions(-) diff --git a/decorators.py b/decorators.py index 8d7592f..87b5cc2 100644 --- a/decorators.py +++ b/decorators.py @@ -28,7 +28,15 @@ def generate(fdict, **kwargs): return return f(*largs) for x in s: - fdict[x] = innerf + if x not in fdict.keys(): + fdict[x] = [] + else: + for fn in fdict[x]: + if (fn.owner_only != owner_only or + fn.admin_only != admin_only): + raise Exception("Command: "+x+" has non-matching protection levels!") + + fdict[x].append(innerf) innerf.owner_only = owner_only innerf.raw_nick = raw_nick innerf.admin_only = admin_only diff --git a/wolfbot.py b/wolfbot.py index 615f15f..a3cbd17 100644 --- a/wolfbot.py +++ b/wolfbot.py @@ -10,7 +10,8 @@ def on_privmsg(cli, rawnick, chan, msg): if not x or msg.lower().startswith(botconfig.CMD_CHAR+x): h = msg[len(x)+1:] if not h or h[0] == " " or not x: - wolfgame.COMMANDS[x](cli, rawnick, chan, h.lstrip()) + for fn in wolfgame.COMMANDS[x]: + fn(cli, rawnick, chan, h.lstrip()) else: for x in wolfgame.PM_COMMANDS.keys(): if msg.lower().startswith(botconfig.CMD_CHAR+x): @@ -20,14 +21,16 @@ def on_privmsg(cli, rawnick, chan, msg): else: continue if not h or h[0] == " " or not x: - wolfgame.PM_COMMANDS[x](cli, rawnick, h.lstrip()) + for fn in wolfgame.PM_COMMANDS[x]: + fn(cli, rawnick, h.lstrip()) def __unhandled__(cli, prefix, cmd, *args): if cmd in wolfgame.HOOKS.keys(): largs = list(args) for i,arg in enumerate(largs): if isinstance(arg, bytes): largs[i] = arg.decode('ascii') - wolfgame.HOOKS[cmd](cli, prefix, *largs) + for fn in wolfgame.HOOKS[cmd]: + fn(cli, prefix, *largs) else: logging.debug('Unhandled command {0}({1})'.format(cmd, [arg.decode('utf_8') for arg in args diff --git a/wolfgame.py b/wolfgame.py index c60f272..3b8c8ed 100644 --- a/wolfgame.py +++ b/wolfgame.py @@ -307,11 +307,15 @@ def fleave(cli, nick, chan, rest): elif a.lower() not in pll: cli.msg(chan, nick+": That could not be done.") + + @cmd("fstart", admin_only=True) def fstart(cli, nick, chan, rest): var.CAN_START_TIME = datetime.now() start(cli, nick, chan, rest) + + @cmd("chankick", admin_only=True) def chankick(cli, nick, chan, rest): rest = rest.split(" ", 1) @@ -320,12 +324,16 @@ def chankick(cli, nick, chan, rest): else: cli.kick(chan, nick, "No.") + + @hook("kick") def on_kicked(cli, nick, chan, victim, reason): if victim == botconfig.NICK: cli.join(botconfig.CHANNEL) - cli.kick(chan, nick, "No.") - + cli.msg("ChanServ", "op "+botconfig.CHANNEL) + # cli.kick(chan, nick, "No.") + + @cmd("stats") def stats(cli, nick, chan, rest): @@ -669,6 +677,8 @@ def on_join(cli, raw_nick, chan): nick = parse_nick(raw_nick)[0] if nick not in var.USERS and nick != botconfig.NICK: var.USERS.append(nick) + #if nick in var.list_players(): + # cli.mode(chan, "+v", nick, nick+"!*@*") needed? @cmd("goat") def goat(cli, nick, chan, rest): @@ -749,7 +759,7 @@ def on_nick(cli, prefix, nick): def leave(cli, what, nick, why=""): - if why == botconfig.CHANGING_HOST_QUIT_MESSAGE: + if why and why == botconfig.CHANGING_HOST_QUIT_MESSAGE: return if var.PHASE == "none" and what.startswith(botconfig.CMD_CHAR): cli.notice(nick, "No game is currently running.") @@ -1315,17 +1325,19 @@ def forcepm(cli, nick, chan, rest): cli.msg(chan, "That won't work.") return if not is_fake_nick(who): - if who not in var.USERS: - cli.msg(chan, "This can only be done on fake nicks.") - return + if who not in var.USERS: + cli.msg(chan, "This can only be done on fake nicks.") + return cmd = rst.pop(0).lower().replace(botconfig.CMD_CHAR, "", 1) - if cmd in PM_COMMANDS.keys() and not PM_COMMANDS[cmd].owner_only: - PM_COMMANDS[cmd](cli, who, " ".join(rst)) + if cmd in PM_COMMANDS.keys() and not PM_COMMANDS[cmd][0].owner_only: + for fn in PM_COMMANDS[cmd]: + fn(cli, who, " ".join(rst)) cli.msg(chan, "Operation successful.") #if var.PHASE == "night": <- Causes problems with night starting twice. # chk_nightdone(cli) - elif cmd.lower() in COMMANDS.keys() and not COMMANDS[cmd].owner_only: - COMMANDS[cmd](cli, who, chan, " ".join(rst)) + elif cmd.lower() in COMMANDS.keys() and not COMMANDS[cmd][0].owner_only: + for fn in COMMANDS[cmd]: + fn(cli, who, chan, " ".join(rst)) cli.msg(chan, "Operation successful.") else: cli.msg(chan, "That command was not found.") @@ -1496,6 +1508,8 @@ def transition_night(cli): "check for PMs from me for instructions. "+ "If you did not receive one, simply sit back, "+ "relax, and wait patiently for morning.")) + + cli.msg(chan, "DEBUG: "+str(var.ROLES)) if not var.ROLES["wolf"]: # Probably something interesting going on. chk_nightdone(cli) chk_traitor(cli) @@ -1762,12 +1776,12 @@ def help(cli, rnick, chan, rest): nick, mode, user, cloak = parse_nick(rnick) fns = [] for name, fn in COMMANDS.items(): - if name and not fn.admin_only and not fn.owner_only: + if name and not fn[0].admin_only and not fn[0].owner_only: fns.append("\u0002"+name+"\u0002") afns = [] if cloak in botconfig.ADMINS: for name, fn in COMMANDS.items(): - if fn.admin_only: + if fn[0].admin_only: afns.append("\u0002"+name+"\u0002") cli.notice(nick, "Commands: "+", ".join(fns)) if afns: