Fixed a lacking implementation in the Msg API. You need to re-sync the database since Msg now relies on three fields that where commented out before.

This commit is contained in:
Griatch 2010-09-04 12:18:00 +00:00
parent 72bb8ac667
commit d90c2909a2
6 changed files with 33 additions and 27 deletions

View file

@ -763,7 +763,6 @@ class CmdPage(MuxCommand):
caller.msg(string)
return
# Build a list of targets
if not self.lhs:
@ -775,10 +774,10 @@ class CmdPage(MuxCommand):
recobjs = []
for receiver in receivers:
obj = caller.search("*%s" % (receiver.lstrip('*')), global_search=True)
if not obj:
pobj = caller.search("*%s" % (receiver.lstrip('*')), global_search=True)
if not pobj:
return
recobjs.append(obj)
recobjs.append(pobj)
header = "{wPlayer{n {c%s{n {wpages:{n" % caller.key
message = self.rhs
@ -786,7 +785,7 @@ class CmdPage(MuxCommand):
msg = create.create_message(caller, message,
receivers=recobjs)
# tell the players they got a message.
for obj in recobjs:
obj.msg("%s %s" % (header, message))
caller.msg("You paged %s with '%s'." % (recobjs, message))
for pobj in recobjs:
pobj.msg("%s %s" % (header, message))
target_names = "{n,{c ".join([pobj.name for pobj in recobjs])
caller.msg("You paged {c%s{n with: '%s'." % (target_names, message))

View file

@ -66,8 +66,7 @@ class MsgManager(models.Manager):
sender = to_object(sender)
if not sender:
return None
return [msg for msg in sender.sender_set.all()
if sender not in msg.hide_from_senders.all()]
return self.filter(db_sender=sender).exclude(db_hide_from_sender=False)
def get_messages_by_receiver(self, receiver):
"""
@ -76,8 +75,9 @@ class MsgManager(models.Manager):
receiver = to_object(receiver)
if not receiver:
return None
return [msg for msg in receiver.receiver_set.all()
if receiver not in msg.hide_from_receivers.all()]
return [msg for msg in self.all()
if receiver in msg.recivers
and receiver not in msg.hide_from_receivers]
def get_messages_by_channel(self, channel):
"""
@ -86,9 +86,9 @@ class MsgManager(models.Manager):
channel = to_object(channel, objtype='channel')
if not channel:
return None
return [msg for msg in channel.channel_set.all()
if channel not in msg.hide_from_channels.all()]
return [msg for msg in self.all()
if channel in msg.channels
and channel not in msg.hide_from_channels]
#TODO add search limited by send_times
def text_search(self, searchstring, filterdict=None):

View file

@ -107,9 +107,9 @@ class Msg(SharedMemoryModel):
# Stored as a comma-separated string of dbrefs. Can be used by the
# game to mask out messages from being visible in the archive (no
# messages are actually deleted)
#db_hide_from_sender = models.BooleanField(default=False)
#db_hide_from_receivers = models.CharField(max_length=255, null=True, blank=True)
#db_hide_from_channels = models.CharField(max_length=255, null=True, blank=True)
db_hide_from_sender = models.BooleanField(default=False)
db_hide_from_receivers = models.CharField(max_length=255, null=True, blank=True)
db_hide_from_channels = models.CharField(max_length=255, null=True, blank=True)
# permission strings, separated by commas
db_permissions = models.CharField(max_length=255, blank=True)

View file

@ -4,7 +4,7 @@ Custom manager for Objects.
from django.conf import settings
from django.contrib.auth.models import User
from src.typeclasses.managers import TypedObjectManager
from src.typeclasses.managers import returns_typeclass_list
from src.typeclasses.managers import returns_typeclass, returns_typeclass_list
from src.utils import create
# Try to use a custom way to parse id-tagged multimatches.
@ -62,17 +62,23 @@ class ObjectManager(TypedObjectManager):
# ObjectManager Get methods
#
@returns_typeclass_list
@returns_typeclass
def get_object_with_user(self, user):
"""
Matches objects with obj.player.user matching the argument.
Both an user object and a user id may be supplied.
A player<->user is a one-to-relationship, so this always
returns just one result or None.
user - mayb be a user object or user id.
"""
try:
uid = int(user)
except TypeError:
uid = user.id
return self.filter(db_player__user__id=uid)
uid = user.id
try:
return self.get(db_player__user__id=uid)
except Exception:
return None
# This returns typeclass since get_object_with_user and get_dbref does.
def player_name_search(self, search_string):
@ -273,7 +279,7 @@ class ObjectManager(TypedObjectManager):
player_string = ostring.lstrip("*")
player_match = self.player_name_search(player_string)
if player_match is not None:
return [player_match]
return [player_match]
if global_search or not location:
# search all objects

View file

@ -450,6 +450,7 @@ class ObjectDB(TypedObject):
results = ObjectDB.objects.object_search(self, ostring,
global_search,
attribute_name)
if ignore_errors:
return results
return HANDLE_SEARCH_ERRORS(self, ostring, results, global_search)

View file

@ -140,9 +140,9 @@ class SessionProtocol(StatefulTelnetProtocol):
character = ObjectDB.objects.get_object_with_user(self.uid)
if not character:
string = "No character match for session uid: %s" % self.uid
logger.log_errmsg(string)
return None
return character[0]
logger.log_errmsg(string)
else:
return character
return None
def execute_cmd(self, raw_string):