command = find_command(command_name)
# if it's allowed, do it
- ran = False
+ result = None
if actor.can_run(command):
- # dereference the relative object path for the requested function
- # TODO(fungi) use call_hook_function() here instead
- action = mudpy
action_fname = command.get("action", command.key)
- for component in action_fname.split("."):
- try:
- action = getattr(action, component)
- ran = True
- except AttributeError:
- log('Could not find action function "%s" for command "%s"'
- % (action_fname, command_name))
- 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()))
- mudpy.command.error(actor, input_data)
+ if action_fname:
+ result = call_hook_function(action_fname, (actor, parameters))
# if the command was not run, give an error
- if not ran:
+ if not result:
mudpy.command.error(actor, input_data)
# if no input, just idle back with a prompt