summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--commandmanager.py79
-rw-r--r--helpers.py106
2 files changed, 105 insertions, 80 deletions
diff --git a/commandmanager.py b/commandmanager.py
deleted file mode 100644
index 594be5d..0000000
--- a/commandmanager.py
+++ /dev/null
@@ -1,79 +0,0 @@
-from helpers import *
-
-class commandmanager(object):
-
- """
- Use this instead of @hook.command for your command methods. (@commandmanager(things...))
-
- It will take care of the following things:
- - Basic permission check. The default permission is utils.<cmd_name>
- - Sender type check. You can pass whether the sender must be a player, a consolesender, or both. (see sender_limit below)
- - Minimum and maximum args. Works with checkargs from helpers.py.
- - A '/<cmd> help' message containing the description, usage and aliases of the command.
-
- Information about some arguments:
- - f: The method. Don't bother with that.
- - cmd_name: The command you type in chat.
- - usage: For example "<player> <other_player" and is part of the help message.
- - description: A brief description of what the command does. (also part of the help message)
- - aliases: A list of aliases for the command
- - permission: The basic permission for the command. Defaults to utils.<cmd>
- - sender_limit: Defines what sendertype can use the command. Leave blank for console & player, 0 for player only, 1 for console only.
- - min_args: The least arguments for the command.
- - max_args: You guessed it right. Defaults to infinity (-1).
-
- *** DISCLAIMER ***
-
- Your command function must take three arguments: sender, handler, args.
- Where handler is the instance of this class. You can for example return help_message(sender), get the given arguments etc.
-
- Your function must also not return a boolean like before, but a String instead. The string returned will be sent to the player (&-codes supported).
- Use None or "" for no message.
-
- Feel free to edit or give suggestions (but don't break existing commands)
- """
-
- def __init__(self, f, cmd_name, usage = "[args...]", description = "Handles" + cmd_name, aliases = [], permission = "utils." + cmd_name.lower(), sender_limit = -1, min_args = 0, max_args = -1):
- self.f = f
- self.cmd_name = cmd_name.lower()
- self.usage = usage
- self.description = description
- self.aliases = aliases
- self.permission = permission
- self.sender_limit = sender_limit
- self.min_args = min_args
- self.max_args = max_args
-
- @hook.command(cmd_name, aliases = aliases)
- def __call__(sender, command, label, args):
- msg = __run__(sender, command, label, args)
- if msg:
- msg(sender, msg)
-
- def __run__(sender, args):
- isplayer = is_player(sender)
- if not is_sender_valid(isplayer):
- return "&cThis command can only be run from the console" if isplayer else "&cThis command can only be run by players"
- if not sender.hasPermission(permission):
- return "&cYou do not have permission to use this command"
- if not checkargs(sender, args, min_args, max_args):
- return None
- return help_message(sender) if args and args[0].lower() == "help" else f(sender, self, args)
-
- def is_sender_valid(isplayer):
- return True if sender_limit == -1 else sender_limit == 0 == isplayer
-
- def help_message(sender):
- """
- Information about command /<cmd>: #Light green
- description... #Blue
- description... #Blue
-
- Syntax: /<cmd> <usage> #Light green
- Aliases: alias1, alias2, alias3 #Gold
- """
- msg = "&aInformation about command /%s:\n &9%s" % (cmd_name, description.replace("\n", "\n "))
- msg += "\n\n&aSyntax: &o/%s %s" % (cmd_name, usage)
- if aliases:
- msg += ("\n&6Aliases: " + [msg + ", " for msg in aliases])[:-2]
- return msg \ No newline at end of file
diff --git a/helpers.py b/helpers.py
index 4748994..83107a9 100644
--- a/helpers.py
+++ b/helpers.py
@@ -11,6 +11,8 @@ import org.bukkit.event.entity as entity
import org.bukkit.command.ConsoleCommandSender
from org.bukkit.entity import *
+from traceback import format_exc as trace
+
shared = {} # this dict can be used to share stuff across modules
@@ -212,4 +214,106 @@ def toggle(player, ls, name = "Toggle", add = None):
msg(player, "&a%s turned off!" % name)
elif add != False:
ls.append(pid)
- msg(player, "&a%s turned on!" % name) \ No newline at end of file
+ msg(player, "&a%s turned on!" % name)
+
+
+
+
+
+
+"""
+Use this instead of @hook.command for your command methods. (@simplecommand(things...))
+
+It will take care of the following things:
+- Basic permission check. The default permission is utils.<cmd_name>
+- Sender type check. You can pass whether the sender must be a player, a consolesender, or both. (see sender_limit below)
+- Minimum and maximum args. Works with checkargs from helpers.py.
+- A '/<cmd> help' message containing the description, usage and aliases of the command.
+
+Information about some arguments:
+- cmd_name: The command you type in chat.
+- usage: For example "<player> <other_player" and is part of the help message.
+- description: A brief description of what the command does. (also part of the help message)
+- aliases: A list of aliases for the command
+- permission: The basic permission for the command. Defaults to utils.<cmd>
+- sender_limit: Defines what sendertype can use the command. Leave blank for console & player, 0 for player only, 1 for console only.
+- min_args: The least arguments for the command.
+- max_args: You guessed it right. Defaults to infinity (-1).
+
+*** DISCLAIMER ***
+
+Your command function must take four arguments: sender, command, label, args.
+
+Your function must also not return a boolean like before, but a String instead. The string returned will be sent to the player (&-codes supported).
+Use None or "" for no message.
+
+Feel free to edit or give suggestions (but don't break existing commands)
+
+See below for an example command.
+"""
+
+def simplecommand(cmd_name, aliases = [], permission = None, usage = None, description = None, sender_limit = -1, min_args = 0, max_args = -1):
+ cmd_name = cmd_name.lower()
+ if not permission:
+ permission = "utils." + cmd_name
+ if not usage:
+ usage = "[args...]"
+ if not description:
+ description = "Handles " + cmd_name
+
+ def actualDecorator(function):
+
+ @hook.command(cmd_name, aliases = aliases)
+ def __call_func__(sender, command, label, args):
+ try:
+ message = __run__(sender, command, label, args)
+ if message:
+ msg(sender, message)
+ except:
+ error(trace())
+
+ def __run__(sender, command, label, args):
+ isplayer = is_player(sender)
+ if not is_sender_valid(isplayer):
+ return "&cThis command can only be run from the console" if isplayer else "&cThis command can only be run by players"
+ if not sender.hasPermission(permission):
+ return "&cYou do not have permission to use this command"
+ if not checkargs(sender, args, min_args, max_args):
+ return None
+ return help_message(sender) if args and args[0].lower() == "help" else function(sender, command, label, args)
+
+ return __call_func__
+
+ def is_sender_valid(isplayer):
+ return True if sender_limit == -1 else sender_limit != isplayer
+
+ def help_message(sender):
+ """
+ Information about command /<cmd>: #Light green
+ description... #Blue
+ description... #Blue
+
+ Syntax: /<cmd> <usage> #Light green
+ Aliases: alias1, alias2, alias3 #Gold
+ """
+ try:
+ help_msg = "&aInformation about command /%s:\n &9%s" % (cmd_name, description.replace("\n", "\n "))
+ help_msg += "\n\n&aSyntax: &o/%s %s" % (cmd_name, usage)
+ if aliases:
+ help_msg += ("\n&6Aliases: " + "".join([(alias + ", ") for alias in aliases]))[:-2]
+ return help_msg
+ except:
+ error(trace())
+
+ return actualDecorator
+
+
+"""
+@simplecommand("test", usage = "<player>", description = "Kicks a player", aliases = ["kickp", "tek"], permission = "utils.kickuser", sender_limit = 0, min_args = 1, max_args = 2)
+def on_test(sender, command, label, args):
+ target = server.getPlayer(args[0]);
+ if target:
+ target.kickPlayer("Kicked from the server")
+ return None
+ return "&cThat player could not be found"
+"""