Revert "Merge branch 'wrapper' of https://github.com/RedstonerServer/redstoner-utils into wrapper"
This reverts commit4d5861fd36, reversing changes made to9d0e4c99ba.
This commit is contained in:
57
helpers.py
57
helpers.py
@@ -1,30 +1,26 @@
|
|||||||
#pylint: disable = F0401
|
#pylint: disable = F0401
|
||||||
|
|
||||||
import org.bukkit as bukkit
|
|
||||||
import org.bukkit.block as bblock
|
|
||||||
import org.bukkit.Location as Location
|
|
||||||
import org.bukkit.event.entity as entity
|
|
||||||
import org.bukkit.entity.Player as Player
|
|
||||||
import org.bukkit.command.ConsoleCommandSender
|
|
||||||
import org.bukkit.event.block.BlockBreakEvent as BlockBreakEvent
|
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause as TeleportCause
|
|
||||||
|
|
||||||
from re import sub
|
from re import sub
|
||||||
from thread_utils import *
|
|
||||||
from player import py_players
|
|
||||||
from org.bukkit.entity import *
|
|
||||||
from player import get_py_player
|
|
||||||
from traceback import format_exc as trace
|
|
||||||
from java.util.UUID import fromString as juuid
|
from java.util.UUID import fromString as juuid
|
||||||
from json import dumps as json_dumps, loads as json_loads
|
from json import dumps as json_dumps, loads as json_loads
|
||||||
|
import org.bukkit as bukkit
|
||||||
|
import org.bukkit.Location as Location
|
||||||
|
import org.bukkit.entity.Player as Player
|
||||||
|
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause as TeleportCause
|
||||||
|
import org.bukkit.event.block.BlockBreakEvent as BlockBreakEvent
|
||||||
|
import org.bukkit.block as bblock
|
||||||
|
import org.bukkit.event.entity as entity
|
||||||
|
import org.bukkit.command.ConsoleCommandSender
|
||||||
|
from org.bukkit.entity import *
|
||||||
|
from player import get_py_player
|
||||||
|
from player import py_players
|
||||||
|
|
||||||
#Imports for async query
|
#Imports for async query
|
||||||
import threading
|
|
||||||
import mysqlhack
|
|
||||||
|
|
||||||
from secrets import *
|
from secrets import *
|
||||||
|
import mysqlhack
|
||||||
from com.ziclix.python.sql import zxJDBC
|
from com.ziclix.python.sql import zxJDBC
|
||||||
|
import threading
|
||||||
|
|
||||||
|
from traceback import format_exc as trace
|
||||||
|
|
||||||
|
|
||||||
shared = {} # this dict can be used to share stuff across modules
|
shared = {} # this dict can be used to share stuff across modules
|
||||||
@@ -218,6 +214,31 @@ def known_player(player):
|
|||||||
"""
|
"""
|
||||||
return player.hasPlayedBefore()
|
return player.hasPlayedBefore()
|
||||||
|
|
||||||
|
"""
|
||||||
|
Runs a async query, calls target function with fetchall as an argument, it will be an empty list if there is nothing to fetch.
|
||||||
|
(So make sure your function takes that argument.)
|
||||||
|
|
||||||
|
If you want your function to run sync in the case you are doing something spigot wouldn't like to be async use the bukkit scheduler.
|
||||||
|
Example can be found in loginsecurity.py
|
||||||
|
|
||||||
|
"""
|
||||||
|
def async_query(mysql_database,query,query_args,target,*target_args,**target_kwargs):
|
||||||
|
|
||||||
|
def async_query_t(mysql_database,query,query_args,target,target_args,target_kwargs):
|
||||||
|
db_conn = zxJDBC.connect(mysql_database, mysql_user, mysql_pass, "com.mysql.jdbc.Driver")
|
||||||
|
db_curs = db_conn.cursor()
|
||||||
|
db_curs.execute(query,query_args)
|
||||||
|
db_conn.commit()
|
||||||
|
fetchall = db_curs.fetchall()
|
||||||
|
db_curs.close()
|
||||||
|
db_conn.close()
|
||||||
|
target(fetchall,target_args,target_kwargs)
|
||||||
|
|
||||||
|
t = threading.Thread(target=async_query_t,args=(mysql_database,query,query_args,target,target_args,target_kwargs))
|
||||||
|
t.daemon = True
|
||||||
|
t.start()
|
||||||
|
|
||||||
|
|
||||||
def open_json_file(filename, default = None):
|
def open_json_file(filename, default = None):
|
||||||
"""
|
"""
|
||||||
opens the given json file and returns an object or returns None on error
|
opens the given json file and returns an object or returns None on error
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import mysqlhack
|
|||||||
from com.ziclix.python.sql import zxJDBC
|
from com.ziclix.python.sql import zxJDBC
|
||||||
from java.lang import Runnable
|
from java.lang import Runnable
|
||||||
|
|
||||||
wait_time = 60 #seconds
|
wait_time = 30 #seconds
|
||||||
admin_perm = "utils.loginsecurity.admin"
|
admin_perm = "utils.loginsecurity.admin"
|
||||||
min_pass_length = 8
|
min_pass_length = 8
|
||||||
blocked_events = ["block.BlockBreakEvent", "block.BlockPlaceEvent", "player.PlayerMoveEvent","player.AsyncPlayerChatEvent"]
|
blocked_events = ["block.BlockBreakEvent", "block.BlockPlaceEvent", "player.PlayerMoveEvent","player.AsyncPlayerChatEvent"]
|
||||||
|
|||||||
81
main.py
81
main.py
@@ -11,9 +11,8 @@ sys.path += ['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/l
|
|||||||
try:
|
try:
|
||||||
# Library that adds a bunch of re-usable methods which are used in nearly all other modules
|
# Library that adds a bunch of re-usable methods which are used in nearly all other modules
|
||||||
from helpers import *
|
from helpers import *
|
||||||
from wrapper import *
|
|
||||||
except:
|
except:
|
||||||
print("[RedstonerUtils] ERROR: Failed to import Wrapper:")
|
print("[RedstonerUtils] ERROR: Failed to import helpers:")
|
||||||
print(print_traceback())
|
print(print_traceback())
|
||||||
|
|
||||||
|
|
||||||
@@ -25,17 +24,85 @@ def on_enable():
|
|||||||
|
|
||||||
@hook.disable
|
@hook.disable
|
||||||
def on_disable():
|
def on_disable():
|
||||||
#shared["modules"]["reports"].stop_reporting()
|
shared["modules"]["reports"].stop_reporting()
|
||||||
info("RedstonerUtils disabled!")
|
info("RedstonerUtils disabled!")
|
||||||
|
|
||||||
|
|
||||||
info("Loading RedstonerUtils...")
|
info("Loading RedstonerUtils...")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Import all modules, in this order
|
# Import all modules, in this order
|
||||||
shared["load_modules"] = ["test"]
|
shared["load_modules"] = [
|
||||||
|
# Collection of tiny utilities
|
||||||
|
"misc",
|
||||||
|
# Adds chat for staff using /ac <text or ,<text>
|
||||||
|
"adminchat",
|
||||||
|
# Adds /badge, allows to give players achievements
|
||||||
|
"badges",
|
||||||
|
# Adds a few block placement corrections/mods
|
||||||
|
"blockplacemods",
|
||||||
|
# Adds /calc, toggles automatic solving of Math expressions in chat
|
||||||
|
"calc",
|
||||||
|
# Adds aliasing of chat words
|
||||||
|
#"chatalias",
|
||||||
|
# Plugin to locate laggy chunks. /lc <n> lists chunks with more than n entities
|
||||||
|
"lagchunks",
|
||||||
|
# Adds /report and /rp, Stores reports with time and location
|
||||||
|
"reports",
|
||||||
|
# Adds group-chat with /chatgroup and /cgt to toggle normal chat into group mode
|
||||||
|
"chatgroups",
|
||||||
|
# Adds /token, reads and writes from the database to generate pronouncable (and thus memorable) registration-tokens for the website
|
||||||
|
"webtoken",
|
||||||
|
# Adds /lol, broadcasts random funyy messages. A bit like the splash text in the menu
|
||||||
|
"saylol",
|
||||||
|
# Adds /signalstrength, lets you request a signal strength and an amount of items will be inserted into target container to meet that strength.
|
||||||
|
"signalstrength",
|
||||||
|
# Shows the owner of a skull when right-clicked
|
||||||
|
"skullclick",
|
||||||
|
# Adds /listen, highlights chat and plays a sound when your name was mentioned
|
||||||
|
"mentio",
|
||||||
|
# Adds /cycler, swaps the hotbar with inventory when player changes slot from right->left or left->right
|
||||||
|
"cycle",
|
||||||
|
# Adds /getmotd & /setmotd to update the motd on the fly (no reboot)
|
||||||
|
"motd",
|
||||||
|
# AnswerBot. Hides stupid questions from chat and tells the sender about /faq or the like
|
||||||
|
"abot",
|
||||||
|
# Adds '/forcefield', creates forcefield for players who want it.
|
||||||
|
"forcefield",
|
||||||
|
# Adds /damnspam, creates timeout for buttons/levers to mitigate button spam.
|
||||||
|
"damnspam",
|
||||||
|
# Adds /check, useful to lookup details about a player
|
||||||
|
"check",
|
||||||
|
# Adds /an, a command you can use to share thoughts/plans/news
|
||||||
|
"adminnotes",
|
||||||
|
# Adds busy status to players
|
||||||
|
"imbusy",
|
||||||
|
# Adds /imout, displays fake leave/join messages
|
||||||
|
"imout",
|
||||||
|
#adds snowbrawl minigame
|
||||||
|
"snowbrawl",
|
||||||
|
# Adds /tm [player] for a messages to be sent to this player via /msg
|
||||||
|
"pmtoggle",
|
||||||
|
# Replacement for LoginSecurity
|
||||||
|
"loginsecurity",
|
||||||
|
# Centralized Player class
|
||||||
|
"player",
|
||||||
|
# Servercontrol extension for telnet access to logs/AC
|
||||||
|
#"servercontrol",
|
||||||
|
# Script helper plugin
|
||||||
|
"scriptutils",
|
||||||
|
# Per-player notes
|
||||||
|
"tag",
|
||||||
|
# vanish toggle module - temporary fix
|
||||||
|
#"vanishfix",
|
||||||
|
# obisidian mining punishment plugin
|
||||||
|
"punishments",
|
||||||
|
# a simple replacement for the buggy essentials /vanish
|
||||||
|
"vanish",
|
||||||
|
# ip-tracking utility
|
||||||
|
"iptracker",
|
||||||
|
#server signs for everyone
|
||||||
|
"serversigns"
|
||||||
|
]
|
||||||
shared["modules"] = {}
|
shared["modules"] = {}
|
||||||
for module in shared["load_modules"]:
|
for module in shared["load_modules"]:
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
import mysqlhack
|
|
||||||
from secrets import *
|
|
||||||
from thread_utils import *
|
|
||||||
from com.ziclix.python.sql import zxJDBC
|
|
||||||
from traceback import format_exc as trace
|
|
||||||
|
|
||||||
class mysql_connect:
|
|
||||||
def __init__(self):
|
|
||||||
self.conn = zxJDBC.connect(mysql_database, mysql_user, mysql_pass, "com.mysql.jdbc.Driver")
|
|
||||||
self.curs = self.conn.cursor()
|
|
||||||
|
|
||||||
def execute(self, query, args=None):
|
|
||||||
if args is None:
|
|
||||||
return self.curs.execute(query)
|
|
||||||
else:
|
|
||||||
return self.curs.execute(query, args)
|
|
||||||
|
|
||||||
def fetchall(self):
|
|
||||||
return self.curs.fetchall()
|
|
||||||
|
|
||||||
def __enter__(self):
|
|
||||||
return self
|
|
||||||
|
|
||||||
def __exit__(self, exc_type, exc_inst, exc_tb):
|
|
||||||
if exc_type is None:
|
|
||||||
try:
|
|
||||||
self.conn.commit()
|
|
||||||
self.curs.close()
|
|
||||||
self.conn.close()
|
|
||||||
except:
|
|
||||||
print(trace())
|
|
||||||
else:
|
|
||||||
print(exc_tb)
|
|
||||||
10
mysqlhack.py
10
mysqlhack.py
@@ -4,12 +4,12 @@ A library that makes use of the so called ClassPathHack for jython
|
|||||||
to allow proper loading of mysql-connector.jar at runtime.
|
to allow proper loading of mysql-connector.jar at runtime.
|
||||||
Import only, no methods.
|
Import only, no methods.
|
||||||
"""
|
"""
|
||||||
import jarray
|
|
||||||
import java.net.URL
|
|
||||||
import java.io.File
|
|
||||||
from java.lang import Class
|
|
||||||
import java.net.URLClassLoader
|
|
||||||
import java.lang.reflect.Method
|
import java.lang.reflect.Method
|
||||||
|
import java.io.File
|
||||||
|
import java.net.URL
|
||||||
|
import java.net.URLClassLoader
|
||||||
|
import jarray
|
||||||
|
from java.lang import Class
|
||||||
|
|
||||||
|
|
||||||
# hacky code to add mysql-connector to java's classpath ('classPathHack')
|
# hacky code to add mysql-connector to java's classpath ('classPathHack')
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
import threading
|
|
||||||
"""
|
|
||||||
Quick implementation of a @synchronized and @asynchronized decorators
|
|
||||||
"""
|
|
||||||
|
|
||||||
#To be replaced by bukkit scheduler.
|
|
||||||
"""
|
|
||||||
def sync(lock=None):
|
|
||||||
def decorator(wrapped):
|
|
||||||
def wrapper(*args, **kwargs):
|
|
||||||
with lock:
|
|
||||||
return wrapped(*args, **kwargs)
|
|
||||||
return wrapper
|
|
||||||
return decorator
|
|
||||||
"""
|
|
||||||
|
|
||||||
def async(daemon = True):
|
|
||||||
def decorator(function):
|
|
||||||
def wrapper(*args,**kwargs):
|
|
||||||
thread = threading.Thread(target=function,args=args,kwargs=kwargs)
|
|
||||||
thread.daemon = daemon
|
|
||||||
thread.start()
|
|
||||||
return wrapper
|
|
||||||
return decorator
|
|
||||||
11
wrapper.py
11
wrapper.py
@@ -1,11 +0,0 @@
|
|||||||
"""
|
|
||||||
Adapter classes for spigot api for more idiomatic python code.
|
|
||||||
|
|
||||||
Before you run away from this if the class you need to use isn't here, please create it.
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
|
||||||
from helpers import *
|
|
||||||
from wrapper_event import *
|
|
||||||
from wrapper_player import *
|
|
||||||
from wrapper_command import *
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
from wrapper_player import *
|
|
||||||
|
|
||||||
def command(command = "help"):
|
|
||||||
def decorator(wrapped):
|
|
||||||
@hook.command(command)
|
|
||||||
def wrapper(sender, command, label, args):
|
|
||||||
try:
|
|
||||||
return wrapped(sender = py_players[sender], command = command, label = label, args = args)
|
|
||||||
except:
|
|
||||||
print(print_traceback())
|
|
||||||
return decorator
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
from wrapper import *
|
|
||||||
from wrapper_player import *
|
|
||||||
from traceback import format_exc as print_traceback
|
|
||||||
|
|
||||||
class py_event:
|
|
||||||
def __init__(self,event):
|
|
||||||
self.event = event
|
|
||||||
try:
|
|
||||||
self.player = py_players[event.getPlayer()]
|
|
||||||
except:
|
|
||||||
warn("Player doesn't exist")
|
|
||||||
|
|
||||||
def event_handler(event_name = None, priority = "normal"):
|
|
||||||
def decorator(wrapped):
|
|
||||||
@hook.event(event_name, priority)
|
|
||||||
def wrapper(event):
|
|
||||||
try:
|
|
||||||
wrapped(py_event(event))
|
|
||||||
except:
|
|
||||||
print(print_traceback())
|
|
||||||
return decorator
|
|
||||||
|
|
||||||
@@ -1,89 +0,0 @@
|
|||||||
import time
|
|
||||||
import mysqlhack
|
|
||||||
from mysql_utils import *
|
|
||||||
from thread_utils import *
|
|
||||||
from players_secret import *
|
|
||||||
from datetime import datetime
|
|
||||||
from com.ziclix.python.sql import zxJDBC
|
|
||||||
|
|
||||||
class py_player:
|
|
||||||
def __init__(self,player):
|
|
||||||
self.player = player
|
|
||||||
self.login_time = time.time()
|
|
||||||
self.logging_in = False
|
|
||||||
|
|
||||||
self.nickname = self.name
|
|
||||||
self.registered = False
|
|
||||||
self.password = "None"
|
|
||||||
self.banned = False
|
|
||||||
self.banned_reason = "You have been banned!"
|
|
||||||
self.played_time = time.time() - self.login_time
|
|
||||||
self.last_login = datetime.now()
|
|
||||||
self.first_seen = datetime.now()
|
|
||||||
|
|
||||||
def kick(self, kick_message = "You have been kicked from the server!"):
|
|
||||||
self.player.KickPlayer(kick_message)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def name(self):
|
|
||||||
return self.player.getName()
|
|
||||||
|
|
||||||
@property
|
|
||||||
def uuid(self):
|
|
||||||
return str(self.player.getUniqueId())
|
|
||||||
|
|
||||||
|
|
||||||
class Py_players:
|
|
||||||
def __init__(self):
|
|
||||||
self.players = []
|
|
||||||
|
|
||||||
def __len__(self):
|
|
||||||
return len(self.players)
|
|
||||||
|
|
||||||
def __getitem__(self, player):
|
|
||||||
for py_player in self.players:
|
|
||||||
if py_player.name == player.getName():
|
|
||||||
return py_player
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def remove(self, player):
|
|
||||||
self.players.remove(player)
|
|
||||||
|
|
||||||
def append(self, player):
|
|
||||||
self.players.append(player)
|
|
||||||
|
|
||||||
py_players = Py_players()
|
|
||||||
|
|
||||||
@async(daemon=True)
|
|
||||||
def fetch_player(player):
|
|
||||||
with mysql_connect() as sql:
|
|
||||||
sql.execute("SELECT * FROM utils_players WHERE uuid = ?", (player.uuid,))
|
|
||||||
result = sql.fetchall()
|
|
||||||
|
|
||||||
if len(result) is 0:
|
|
||||||
with mysql_connect() as sql:
|
|
||||||
sql.execute("INSERT INTO utils_players \
|
|
||||||
(uuid, name, nickname, registered, password, banned, \
|
|
||||||
banned_reason, played_time, last_login, first_seen) \
|
|
||||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
|
||||||
|
|
||||||
args=(player.uuid, player.name, player.nickname, player.registered,
|
|
||||||
player.password, player.banned,
|
|
||||||
player.banned_reason, player.played_time,
|
|
||||||
player.last_login, player.first_seen))
|
|
||||||
else:
|
|
||||||
pass
|
|
||||||
#test
|
|
||||||
|
|
||||||
|
|
||||||
@hook.event("player.PlayerJoinEvent","lowest")
|
|
||||||
def on_join(event):
|
|
||||||
player = py_player(event.getPlayer())
|
|
||||||
py_players.append(player)
|
|
||||||
fetch_player(player)
|
|
||||||
|
|
||||||
|
|
||||||
@hook.event("player.PlayerQuitEvent","highest")
|
|
||||||
def on_leave(event):
|
|
||||||
py_players.remove(py_players[event.getPlayer()])
|
|
||||||
Reference in New Issue
Block a user