diff --git a/abot.py b/abot.py index fa8517e..aa9c27b 100644 --- a/abot.py +++ b/abot.py @@ -27,7 +27,7 @@ def list_answers(sender): @hook.command("abot") -def on_abot_command(sender, args): +def on_abot_command(sender, command, label, args): plugin_header(sender, "AnswerBot") if sender.hasPermission("utils.abot.admin"): if not args: diff --git a/adminnotes.py b/adminnotes.py index 0a5bf03..b49ac0f 100644 --- a/adminnotes.py +++ b/adminnotes.py @@ -68,7 +68,7 @@ def show_an_help(sender): @hook.command("an", aliases=["adminnotes", "adminnote"]) -def adminnotes_command(sender, args): +def adminnotes_command(sender, command, label, args): if not sender.hasPermission(an_permission): noperm(sender) return diff --git a/badges.py b/badges.py index 1582dfd..ae98dcb 100644 --- a/badges.py +++ b/badges.py @@ -86,7 +86,7 @@ def del_badge(sender, target, badge): @hook.command("badge", aliases=["badges", "rewards"]) -def on_badge_command(sender, args): +def on_badge_command(sender, command, label, args): argnum = int(len(args)) # No arguments diff --git a/calc.py b/calc.py index 2c1ed15..058d68c 100644 --- a/calc.py +++ b/calc.py @@ -45,7 +45,7 @@ def on_calc_chat(event): @hook.command("calc", description="Toggles chat calculations") -def on_calc_command(sender, args): +def on_calc_command(sender, command, label, args): plugin_header(sender, "Chat Calculator") if not sender.hasPermission(calc_perm): noperm(sender) diff --git a/chatgroups.py b/chatgroups.py index d4e9777..d8b7d0e 100644 --- a/chatgroups.py +++ b/chatgroups.py @@ -9,7 +9,7 @@ cg_toggle_list = [] @hook.command("chatgroup") -def on_chatgroup_command(sender, args): +def on_chatgroup_command(sender, command, label, args): plugin_header(sender, "ChatGroups") sender_id = uid(sender) if len(args) == 1 and args[0] == "leave": @@ -47,7 +47,7 @@ def on_chatgroup_command(sender, args): @hook.command("cgt") -def on_cgt_command(sender, args): +def on_cgt_command(sender, command, label, args): p = uid(sender) if p in cg_toggle_list: cg_toggle_list.remove(p) diff --git a/check.py b/check.py index 42a38dc..8bbfdeb 100644 --- a/check.py +++ b/check.py @@ -79,7 +79,7 @@ def get_all_data(sender, player): @hook.command("check", description="Displays useful stuff about a user", usage="/check ") -def on_hook_command(sender, args): +def on_hook_command(sender, command, label, args): if sender.hasPermission("utils.check"): if not checkargs(sender, args, 1, 1): return True diff --git a/cycle.py b/cycle.py index 4569f4c..2caeac2 100644 --- a/cycle.py +++ b/cycle.py @@ -4,7 +4,7 @@ no_cyclers = open_json_file("cycle", []) @hook.command("cycle") -def on_cycler_command(sender, args): +def on_cycler_command(sender, command, label, args): plugin_header(sender, "Cycle") if not is_player(sender): msg(sender, "&conly players can do this") diff --git a/damnspam.py b/damnspam.py index 242676e..503639a 100644 --- a/damnspam.py +++ b/damnspam.py @@ -27,7 +27,7 @@ def add_input(creator, block, timeout_off, timeout_on): @hook.command("damnspam") -def on_dammnspam_command(sender, args): +def on_dammnspam_command(sender, command, label, args): global changing_input plugin_header(sender, "DamnSpam") diff --git a/forcefield.py b/forcefield.py index f76f873..74c728f 100644 --- a/forcefield.py +++ b/forcefield.py @@ -17,7 +17,7 @@ whitelists = {} # {ff_owner_id: [white, listed, ids]} (Adding file usage later, @hook.command("forcefield") -def on_forcefield_command(sender, args): +def on_forcefield_command(sender, command, label, args): if not is_player(sender) or not sender.hasPermission(ff_perm): noperm(sender) return True diff --git a/friends.py b/friends.py index 689c526..870560e 100644 --- a/friends.py +++ b/friends.py @@ -125,7 +125,7 @@ def fhelp(sender): @hook.command("friends") -def on_friend_command(sender, args): +def on_friend_command(sender, command, label, args): if not is_player(sender): friendmessage(sender, "&c&lYou can't have friends!") return True diff --git a/imout.py b/imout.py index 4906036..e7ab99d 100644 --- a/imout.py +++ b/imout.py @@ -5,7 +5,7 @@ from adminchat import * imout_toggle_list = [] @hook.command("imout") -def on_imout_command(sender, args): +def on_imout_command(sender, command, label, args): if sender.hasPermission("utils.imout"): name = sender.getName() symbol = "&a&l+" diff --git a/lagchunks.py b/lagchunks.py index 3b41add..162d224 100644 --- a/lagchunks.py +++ b/lagchunks.py @@ -37,7 +37,7 @@ def tp_chunk(sender, id): @hook.command("lagchunks") -def on_lagchunks_command(sender, args): +def on_lagchunks_command(sender, command, label, args): if sender.hasPermission("utils.lagchunks"): plugin_header(sender, "Lagchunks") global lagchunks diff --git a/mentio.py b/mentio.py index 4f508ed..dbcd4ce 100644 --- a/mentio.py +++ b/mentio.py @@ -119,7 +119,7 @@ def show_help(player): @hook.command("mentio") -def onListenCommand(sender, args): +def onListenCommand(sender, command, label, args): plugin_header(sender, "Mentio") argnum = len(args) diff --git a/misc.py b/misc.py index 930d551..a80dfb7 100644 --- a/misc.py +++ b/misc.py @@ -39,7 +39,7 @@ def on_join(event): @hook.command("sudo") -def on_sudo_command(sender, args): +def on_sudo_command(sender, command, label, args): """ /sudo execute command/chat *as* a player/console @@ -68,7 +68,7 @@ def on_sudo_command(sender, args): #Temporary solution for /me @hook.command("me") -def on_me_command(sender, args): +def on_me_command(sender, command, label, args): if not sender.hasPermission("essentials.me"): noperm(sender) return True @@ -133,7 +133,7 @@ def on_player_entity_interact(event): @hook.command("pluginversions") -def on_pluginversions_command(sender, args): +def on_pluginversions_command(sender, command, label, args): """ /pluginversions print all plugins + versions; useful when updating plugins @@ -148,7 +148,7 @@ def on_pluginversions_command(sender, args): @hook.command("echo") -def on_echo_command(sender, args): +def on_echo_command(sender, command, label, args): """ /echo essentials echo sucks and prints mail alerts sometimes @@ -175,7 +175,7 @@ def eval_thread(sender, code): @hook.command("pyeval") -def on_pyeval_command(sender, args): +def on_pyeval_command(sender, command, label, args): """ /pyeval run python code ingame @@ -191,7 +191,7 @@ def on_pyeval_command(sender, args): @hook.command("modules") -def on_modules_command(sender, args): +def on_modules_command(sender, command, label, args): """ /modules list all modules, unloaded modules in red diff --git a/motd.py b/motd.py index d91a910..9c8b349 100644 --- a/motd.py +++ b/motd.py @@ -5,13 +5,13 @@ default_motd = colorify(server.getMotd()) motd = default_motd @hook.command("getmotd") -def on_getmotd_command(sender, args): +def on_getmotd_command(sender, command, label, args): plugin_header(sender, "MOTD") msg(sender, motd, usecolor = False) @hook.command("setmotd") -def on_setmotd_command(sender, args): +def on_setmotd_command(sender, command, label, args): global motd if sender.hasPermission("utils.setmotd"): if not checkargs(sender, args, 1, -1): diff --git a/pmtoggle.py b/pmtoggle.py index 81634a3..e1bac06 100644 --- a/pmtoggle.py +++ b/pmtoggle.py @@ -6,7 +6,7 @@ toggle_dict = {} permission = "utils.pmtoggle" @hook.command("tm") -def on_toggle_message_command(sender, args): +def on_toggle_message_command(sender, command, label, args): if not sender.hasPermission(permission) or not is_player(sender): noperm(sender) return True diff --git a/reports.py b/reports.py index ebab997..11f8b02 100644 --- a/reports.py +++ b/reports.py @@ -2,6 +2,7 @@ from helpers import * from java.util.UUID import fromString as juuid import time import thread +from traceback import format_exc as trace time_format = "%Y.%m.%d %H:%M" @@ -13,19 +14,26 @@ rp_permission = "utils.rp" def print_help(sender): msg(sender, " &2/report &eReport something") - msg(sender, " &2/rp list &eList unresolved reports (id, player, text)") + msg(sender, " &2/rp open|closed &eList open/closed reports (id, player, text)") msg(sender, " &2/rp tp &eTeleport to report's location & show details") - msg(sender, " &2/rp del &eResolve a report") + msg(sender, " &2/rp close &eResolve a report") + msg(sender, " &2/rp del &eDelete a report (admin only)") -def print_list(sender): +def print_list(sender, closed): try: # new thread, anything can happen. - msg(sender, "&a" + str(len(reports)) + " reports:") - for i, report in enumerate(reports): + targeted_reports = enumerate(reports) + for i, report in targeted_reports: + if report["closed"] != closed: + targeted_reports.pop(report) + + msg(sender, "&a%s %s reports:" % (len(targeted_reports), "closed" if closed else "open")) + for i, report in targeted_reports: name = retrieve_player(report["uuid"]).getName() msg(sender, "&8[&e%s &c%s&8] &3%s&f: &a%s" % (i, report["time"], name, report["msg"])) except: warn("Failed to complete report's print_list() thread") + error(trace()) def tp_report(sender, rep_id): @@ -35,18 +43,34 @@ def tp_report(sender, rep_id): else: report = reports[rep_id] safetp(sender, server.getWorld(report["world"]), report["x"], report["y"], report["z"], report["yaw"], report["pitch"]) - msg(sender, "&aTeleported to report #%s" % rep_id ) + msg(sender, "&aTeleported to %s&areport #%s" % ("&cclosed " if report["closed"] else "", rep_id)) + + +def solve_report(sender, rep_id): + if len(reports) > rep_id >= 0: + report = reports[rep_id] + report["closed"] = True + save_reports() + msg(sender, "&aReport #%s solved." % rep_id) + reporter = server.getOfflinePlayer(juuid(report["uuid"])) + plugin_header(reporter, "Report") + msg(reporter, "&aReport '&e%s&a' was resolved by %s." % (report["msg"], sender.getName())) + else: + msg(sender, "&cThat report does not exist!") def delete_report(sender, rep_id): + if not sender.hasPermission(rp_permission + ".del"): + noperm(sender) + return if len(reports) > rep_id >= 0: report = reports[rep_id] - reports.pop(rep_id) + del reports[report] save_reports() msg(sender, "&aReport #%s deleted." % rep_id) reporter = server.getOfflinePlayer(juuid(report["uuid"])) plugin_header(reporter, "Report") - msg(reporter, "&aReport '&e%s&a' was resolved by %s." % (report["msg"], sender.getName())) + msg(reporter, "&aReport '&e%s&a' was &cdeleted &aby %s." % (report["msg"], sender.getName())) else: msg(sender, "&cThat report does not exist!") @@ -56,13 +80,15 @@ def save_reports(): @hook.command("rp") -def on_rp_command(sender, args): +def on_rp_command(sender, command, label, args): if sender.hasPermission(rp_permission): plugin_header(sender, "Reports") if len(args) > 0: - if args[0] == "list": + if args[0] == "closed": # needs to run in seperate thread because of getOfflinePlayer - thread.start_new_thread(print_list, (sender,)) + thread.start_new_thread(print_list, (sender, True,)) + elif args[0] == "open": + thread.start_new_thread(print_list, (sender, False,)) else: if not checkargs(sender, args, 2, 2): return True @@ -77,6 +103,8 @@ def on_rp_command(sender, args): msg(sender, "&conly players can do this") return True tp_report(sender, repid) + elif args[0] == "close": + solve_report(sender, repid) elif args[0] == "del": delete_report(sender, repid) else: @@ -89,7 +117,7 @@ def on_rp_command(sender, args): @hook.command("report") -def on_report_command(sender, args): +def on_report_command(sender, command, label, args): plugin_header(sender, "Report") if not is_player(sender): msg(sender, "&conly players can do this") @@ -109,7 +137,8 @@ def on_report_command(sender, args): "yaw": int(loc.yaw), "pitch": int(loc.pitch), "world": loc.getWorld().name, - "time": time.strftime(time_format) + "time": time.strftime(time_format), + "closed": False } reports.append(report) save_reports() @@ -125,9 +154,9 @@ def reports_reminder(): # needs 2 args for unknown reason if not check_reports: info("Reports reminder thread killed.") thread.exit() - if len(reports) > 0: - broadcast(rp_permission, "&2--=[ Reports ]=--") - broadcast(rp_permission, "&aThere are %s pending reports!" % len(reports)) + targeted_reports = get_reports(False) + if len(targeted_reports) > 0: + broadcast(rp_permission, "&2--=[ Reports ]=--\n&aThere are %s open reports!" % len(targeted_reports)) def stop_reporting(): @@ -135,5 +164,12 @@ def stop_reporting(): info("Ending reports reminder thread") check_reports = False +def get_reports(closed): + targeted_reports = [] + for report in reports: + if report["closed"] == closed: + targeted_reports.add(report) + return targeted_reports + thread.start_new_thread(reports_reminder, ()) \ No newline at end of file diff --git a/saylol.py b/saylol.py index 3251105..f1854df 100644 --- a/saylol.py +++ b/saylol.py @@ -48,7 +48,7 @@ def search_lols(sender, keyword): @hook.command("lol") -def on_lol_command(sender, args): +def on_lol_command(sender, command, label, args): plugin_header(sender, "SayLol") cmd = args[0] if len(args) > 0 else None diff --git a/spawnplayer.py b/spawnplayer.py index cb7e9ee..39113f8 100644 --- a/spawnplayer.py +++ b/spawnplayer.py @@ -38,7 +38,7 @@ def spawn(dispname, sender, x, y, z): @hook.command("spawnplayer") -def on_spawnplayer_command(sender, args): +def on_spawnplayer_command(sender, command, label, args): global amount, row, ground, goup # X and Z position diff --git a/webtoken.py b/webtoken.py index 2ff97e8..c0066a6 100644 --- a/webtoken.py +++ b/webtoken.py @@ -99,13 +99,13 @@ def tokengen_command(sender, args): @hook.command("token") -def on_token_command(sender, args): +def on_token_command(sender, command, label, args): thread.start_new_thread(token_command, (sender,)) return True @hook.command("gettoken") -def on_gettoken_command(sender, args): +def on_gettoken_command(sender, command, label, args): thread.start_new_thread(tokengen_command, (sender, args)) return True