X-Git-Url: https://mudpy.org/gitweb?p=mudpy.git;a=blobdiff_plain;f=mudpy%2Fmisc.py;h=babd42f04dd6e7e4612dec3a43caa5bb5629dad4;hp=ba29a907ea0996a7ea8ff217122b89bee5eb0467;hb=0de1cbedcdff936f461aa6b9421cb925295bba10;hpb=29041014a531835bf9b6a80ca9d7ed414a929432 diff --git a/mudpy/misc.py b/mudpy/misc.py index ba29a90..babd42f 100644 --- a/mudpy/misc.py +++ b/mudpy/misc.py @@ -184,27 +184,31 @@ class Element: prepend_padding ) + def is_restricted(self): + """Boolean check whether command is administrative or debugging.""" + return(self.get("administrative", False)) + + def is_admin(self): + """Boolean check whether an actor is controlled by an admin owner.""" + return(self.owner and self.owner.is_admin()) + def can_run(self, command): """Check if the user can run this command object.""" # has to be in the commands group if command not in self.universe.groups["command"].values(): - result = False + return(False) # avatars of administrators can run any command - elif self.owner and self.owner.account.get("administrator"): - result = True + if self.is_admin(): + return(True) # everyone can run non-administrative commands - elif not command.get("administrative"): - result = True + if not command.is_restricted(): + return(True) # otherwise the command cannot be run by this actor - else: - result = False - - # pass back the result - return result + return(False) def update_location(self): """Make sure the location's contents contain this element.""" @@ -999,6 +1003,10 @@ class User: avatar, 6) return avatars + def is_admin(self): + """Boolean check whether user's account is an admin.""" + return(self.account.get("administrator", False)) + def broadcast(message, add_prompt=True): """Send a message to all connected users.""" @@ -1053,9 +1061,10 @@ def log(message, level=0): # display to connected administrators for user in universe.userlist: - if user.state == "active" and user.account.get( - "administrator" - ) and user.account.get("loglevel", 0) <= level: + if ( + user.state == "active" + and user.is_admin() + and user.account.get("loglevel", 0) <= level): # iterate over every line in the message full_message = "" for line in lines: @@ -1227,7 +1236,7 @@ def weighted_choice(data): expanded.append(key) # return one at random - # Whitelist the random.randrange() call in bandit since it's not used for + # Allow the random.randrange() call in bandit since it's not used for # security/cryptographic purposes return random.choice(expanded) # nosec @@ -1276,7 +1285,7 @@ def random_name(): name = "" # create a name of random length from the syllables - # Whitelist the random.randrange() call in bandit since it's not used for + # Allow the random.randrange() call in bandit since it's not used for # security/cryptographic purposes for _syllable in range(random.randrange(2, 6)): # nosec name += weighted_choice(syllables) @@ -1501,7 +1510,7 @@ def find_command(command_name): else: for candidate in sorted(universe.groups["command"]): if candidate.startswith(command_name) and not universe.groups[ - "command"][candidate].get("administrative"): + "command"][candidate].is_restricted(): # the command matches the start of a command word and is not # restricted to administrators command = universe.groups["command"][candidate]