"""Create a new, empty Universe (the Big Bang)."""
new_universe = Universe()
for attribute in vars(self).keys():
- exec("new_universe." + attribute + " = self." + attribute)
+ setattr(new_universe, attribute, getattr(self, attribute))
new_universe.reload_flag = False
del self
return new_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."""
"""Flag the user as authenticated and disconnect duplicates."""
if self.state != "authenticated":
self.authenticated = True
+ log("User %s authenticated for account %s." % (
+ self, self.account.subkey), 2)
if ("mudpy.limit" in universe.contents and self.account.subkey in
universe.contents["mudpy.limit"].get("admins")):
self.account.set("administrator", True)
- log("Administrator %s authenticated." %
- self.account.get("name"), 2)
- else:
- log("User %s authenticated for account %s." % (
- self, self.account.subkey), 2)
+ log("Account %s is an administrator." % (
+ self.account.subkey), 2)
def show_menu(self):
"""Send the user their current menu."""
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
log("Import path: %s" % ", ".join(sys.path), 1)
log("Installed dependencies: %s" % universe.versions.dependencies_text, 1)
log("Other python packages: %s" % universe.versions.environment_text, 1)
- log("Started %s with command line: %s" % (
- universe.versions.version, " ".join(sys.argv)), 1)
+ log("Running version: %s" % universe.versions.version, 1)
+ log("Initial directory: %s" % universe.startdir, 1)
+ log("Command line: %s" % " ".join(sys.argv), 1)
# pass the initialized universe back
return universe