summaryrefslogtreecommitdiff
path: root/reports.py
diff options
context:
space:
mode:
authorjomo <github@jomo.tv>2014-05-16 23:04:40 +0200
committerjomo <github@jomo.tv>2014-05-16 23:04:40 +0200
commit9f1ed1fb668f0a60170eac88909bf2b3e69402f8 (patch)
tree4a82a8a58a1f623ef29af4bc0fdb2c780d4f773c /reports.py
first commit via git
Diffstat (limited to 'reports.py')
-rwxr-xr-xreports.py133
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"))