From aa86881f5eabe0a7471aadf73ee8a7b789e679dc Mon Sep 17 00:00:00 2001 From: Dico200 Date: Tue, 3 Nov 2015 19:05:15 +0100 Subject: Fix survival use of /signalstrength, other interesting changes --- helpers.py | 10 +++++++ misc.py | 4 ++- signalstrength.py | 5 ++++ synchronizeranks.py | 79 ++++++++++++++++++++++++++++++++++++++++++++--------- 4 files changed, 84 insertions(+), 14 deletions(-) diff --git a/helpers.py b/helpers.py index 898dea7..79af3a0 100644 --- a/helpers.py +++ b/helpers.py @@ -181,6 +181,16 @@ def is_creative(player): return str(player.getGameMode()) == "CREATIVE" +def is_rank(player, rank): + """ + rank: a string equal to the PEX group name found in /pex groups + returns True if one of the following conditions are met: + - the player is of the given rank, + - their rank inherits the given rank. + """ + return player.hasPermission("groups." + rank) + + def uid(player): """ returns the player's UUID diff --git a/misc.py b/misc.py index c6da200..09abcb8 100644 --- a/misc.py +++ b/misc.py @@ -7,6 +7,7 @@ import thread import org.bukkit.inventory.ItemStack as ItemStack import org.bukkit.Bukkit as Bukkit from basecommands import simplecommand, Validate +import java.util.Arrays as Arrays @@ -161,7 +162,8 @@ def on_pluginversions_command(sender, command, label, args): """ try: plugin_header(sender, "Plugin versions") - plugins = [pl.getDescription() for pl in list(ArrayList(java_array_to_list(server.getPluginManager().getPlugins())))] + raw_plugins = server.getPluginManager().getPlugins() # Plugin[] + plugins = [raw_plugins[i].getDescription() for i in range(len(raw_plugins))] info(type(plugins[0]).__name__) plugins.sort(key = lambda pl: pl.getDescription().getName()) msg(sender, "&3Listing all " + str(len(plugins)) + " plugins and their version:") diff --git a/signalstrength.py b/signalstrength.py index ebe2bd1..c668b46 100644 --- a/signalstrength.py +++ b/signalstrength.py @@ -109,6 +109,11 @@ def get_entire_container(container): helpSubcmd = True, senderLimit = 0) def on_signalstrength_command(sender, command, label, args): + + #Sender has to be in creative and if in Trusted world, they have to be Trusted+. Any ranks above trusted inherit groups.trusted. + if (not is_creative(sender)) or (sender.getWorld().getName() == "Trusted" and not is_rank(sender, "trusted")): + return "&cYou do not have permission to use that command in this world" + if len(args) > 0 and args[0].lower() in ("default", "defaults", "setdefaults"): strength, item_type, item_data = get_data(sender, args[1:]) diff --git a/synchronizeranks.py b/synchronizeranks.py index 8d0db60..4509185 100644 --- a/synchronizeranks.py +++ b/synchronizeranks.py @@ -3,6 +3,14 @@ from secrets import * import mysqlhack from com.ziclix.python.sql import zxJDBC +""" +WORK IN PROGRESS +""" + +#-----------------------Config-------------------------- + +config_file = "website-roles" + ranks = { "member" : 3, "builder" : 7, @@ -13,31 +21,41 @@ ranks = { "admin" : 5 } +ranks = open_json_file(config_file, ranks) + +def save_ranks(): + save_json_file(config_file, ranks) + +#-----------------------Event--------------------------- @hook.event("player.PlayerJoinEvent", "normal") def on_player_join(event): user = event.getPlayer() uuid = uid(player).replace("-", "") - role = get_role(uuid) - if role in [1, 2, 6]: #Disabled/Banned/Superadmin - return - if role != None: - for rank in ranks: - if user.hasPermission("group." + rank): - if role != ranks[rank]: - set_role(uuid, ranks[rank]) - elif user.hasPlayedBefore(): - msg(user, "&cYou haven't registed yet! Make sure to do so on redstoner.com") + + sql_instruction + + def callback_thing(role, args): + + if role in [1, 2, 6]: #Disabled/Banned/Superadmin + return + if role != None: + for rank in ranks: + if user.hasPermission("group." + rank): + if role != ranks[rank]: + set_role(uuid, ranks[rank]) + elif user.hasPlayedBefore(): + msg(user, "&cYou haven't registed yet! Make sure to do so on redstoner.com") def get_role(uuid): - results = execute_query("SELECT `role_id` FROM users WHERE `uuid` = ? LIMIT 1", uuid) + results = execute_query("SELECT `role_id` FROM users WHERE `uuid` = ? LIMIT 1;", uuid) return results[0][0] # Returns a table with 1 row (LIMIT 1) and 1 column (SELECT `role_id`), so we're looking for the first row of the first column. def set_role(uuid, role_id): - execute_update(("UPDATE users SET `role_id` = %d WHERE `uuid` = ?" % role_id), uuid) + execute_update("UPDATE users SET `role_id` = ? WHERE `uuid` = ?;", (role_id, uuid,)) # %d is like %s for integers (unlogically, you'd expect something like %i), though %s also works here. @@ -55,5 +73,40 @@ def execute_update(update, uuid): conn = zxJDBC.connect(mysql_database, mysql_user, mysql_pass, "com.mysql.jdbc.Driver") curs = conn.cursor() curs.execute(update, (uuid,)) + conn.commit() curs.close() - conn.close() \ No newline at end of file + conn.close() + +def get_role(uuid): + sql_instruction() + +#--------------------------------Queries / Updates---------------------------- + +def sql_instruction(instruction, args, fetch = True, callback_func = ignored_func, callback_args = tuple()): + thread = threading.Thread(target = curs_instruction, args = (instruction_executor, instruction, fetch, callback_func, callback_args)) + thread.start() + + +def curs_instruction(func, instruction, fetch, callback_func, callback_args): + conn = zxJDBC.connect(mysql_database, mysql_user, mysql_pass, "com.mysql.jdbc.Driver") + curs = conn.getCursor() + + if fetch: + returned = func(curs, instruction, fetch) + curs.close() + conn.close() + callback_func(returned, callback_args) + + else: + func(curs, instruction, fetch) + conn.commit() + curs.close() + conn.close() + + +def instruction_executor(curs, instruction, fetch): + curs.execute(instruction) + return curs.fetchall() if fetch else None + +def ignored_func(*args): + pass \ No newline at end of file -- cgit v1.2.3