X-Git-Url: https://mudpy.org/gitweb?p=mudpy.git;a=blobdiff_plain;f=mudpy%2Fmisc.py;h=045e6a55ed24c67fd3644ec36f7dab1102f50804;hp=62501d493a733c6623f8df69c9aca311d13c6535;hb=0ea37930939961ec4b045db07921aa4f5a1ba30c;hpb=73a4f24fc4819d7b6b50064d660b24b231a33d9e diff --git a/mudpy/misc.py b/mudpy/misc.py index 62501d4..045e6a5 100644 --- a/mudpy/misc.py +++ b/mudpy/misc.py @@ -1889,11 +1889,29 @@ def handler_active(user): command = find_command(command_name) # if it's allowed, do it + ran = False if actor.can_run(command): - exec(command.get("action")) - - # otherwise, give an error - elif command_name: + # dereference the relative object path for the requested function + action = mudpy + for component in command.get("action").split("."): + try: + action = getattr(action, component) + ran = True + except AttributeError: + log('Could not find action function for command "%s"') + action = None + break + if action: + try: + action(actor, parameters) + except Exception: + log('Command string "%s" from user %s raised an ' + 'exception...\n%s' % ( + input_data, actor.owner.account.get("name"), + traceback.format_exc())) + + # if the command was not run, give an error + if not ran: mudpy.command.error(actor, input_data) # if no input, just idle back with a prompt