Merge branch 'dev' of bitbucket.org:redstonesheep/redstoner-utils into dev

This commit is contained in:
Dico
2014-07-14 02:42:45 +02:00
11 changed files with 108 additions and 66 deletions

View File

@@ -14,7 +14,7 @@ Detailed description:
0. Download [the latest spigot](http://ci.md-5.net/job/Spigot/lastStableBuild/artifact/Spigot-Server/target/spigot.jar) 0. Download [the latest spigot](http://ci.md-5.net/job/Spigot/lastStableBuild/artifact/Spigot-Server/target/spigot.jar)
0. Run it once inside redstoner, then shut it down again 0. Run it once inside redstoner, then shut it down again
0. Create a new directory (inside redstoner) called 'lib' 0. Create a new directory (inside redstoner) called 'lib'
0. Download [jython](http://search.maven.org/remotecontent?filepath=org/python/jython-standalone/2.5.3/jython-standalone-2.5.3.jar) and save it as 'jython.jar' inside lib 0. Download [jython](http://search.maven.org/remotecontent?filepath=org/python/jython-standalone/2.7-b2/jython-standalone-2.7-b2.jar) and save it as 'jython.jar' inside lib
0. Download [mysql-connector](https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.30.zip), extract 'mysql-connector-java-X.X.XX-bin.jar 0. Download [mysql-connector](https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.30.zip), extract 'mysql-connector-java-X.X.XX-bin.jar
' and save it as 'mysql-connector.jar' inside lib ' and save it as 'mysql-connector.jar' inside lib
0. Download [PyPluginLoader](http://gserv.me/static/PyPluginLoader-0.3.5.jar) (we're using [this fork](https://github.com/gdude2002/Python-Plugin-Loader)) into the plugins directory 0. Download [PyPluginLoader](http://gserv.me/static/PyPluginLoader-0.3.5.jar) (we're using [this fork](https://github.com/gdude2002/Python-Plugin-Loader)) into the plugins directory

69
abot.py
View File

@@ -1,31 +1,68 @@
import json
from helpers import * from helpers import *
from re import compile as reg_compile from re import compile as reg_compile
rank_regex = "visitor|member|builder|trusted|helper|mod\\b|moderator|admin|owner|rank" answers_filename = "plugins/redstoner-utils.py.dir/files/abot.json"
answers = []
faq_regex = [
# ranks
"\\b(how.*? (get\\b|be\\b|become)|who is|are you).*? (%s)|\\bwho owns.* server" % rank_regex,
# WE
"\\b(can|how|why).*? (have|haz|use|get|doesn|can'?t).*? (WorldEdit|WE\\b|W\\.E\\.\\b)",
# clearing plot
"\\b((why|how|who).*? (do|can)|how to).*?( /?p clear| clear.*? plot)",
# add someone to a plot, claim plot
"\\bhow.*? (get|claim|own|add).*? plot"
]
faq_regex = [reg_compile(reg.lower()) for reg in faq_regex] def load_answers():
global answers
try:
answers = json.loads(open(answers_filename).read())
except Exception, e:
error("Failed to load answers: %s" % e)
# compile answers
for answer in answers:
answer["regex"] = [reg_compile(reg.lower()) for reg in answer["regex"]]
def list_answers(sender):
for answer in answers:
msg(sender, "&e{")
msg(sender, " &eregex:")
for regex in answer["regex"]:
msg(sender, " " + regex.pattern, basecolor="a", usecolor=False)
msg(sender, " &epermission:")
msg(sender, " " + str(answer["hide-perm"]), basecolor="a", usecolor=False)
msg(sender, " &emessage:")
msg(sender, " " + "\n ".join(answer["message"].split("\n")))
msg(sender, "&e}")
@hook.command("abot")
def onAbotCommand(sender, args):
plugHeader(sender, "AnswerBot")
if sender.hasPermission("utils.abot.admin"):
if not args:
msg(sender, "&2/abot list &eList all answers and their regex")
msg(sender, "&2/abot reload &eReload the config file")
elif args[0] == "list":
list_answers(sender)
elif args[0] == "reload":
load_answers()
msg(sender, "&2Reloaded!")
else:
msg(sender)
else:
noperm(sender)
return True
@hook.event("player.AsyncPlayerChatEvent", "low") @hook.event("player.AsyncPlayerChatEvent", "low")
def onChat(event): def onChat(event):
sender = event.getPlayer() sender = event.getPlayer()
if not sender.hasPermission("utils.ignore_abot"):
message = event.getMessage().lower() message = event.getMessage().lower()
for regex in faq_regex: for answer in answers:
for regex in answer["regex"]:
if regex.search(message): if regex.search(message):
if answer["hide-perm"] and not sender.hasPermission(answer["hide-perm"]):
plugHeader(sender, "AnswerBot") plugHeader(sender, "AnswerBot")
msg(sender, "&aLooks like you're asking something that's likely in our FAQ.") msg(sender, answer["message"] + "\n ")
msg(sender, "&aTake a look at &4&l/faq&a and read through the pages.\n ") # trailing space required
event.setCancelled(True) event.setCancelled(True)
log("(hidden) %s: '%s'" % (sender.getName(), message)) log("(hidden) %s: '%s'" % (sender.getName(), message))
break break
load_answers()

View File

@@ -1,7 +1,7 @@
#pylint: disable=F0401 #pylint: disable=F0401
from helpers import * from helpers import *
from java.utils.UUID import fromString as juuid from java.util.UUID import fromString as juuid
import simplejson as json import json
chatgroups_filename = "plugins/redstoner-utils.py.dir/files/chatgroups.json" chatgroups_filename = "plugins/redstoner-utils.py.dir/files/chatgroups.json"
groups = {} groups = {}
@@ -46,7 +46,7 @@ def onChatgroupCommand(sender, args):
groupchat(sender, "joined the group", True) groupchat(sender, "joined the group", True)
saveGroups() saveGroups()
msg(sender, "&aYour chatgroup is set to '%s'" % args[1]) msg(sender, "&aYour chatgroup is set to '%s'" % args[1])
msg(sender, "&aAnyone in the group sees chat that begins with &e%s" % cg_key) msg(sender, "&aUse chat like '&e%s<message>' to send messages to this group." % cg_key)
else: else:
msg(sender, "&e/chatgroup join <name>") msg(sender, "&e/chatgroup join <name>")
msg(sender, "&e/chatgroup leave") msg(sender, "&e/chatgroup leave")
@@ -66,6 +66,7 @@ def onCgtCommand(sender, args):
msg(sender, "&8[&bCG&8] &e&oCG toggle: on") msg(sender, "&8[&bCG&8] &e&oCG toggle: on")
return True return True
def groupchat(sender, message, ann=False): def groupchat(sender, message, ann=False):
#try: #try:
group = groups.get(str(sender.getUniqueId())) group = groups.get(str(sender.getUniqueId()))
@@ -77,6 +78,7 @@ def groupchat(sender, message, ann=False):
mesg = "&8[&bCG&8] &e&o%s&e&o %s" % (name, message) mesg = "&8[&bCG&8] &e&o%s&e&o %s" % (name, message)
else: else:
mesg = "&8[&bCG&8] &f%s&f: &6%s" % (name, message) mesg = "&8[&bCG&8] &f%s&f: &6%s" % (name, message)
log("[ChatGroups] %s (%s): %s" % (sender, group, message))
for receiver in server.getOnlinePlayers(): for receiver in server.getOnlinePlayers():
groups.get(str(receiver.getUniqueId())) == group and msg(receiver, mesg) groups.get(str(receiver.getUniqueId())) == group and msg(receiver, mesg)
#except Exception, e: #except Exception, e:

View File

@@ -1,4 +1,4 @@
import simplejson as json import json
from helpers import * from helpers import *
cyclers_file = "plugins/redstoner-utils.py.dir/files/cycle.json" cyclers_file = "plugins/redstoner-utils.py.dir/files/cycle.json"

View File

@@ -1,6 +1,6 @@
#pylint: disable=F0401 #pylint: disable=F0401
from helpers import * from helpers import *
import simplejson as json import json
spam_filename = "plugins/redstoner-utils.py.dir/files/damnspam.json" spam_filename = "plugins/redstoner-utils.py.dir/files/damnspam.json"
inputs = [] inputs = []

View File

@@ -6,6 +6,9 @@ import org.bukkit.entity.Player as Player
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause as TeleportCause import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause as TeleportCause
import org.bukkit.block as bblock import org.bukkit.block as bblock
shared = {}
server = bukkit.Bukkit.getServer() server = bukkit.Bukkit.getServer()
def log(text): def log(text):

39
main.py
View File

@@ -3,7 +3,6 @@ __plugin_version__ = "3.0"
__plugin_mainclass__ = "foobar" __plugin_mainclass__ = "foobar"
import sys import sys
import thread
from traceback import format_exc as print_traceback from traceback import format_exc as print_traceback
# damn pythonloader changed the PATH # damn pythonloader changed the PATH
@@ -24,14 +23,14 @@ def onEnable():
@hook.disable @hook.disable
def onDisable(): def onDisable():
mod["reports"].stopChecking() shared["modules"]["reports"].stopChecking()
log("RedstonerUtils disabled!") log("RedstonerUtils disabled!")
log("Loading RedstonerUtils...") log("Loading RedstonerUtils...")
# Import all modules, in this order # Import all modules, in this order
modules = [ load_modules = [
"misc", "misc",
"adminchat", "adminchat",
"lagchunks", "lagchunks",
@@ -46,39 +45,11 @@ modules = [
"abot", "abot",
"forcefield" "forcefield"
] ]
mod = {} shared["modules"] = {}
for module in modules: for module in load_modules:
try: try:
mod[module] = __import__(module) shared["modules"][module] = __import__(module)
log("Module %s loaded." % module) log("Module %s loaded." % module)
except: except:
error("Failed to import module %s:" % module) error("Failed to import module %s:" % module)
error(print_traceback()) error(print_traceback())
#
# /pyeval - run python ingame
#
# has to be in main.py so we can access the modules
def evalThread(sender, code):
try:
msg(sender, "%s" % unicode(eval(code)), False, "a")
except Exception, e:
msg(sender, "%s: %s" % (e.__class__.__name__, e), False, "c")
thread.exit()
@hook.command("pyeval")
def onPyevalCommand(sender, args):
if sender.hasPermission("utils.pyeval"):
if not checkargs(sender, args, 1, -1):
return True
msg(sender, "%s" % " ".join(args), False, "e")
try:
thread.start_new_thread(evalThread, (sender, " ".join(args)))
except Exception, e:
msg(sender, "&cInternal error: %s" % e)
else:
noperm(sender)
return True

33
misc.py
View File

@@ -1,6 +1,7 @@
#pylint: disable=F0401 #pylint: disable=F0401
from helpers import * from helpers import *
from time import time as now from time import time as now
import thread
import org.bukkit.inventory.ItemStack as ItemStack import org.bukkit.inventory.ItemStack as ItemStack
# #
@@ -99,12 +100,13 @@ def onPlayerInteractEntity(event):
def onPluginversionsCommand(sender, args): def onPluginversionsCommand(sender, args):
plugHeader(sender, "Plugin versions") plugHeader(sender, "Plugin versions")
plugins = list(server.getPluginManager().getPlugins()) plugins = list(server.getPluginManager().getPlugins())
plugins.sort(key=lambda pl: pl.getName()) plugins.sort(key=lambda pl: pl.getDescription().getName())
msg(sender, "&3Listing all " + str(len(plugins)) + " plugins and their version:") msg(sender, "&3Listing all " + str(len(plugins)) + " plugins and their version:")
for plugin in plugins: for plugin in plugins:
msg(sender, "&6" + plugin.getName() + "&r: &e" + plugin.getDescription().getVersion()) msg(sender, "&6" + plugin.getDescription().getName() + "&r: &e" + plugin.getDescription().getVersion())
return True return True
# #
# /echo - essentials echo sucks and prints mail alerts sometimes # /echo - essentials echo sucks and prints mail alerts sometimes
# #
@@ -112,3 +114,30 @@ def onPluginversionsCommand(sender, args):
@hook.command("echo") @hook.command("echo")
def onEchoCommand(sender, args): def onEchoCommand(sender, args):
msg(sender, " ".join(args).replace("\\n", "\n")) msg(sender, " ".join(args).replace("\\n", "\n"))
#
# /pyeval - run python ingame
#
# has to be in main.py so we can access the modules
def evalThread(sender, code):
try:
msg(sender, "%s" % unicode(eval(code)), False, "a")
except Exception, e:
msg(sender, "%s: %s" % (e.__class__.__name__, e), False, "c")
thread.exit()
@hook.command("pyeval")
def onPyevalCommand(sender, args):
if sender.hasPermission("utils.pyeval"):
if not checkargs(sender, args, 1, -1):
return True
msg(sender, "%s" % " ".join(args), False, "e")
try:
thread.start_new_thread(evalThread, (sender, " ".join(args)))
except Exception, e:
msg(sender, "&cInternal error: %s" % e)
else:
noperm(sender)
return True

View File

@@ -1,5 +1,5 @@
from helpers import * from helpers import *
import simplejson as json import json
import time import time
import thread import thread

View File

@@ -1,4 +1,4 @@
import simplejson as json import json
from time import time from time import time
from helpers import * from helpers import *
from random import randrange from random import randrange

View File

@@ -3,7 +3,7 @@ import org.bukkit.event.block.BlockPlaceEvent as BlockPlaceEvent
import org.bukkit.event.block.BlockBreakEvent as BlockBreakEvent import org.bukkit.event.block.BlockBreakEvent as BlockBreakEvent
import org.bukkit.event.player.PlayerInteractEvent as PlayerInteractEvent import org.bukkit.event.player.PlayerInteractEvent as PlayerInteractEvent
import thread import thread
import simplejson as json import json
from time import sleep from time import sleep
from helpers import * from helpers import *