Merge branch 'dev' of bitbucket.org:redstonesheep/redstoner-utils into dev
This commit is contained in:
@@ -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
69
abot.py
@@ -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()
|
||||||
@@ -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:
|
||||||
|
|||||||
2
cycle.py
2
cycle.py
@@ -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"
|
||||||
|
|||||||
@@ -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 = []
|
||||||
|
|||||||
@@ -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
39
main.py
@@ -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
33
misc.py
@@ -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
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from helpers import *
|
from helpers import *
|
||||||
import simplejson as json
|
import json
|
||||||
import time
|
import time
|
||||||
import thread
|
import thread
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 *
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user