diff --git a/src/commands/general.py b/src/commands/general.py index 586b71d4de..50f060b9aa 100644 --- a/src/commands/general.py +++ b/src/commands/general.py @@ -359,7 +359,7 @@ def cmd_who(command): if show_session_data: retval += '%-31s%9s %4s%-3s#%-6d%5d%3s%-25s\r\n' % \ - (plr_pobject.get_name(show_dbref=False)[:25], \ + (plr_pobject.get_name(show_dbref=True, show_flags=False)[:25], \ # On-time functions_general.time_format(delta_conn,0), \ # Idle time diff --git a/src/comsys.py b/src/comsys.py index c9a382492d..19f3b2f186 100644 --- a/src/comsys.py +++ b/src/comsys.py @@ -184,9 +184,10 @@ def msg_cwho(session, channel_name): session: (SessionProtocol) A reference to the player session. channel_name: (str) The channel's full name. """ + pobject = session.get_pobject() session.msg("--- Users Listening to %s ---" % (channel_name,)) for plr_sess in get_cwho_list(channel_name): - session.msg(plr_sess.get_pobject().get_name(show_dbref=False)) + session.msg(plr_sess.get_pobject().get_name(show_dbref=pobject.sees_dbrefs())) session.msg("--- End Channel Listeners ---") def get_cwho_list(channel_name, return_muted=False): diff --git a/src/objects/models.py b/src/objects/models.py index cd0a985c20..ec9f91d3cc 100755 --- a/src/objects/models.py +++ b/src/objects/models.py @@ -183,34 +183,51 @@ class Object(models.Model): for obj in contents: obj.emit_to(message) + + def get_user_account(self): + """ + Returns the player object's account object (User object). + """ + return User.objects.get(id=self.id) def is_staff(self): """ - Returns TRUE if the object is a staff player. + Returns True if the object is a staff player. """ if not self.is_player(): return False - profile = User.objects.filter(id=self.id) - - if len(profile) == 0: + try: + profile = self.get_user_account() + return profile.is_staff + except User.DoesNotExist: return False - else: - return profile[0].is_staff def is_superuser(self): """ - Returns TRUE if the object is a super user player. + Returns True if the object is a super user player. """ if not self.is_player(): return False - profile = User.objects.filter(id=self.id) - - if len(profile) == 0: + try: + profile = self.get_user_account() + return profile.is_superuser + except User.DoesNotExist: return False + + def sees_dbrefs(self): + """ + Returns True if the object sees dbrefs in messages. This is here + instead of session.py due to potential future expansion in the + direction of MUX-style puppets. + """ + looker_user = self.get_user_account() + if looker_user: + # Builders see dbrefs + return looker_user.has_perm('genperms.builder') else: - return profile[0].is_superuser + return False def user_has_perm(self, perm): """ @@ -301,16 +318,9 @@ class Object(models.Model): pobject = self.get_user_account() pobject.username = new_name pobject.save() - - def get_user_account(self): - """ - Returns the player object's account object (User object). - """ - if not self.is_player(): - return False - return User.objects.get(id=self.id) - def get_name(self, fullname=False, show_dbref=True, no_ansi=False): + def get_name(self, fullname=False, show_dbref=True, show_flags=True, + no_ansi=False): """ Returns an object's name. """ @@ -320,14 +330,22 @@ class Object(models.Model): name_string = self.name if show_dbref: - dbref_string = "(#%s%s)" % (self.id, self.flag_string()) + # Allow hiding of the flags but show the dbref. + if show_flags: + flag_string = self.flag_string() + else: + flag_string = "" + + dbref_string = "(#%s%s)" % (self.id, flag_string) else: dbref_string = "" if fullname: - return "%s%s" % (ansi.parse_ansi(name_string, strip_ansi=no_ansi), dbref_string) + return "%s%s" % (ansi.parse_ansi(name_string, strip_ansi=no_ansi), + dbref_string) else: - return "%s%s" % (ansi.parse_ansi(name_string.split(';')[0], strip_ansi=no_ansi), dbref_string) + return "%s%s" % (ansi.parse_ansi(name_string.split(';')[0], + strip_ansi=no_ansi), dbref_string) def set_description(self, new_desc): """ diff --git a/src/script_parents/basicobject.py b/src/script_parents/basicobject.py index 3146a9ef09..88f7e0d522 100644 --- a/src/script_parents/basicobject.py +++ b/src/script_parents/basicobject.py @@ -38,15 +38,18 @@ class EvenniaBasicObject(object): """ target_obj = self.source_obj pobject = values["pobject"] + + show_dbrefs = pobject.sees_dbrefs() + description = target_obj.get_description() if description is not None: retval = "%s\r\n%s" % ( - target_obj.get_name(), + target_obj.get_name(show_dbref=show_dbrefs), target_obj.get_description(), ) else: retval = "%s" % ( - target_obj.get_name(), + target_obj.get_name(show_dbref=show_dbrefs), ) con_players = [] @@ -65,15 +68,15 @@ class EvenniaBasicObject(object): if not con_players == []: retval += "\n\r%sPlayers:%s" % (ansi.ansi["hilite"], ansi.ansi["normal"],) for player in con_players: - retval +='\n\r%s' %(player.get_name(),) + retval +='\n\r%s' %(player.get_name(show_dbref=show_dbrefs),) if not con_things == []: retval += "\n\r%sContents:%s" % (ansi.ansi["hilite"], ansi.ansi["normal"],) for thing in con_things: - retval += '\n\r%s' %(thing.get_name(),) + retval += '\n\r%s' %(thing.get_name(show_dbref=show_dbrefs),) if not con_exits == []: retval += "\n\r%sExits:%s" % (ansi.ansi["hilite"], ansi.ansi["normal"],) for exit in con_exits: - retval += '\n\r%s' %(exit.get_name(),) + retval += '\n\r%s' %(exit.get_name(show_dbref=show_dbrefs),) return retval