diff --git a/modules/common.py b/modules/common.py index 9fc23b3..14381d3 100644 --- a/modules/common.py +++ b/modules/common.py @@ -7,6 +7,7 @@ import tools.moduleloader as ld import traceback from settings import common as var from base64 import b64encode +import imp def on_privmsg(cli, rawnick, chan, msg, notice = False): currmod = ld.MODULES[ld.CURRENT_MODULE] @@ -102,7 +103,10 @@ def connect_callback(cli): cli.cap("REQ", "extended-join") cli.cap("REQ", "account-notify") - ld.MODULES[ld.CURRENT_MODULE].connect_callback(cli) + try: + ld.MODULES[ld.CURRENT_MODULE].connect_callback(cli) + except AttributeError: + pass # no connect_callback for this one cli.nick(botconfig.NICK) # very important (for regain/release) @@ -158,7 +162,43 @@ def connect_callback(cli): @hook("ping") def on_ping(cli, prefix, server): cli.send('PONG', server) + +@cmd("frehash", admin_only = True) +def reload_modules(cli, nick, chan, rest): + error = False + + try: + imp.reload(var) + imp.reload(botconfig) + imp.reload(decorators.botconfig) + except SyntaxError as e: + logging.error(traceback.format_exc()) + cli.msg(chan, "Syntax error.") + error = True + for nam, mod in ld.MODULES.items(): + if nam == ld.CURRENT_MODULE: + try: + mod.quit_callback(cli) + except AttributeError: + pass # no quit_callback + print("Reloading module {0}....".format(nam)) + try: + imp.reload(mod) + imp.reload(mod.var) + imp.reload(mod.botconfig) + imp.reload(mod.decorators.botconfig) + except AttributeError: + pass + except SyntaxError as e: + logging.error(traceback.format_exc()) + cli.msg(chan, "Syntax error in module {0}".format(nam)) + error = True + + if not error: + cli.msg(chan, "Operation successful.") + + if botconfig.DEBUG_MODE: @cmd("module", admin_only = True) diff --git a/modules/wolfgame.py b/modules/wolfgame.py index 5b3f988..386aa37 100644 --- a/modules/wolfgame.py +++ b/modules/wolfgame.py @@ -116,7 +116,13 @@ def connect_callback(cli): cli.mode(botconfig.CHANNEL, "q") # unquiet all cli.who(botconfig.CHANNEL, "%nuhaf") - + +def quit_callback(cli): + # clean up + if var.PHASE in ("day", "night"): + stop_game(cli) + else: + reset(cli) @@ -217,24 +223,24 @@ def restart_program(cli, nick, *rest): -@cmd("frehash", admin_only=True) -def frehash(cli, nick, chan, rest): - if var.PHASE in ("day", "night"): - stop_game(cli) - else: - reset(cli) - imp.reload(botconfig) - imp.reload(var) - imp.reload(decorators.botconfig) - - if botconfig.DEBUG_MODE: - var.NIGHT_TIME_LIMIT = 0 # 90 - var.DAY_TIME_LIMIT_WARN = 0 - var.DAY_TIME_LIMIT_CHANGE = 0 - var.KILL_IDLE_TIME = 0 #300 - var.WARN_IDLE_TIME = 0 #180 - - cli.msg(chan, "Operation successful.") +# @cmd("frehash", admin_only=True) +# def frehash(cli, nick, chan, rest): + # if var.PHASE in ("day", "night"): + # stop_game(cli) + # else: + # reset(cli) + # imp.reload(botconfig) + # imp.reload(var) + # imp.reload(decorators.botconfig) + + # if botconfig.DEBUG_MODE: + # var.NIGHT_TIME_LIMIT = 0 # 90 + # var.DAY_TIME_LIMIT_WARN = 0 + # var.DAY_TIME_LIMIT_CHANGE = 0 + # var.KILL_IDLE_TIME = 0 #300 + # var.WARN_IDLE_TIME = 0 #180 + + # cli.msg(chan, "Operation successful.") @@ -785,9 +791,7 @@ def stop_game(cli, winner = ""): cli.msg(chan, "PING! " + var.ADMIN_TO_PING) var.ADMIN_TO_PING = None - return True - - + return True def chk_win(cli): """ Returns True if someone won """