diff --git a/src/commands/cmdparser.py b/src/commands/cmdparser.py index eacb8f2761..6be2305892 100644 --- a/src/commands/cmdparser.py +++ b/src/commands/cmdparser.py @@ -47,9 +47,11 @@ def cmdparser(raw_string, cmdset, caller, match_index=None): l_raw_string = raw_string.lower() for cmd in cmdset: matches.extend([create_match(cmdname, raw_string, cmd) - for cmdname in [cmd.key] + cmd.aliases - if cmdname and l_raw_string.startswith(cmdname.lower())]) - if not matches: + for cmdname in [cmd.key] + cmd.aliases + if cmdname and l_raw_string.startswith(cmdname.lower()) + and (not cmd.arg_regex or + cmd.arg_regex.match(l_raw_string[len(cmdname):]))]) + if not matches: # no matches found. if '-' in raw_string: # This could be due to the user trying to identify the diff --git a/src/commands/command.py b/src/commands/command.py index cf6fd0209a..f4ede9492a 100644 --- a/src/commands/command.py +++ b/src/commands/command.py @@ -5,6 +5,7 @@ All commands in Evennia inherit from the 'Command' class in this module. """ +import re from src.locks.lockhandler import LockHandler from src.utils.utils import is_iter @@ -42,6 +43,11 @@ class CommandMeta(type): temp.append(lockstring) mcs.lock_storage = ";".join(temp) + if hasattr(mcs, 'arg_regex') and isinstance(mcs.arg_regex, basestring): + mcs.arg_regex = re.compile(r"%s" % mcs.arg_regex, re.I) + else: + mcs.arg_regex = None + if not hasattr(mcs, 'is_exit'): mcs.is_exit = False if not hasattr(mcs, "help_category"): diff --git a/src/commands/default/general.py b/src/commands/default/general.py index b90cea430c..0389c4e319 100644 --- a/src/commands/default/general.py +++ b/src/commands/default/general.py @@ -49,6 +49,7 @@ class CmdLook(MuxCommand): key = "look" aliases = ["l", "ls"] locks = "cmd:all()" + arg_regex = r"\s.*?|$" def func(self): """ diff --git a/src/objects/objects.py b/src/objects/objects.py index c99844115e..48ed5f155a 100644 --- a/src/objects/objects.py +++ b/src/objects/objects.py @@ -500,6 +500,7 @@ class Exit(Object): """ locks = "cmd:all()" # should always be set to this. obj = None + arg_regex=r"\s.*?|$" def func(self): "Default exit traverse if no syscommand is defined."