Separate listening port in startup logging
[mudpy.git] / mudpy / misc.py
index 62501d4..1b2be37 100644 (file)
@@ -457,10 +457,8 @@ class Universe:
         self.listening_socket.listen(1)
 
         # note that we're now ready for user connections
-        log(
-            "Listening for Telnet connections on: " +
-            host + ":" + str(port)
-        )
+        log("Listening for Telnet connections on %s port %s" % (
+                host, str(port)))
 
     def get_time(self):
         """Convenience method to get the elapsed time counter."""
@@ -1889,11 +1887,32 @@ 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
+            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 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