diff options
author | jomo <github@jomo.tv> | 2014-05-16 23:04:40 +0200 |
---|---|---|
committer | jomo <github@jomo.tv> | 2014-05-16 23:04:40 +0200 |
commit | 9f1ed1fb668f0a60170eac88909bf2b3e69402f8 (patch) | |
tree | 4a82a8a58a1f623ef29af4bc0fdb2c780d4f773c /reports.py |
first commit via git
Diffstat (limited to 'reports.py')
-rwxr-xr-x | reports.py | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/reports.py b/reports.py new file mode 100755 index 0000000..37c5a2a --- /dev/null +++ b/reports.py @@ -0,0 +1,133 @@ +from helpers import * +import simplejson as json +import time +import sys +import os +import thread + +# pythonloader changes this for some reason.. +#sys.path += ['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/pymodules/python2.7'] + +reports_filename = "plugins/RedstonerUtils.py.dir/files/reports.json" +time_format = "%Y.%m.%d %H:%M" +reports = [] +check_reports = True +check_delay = 60*10 # seconds +try: + reports = json.loads(open(reports_filename).read()) +except Exception, e: + error("Failed to load reports: %s" % e) + +def printHelp(sender): + msg(sender, " &2/report <text> &eReport something") + msg(sender, " &2/rp list &eList unresolved reports (id, player, text)") + msg(sender, " &2/rp tp <id> &eTeleport to report's location & show details") + msg(sender, " &2/rp del <id> &eResolve a report") + +def printList(sender): + msg(sender, "&a" + str(len(reports)) + " reports:") + for i, report in enumerate(reports): + msg(sender, "&8[&e" + str(i) + " &c" + report['time'] + "&8] &3" + report['player'] + "&f: &a" + report['msg']) + +def tp(sender, rep_id): + if rep_id >= len(reports) or rep_id < 0: + msg(sender, "&cReport &3#" + str(rep_id) + "&c does not exist!") + return True + 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 ) + + +def deleteReport(sender, rep_id): + report = reports[rep_id] + reports.pop(rep_id) + saveReports() + msg(sender, "&aReport #%s deleted." % rep_id) + reporter = server.getOfflinePlayer(report['player']) + plugHeader(reporter, "Report") + msg(reporter, "&aReport '&e%s&a' was resolved by %s." % (report['msg'], sender.getName())) + +def saveReports(): + try: + reports_file = open(reports_filename, "w") + reports_file.write(json.dumps(reports)) + reports_file.close() + except Exception, e: + error("Failed to write reports: " + str(e)) + +@hook.command("rp") +def onCommand(sender, args): + if sender.hasPermission("utils.rp"): + plugHeader(sender, "Reports") + if len(args) > 0: + if args[0] == "list": + printList(sender) + else: + if not checkargs(sender, args, 2, 2): + return True + try: + repid = int(args[1]) + except: + msg(sender, "&cDoesn't look like &3" + args[1] + "&c is a valid number!") + printHelp(sender) + return True + if args[0] == "tp": + if not isPlayer(sender): + msg(sender, "&conly players can do this") + return True + tp(sender, repid) + elif args[0] == "del": + deleteReport(sender, repid) + else: + printHelp(sender) + else: + printHelp(sender) + else: + noperm(sender) + return True + +@hook.command("report") +def onCommand(sender, args): + plugHeader(sender, "Report") + if not isPlayer(sender): + msg(sender, "&conly players can do this") + return True + if not checkargs(sender, args, 1, -1): + return True + text = " ".join(args) + loc = sender.getLocation() + reporter = sender.name + report = { + 'player': reporter, + 'msg': text, + 'x': int(loc.x), + 'y': int(loc.y), + 'z': int(loc.z), + 'yaw': int(loc.yaw), + 'pitch': int(loc.pitch), + 'world': loc.getWorld().name, + 'time': time.strftime(time_format) + } + reports.append(report) + saveReports() + broadcast("utils.rp", "&aReport #" + str(len(reports) -1) + ": " + reporter + "&f: " + text) + msg(sender, "&aReported \"&e" + text + "&a\"") + return True + +def checkForReports(foo, sender): # needs 2 args for unknown reason + while True: + for i in range(0, check_delay*2): + time.sleep(0.5) # check every 0.5 seconds if we should kill the thread + if not check_reports: + log("Reports reminder thread killed.") + thread.exit() + if len(reports) > 0: + broadcast("utils.rp", "&2--=[ Reports ]=--") + broadcast("utils.rp", "&aThere are %s pending reports!" % len(reports)) + +def stopChecking(): + log("Ending reports reminder thread") + check_reports = False + +thread.start_new_thread(checkForReports, ("foo", "bar")) |