def func(self): if not self.switches and self.args: target = match(self.args) if not target: self.msg('{R[Could not find "%s"]' % self.args) return if utils.inherits_from(target, "src.objects.objects.Character"): if target.sessid: self.msg('{Y[%s is online right now]' % (target.key)) elif not target.has_attribute('stats_last_unpuppet_time'): self.msg('{R[The time %s last left the game is unknown]' % (target.key)) elif target.db.stats_last_unpuppet_time == None: self.msg('{Y[%s has never entered the game]' % (target.key)) else: self.msg('{Y[%s last left the game at %s]' % (target.key, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(target.db.stats_last_unpuppet_time)))) else: if target.sessions: self.msg('{Y[%s is online right now]' % (target.key)) elif not target.has_attribute('stats_last_logout_time'): self.msg('{R[The time %s last left the game is unknown]' % (target.key)) elif target.db.stats_last_logout_time == None: self.msg('{Y[%s has never entered the game]' % (target.key)) else: self.msg('{Y[%s last left the game at %s]' % (target.key, time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(target.db.stats_last_logout_time)))) else: # Unrecognized command self.msg("{R[Invalid '{r%s{R' command. See '{rhelp %s{R' for usage]" % (self.cmdstring, self.key))
def cmd_add(self, targetname): player = self.player target = match(targetname, exact=True) if hasattr(target, 'get_owner'): target = target.get_owner() if not target: self.msg('{R[Player not found]') return # Check if this player is already a friend if target in player.get_friend_players(): self.msg('{R["%s" is already your friend]' % target.key) return # Ensure they're not trying to befriend themselves if target == player: self.msg('{G[You befriend yourself {m<3 <3 <3{G]') return # Add the player to the friend list if needed if player in target.db.friends_list: # Already in the target's friend list. Mutual friendship begins! Bunnies and rainbows. player.db.friends_list.add(target) self.msg('{G[Added "%s" as a friend!]' % target.key) target.msg('{G["%s" added you as a friend!]' % player.key) else: # Alert the target user # Construct message header sender = None # Get the recipients receivers = [target] # Collect the message from the user message = "{Y[You've received a friend request from %s. To accept the request, use {y%s/add %s{Y]" % (player.key, self.key, player.key) # Generate message header, to store the 'to' and 'from' as provided. (The recievers and sender field of the Msg object will be the player, and never a character) header = { 'from' : 'Latitude MUD', 'to' : [target.key], } header = pickle.dumps(header) # Create the message object msg_object = create_message(sender, message, receivers=receivers, header=header) # Display the message to the user, or mark it as unseen if they're offline so it can be read later for receiver in receivers: if receiver.sessions: receiver.msg(message) else: if not receiver.db.msg_unseen: receiver.db.msg_unseen = [] receiver.db.msg_unseen.append(msg_object) # Actually add the friend to this player's list player.db.friends_list.add(target) # Not already in the target's friend list, so let them know this is only a 'friend request' state. self.msg('{Y[Friend request sent. In order for this player to appear in your friend list, they will have to add you as well. Use {y%s/del %s{Y to cancel the request if needed.]' % (self.key, targetname))
def func(self): switches = [switch.lower() for switch in self.switches] character = self.character if self.cmdstring.lower() == 'ws': if not switches and not self.args: if not character: self.msg("{RYou have no location. (See {rhelp @char{R for more information)") return if not character.location: self.msg("{RYou don't seem to have any specific location.") return self.display_users([ con for con in character.location.contents if utils.inherits_from(con, "src.objects.objects.Character") ]) return else: if (not switches or switches == ['characters']) and not self.args: characters = set() for session in SESSIONS.get_sessions(): character = session.get_character() if character: character = character.typeclass characters.add(character) self.display_users(characters) return if switches == ['players'] and not self.args: players = set() for session in SESSIONS.get_sessions(): player = session.get_player() if player: player = player.typeclass players.add(player) self.display_users(players) return if switches == ['far'] and self.args: target = match(self.args) if not target: self.msg('%cnNo match found for "' + self.args + "'") return self.display_users([target]) return if switches == ['room'] and not self.args: if not character: self.msg("{RYou have no location. (See {rhelp @char{R for more information)") return if not character.location: self.msg("{RYou don't seem to have any specific location.") return self.display_users([ con for con in character.location.contents if utils.inherits_from(con, "src.objects.objects.Character") ]) return self.msg("Invalid '%s' command. See 'help %s' for usage" % (self.cmdstring, self.key))
def cmd_del(self, targetname): player = self.player target = match(targetname, exact=True) if hasattr(target, 'get_owner'): target = target.get_owner() if not target: self.msg('{R[Player not found.]') return if target in player.get_friend_players(): if target in player.db.friends_list: player.db.friends_list.remove(target) if player in target.db.friends_list: target.db.friends_list.remove(player) self.msg("{G[You're no longer friends with \"%s\" D: Sadface.]" % target.key) else: if target in player.db.friends_list: player.db.friends_list.remove(target) self.msg('{G[Cancelling any outstanding friend requests with "%s".]' % targetname)
def cmd_page(self, targetstr, message, mail=False): player = self.player sender = player.get_puppet(self.sessid) or player # Identify the recipients if not targetstr: # Grab the last page that we sent to lastpages = Msg.objects.get_messages_by_sender(player, exclude_channel_messages=True) if not lastpages: self.msg('{R[Could not re-send to previous recipient: No pages sent]') lastpages.sort(cmp=lambda x, y: cmp(x.date_sent, y.date_sent)) # Extract the header header = lastpages[-1].header if not header: self.msg("{R[Could not re-send to previous recipient: Your last page didn't have any sender information]") return header = pickle.loads(header) if not 'from' in header or not 'to' in header: self.msg("{R[Could not re-send to previous recipient: Your last page didn't have any sender/recipients]") return new_targets = set(header['to']) targetstr = ','.join(new_targets) elif targetstr.lower() == '#r': # Grab the last received page lastpages = Msg.objects.get_messages_by_receiver(player) if not lastpages: self.msg('{R[Could not reply: No pages received]') lastpages.sort(cmp=lambda x, y: cmp(x.date_sent, y.date_sent)) # Extract the header header = lastpages[-1].header if not header: self.msg("{R[Could not reply: Your last page didn't have any sender information]") return header = pickle.loads(header) if not 'from' in header or not 'to' in header: self.msg("{R[Could not reply: Your last page didn't have any sender/recipients]") return new_targets = set() if targetstr == '#R': # Append the recipients of the previous messages, then strip out yourself, if applicable. new_targets |= set(header['to']) if sender.key in new_targets: new_targets.remove(sender.key) # Append the sender of the previous message, whether it's yourself or not. new_targets |= set([header['from']]) targetstr = ','.join(new_targets) # Convert the requested names into character/player objects receivers = set() for targetname in targetstr.split(','): targetname = targetname.strip() receiver = match(targetname, prioritize_players=True) if receiver: receivers.add(receiver) else: self.msg('{R[Could not find "%s", cancelling message]' % (targetname)) return # Verify that everyone is online if not mail: for receiver in receivers: if not receiver.status_online(): self.msg('{R["%s" is not currently online, cancelling message]' % (receiver.key)) self.msg("{R[If you want to send a message to someone who's offline, use '{r%s/mail{R', and they will be alerted the next time they log in]" % (self.key)) self.msg("{R[See {rhelp %s{R for details]" % (self.key)) return # Generate message header, to store the 'to' and 'from' as provided. (The recievers and sender field of the Msg object will be the player, and never a character) header = { 'from' : sender.key, 'to' : [obj.key for obj in receivers], } header = pickle.dumps(header) # Construct the message text itself. Must be called before the sender and receiver are converted into players. message = self.gen_message_text(sender, receivers, message) # Create the persistent message object receiver_players = set() for receiver in receivers: if utils.inherits_from(receiver, "src.objects.objects.Character"): receiver_players.add(receiver.get_owner()) else: receiver_players.add(receiver) msg_object = create_message(player, message, receivers=receiver_players, header=header) # If this is a 'mail' then deliver the message into their 'unseen' list. if mail: for receiver_player in receiver_players: if not receiver_player.db.msg_unseen: receiver_player.db.msg_unseen = [] receiver_player.db.msg_unseen.append(msg_object) # Tell the players they got a message. if mail: for receiver_player in receiver_players: receiver_player.msg("{Y[You've received a page mail. Use \"{y@page{Y\" to view it]") if player not in receiver_players: self.msg('{G[Page mail sent]') else: # To eliminate duplicates, produce a set() of sessid/player pairs. msg_targets = set() msg_targets.add((player, self.sessid)) for receiver in receivers: if utils.inherits_from(receiver, "src.objects.objects.Character"): msg_targets.add((receiver.player, receiver.sessid)) else: # Player for session in receiver.get_all_sessions(): msg_targets.add((receiver, session.sessid)) for msg_target in msg_targets: msg_target[0].msg('{Y[ {bPage {Y| {n%s {Y]' % (message), sessid=msg_target[1])