Clean up Msg objects
This commit is contained in:
parent
3218d74381
commit
e38604ab02
3 changed files with 89 additions and 96 deletions
26
evennia/comms/migrations/0020_auto_20210514_2210.py
Normal file
26
evennia/comms/migrations/0020_auto_20210514_2210.py
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
# Generated by Django 2.2.16 on 2021-05-14 22:10
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('comms', '0019_auto_20210514_2032'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='msg',
|
||||||
|
name='db_hide_from_channels',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='msg',
|
||||||
|
name='db_receivers_channels',
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='msg',
|
||||||
|
name='db_receiver_external',
|
||||||
|
field=models.CharField(blank=True, db_index=True, help_text='identifier for single external receiver, for use with receivers without a database existence.', max_length=1024, null=True, verbose_name='external receiver'),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -53,17 +53,16 @@ class Msg(SharedMemoryModel):
|
||||||
- db_sender_accounts: Account senders
|
- db_sender_accounts: Account senders
|
||||||
- db_sender_objects: Object senders
|
- db_sender_objects: Object senders
|
||||||
- db_sender_scripts: Script senders
|
- db_sender_scripts: Script senders
|
||||||
- db_sender_external: External senders (defined as string names)
|
- db_sender_external: External sender (defined as string name)
|
||||||
- db_receivers_accounts: Receiving accounts
|
- db_receivers_accounts: Receiving accounts
|
||||||
- db_receivers_objects: Receiving objects
|
- db_receivers_objects: Receiving objects
|
||||||
- db_receivers_scripts: Receiveing scripts
|
- db_receivers_scripts: Receiveing scripts
|
||||||
- db_receivers_channels: Receiving channels
|
- db_receiver_external: External sender (defined as string name)
|
||||||
- db_header: Header text
|
- db_header: Header text
|
||||||
- db_message: The actual message text
|
- db_message: The actual message text
|
||||||
- db_date_created: time message was created / sent
|
- db_date_created: time message was created / sent
|
||||||
- db_hide_from_sender: bool if message should be hidden from sender
|
- db_hide_from_sender: bool if message should be hidden from sender
|
||||||
- db_hide_from_receivers: list of receiver objects to hide message from
|
- db_hide_from_receivers: list of receiver objects to hide message from
|
||||||
- db_hide_from_channels: list of channels objects to hide message from
|
|
||||||
- db_lock_storage: Internal storage of lock strings.
|
- db_lock_storage: Internal storage of lock strings.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
@ -75,9 +74,6 @@ class Msg(SharedMemoryModel):
|
||||||
# These databse fields are all set using their corresponding properties,
|
# These databse fields are all set using their corresponding properties,
|
||||||
# named same as the field, but withtout the db_* prefix.
|
# named same as the field, but withtout the db_* prefix.
|
||||||
|
|
||||||
# Sender is either an account, an object or an external sender, like
|
|
||||||
# an IRC channel; normally there is only one, but if co-modification of
|
|
||||||
# a message is allowed, there may be more than one "author"
|
|
||||||
db_sender_accounts = models.ManyToManyField(
|
db_sender_accounts = models.ManyToManyField(
|
||||||
"accounts.AccountDB",
|
"accounts.AccountDB",
|
||||||
related_name="sender_account_set",
|
related_name="sender_account_set",
|
||||||
|
|
@ -109,9 +105,7 @@ class Msg(SharedMemoryModel):
|
||||||
help_text="identifier for external sender, for example a sender over an "
|
help_text="identifier for external sender, for example a sender over an "
|
||||||
"IRC connection (i.e. someone who doesn't have an exixtence in-game).",
|
"IRC connection (i.e. someone who doesn't have an exixtence in-game).",
|
||||||
)
|
)
|
||||||
# The destination objects of this message. Stored as a
|
|
||||||
# comma-separated string of object dbrefs. Can be defined along
|
|
||||||
# with channels below.
|
|
||||||
db_receivers_accounts = models.ManyToManyField(
|
db_receivers_accounts = models.ManyToManyField(
|
||||||
"accounts.AccountDB",
|
"accounts.AccountDB",
|
||||||
related_name="receiver_account_set",
|
related_name="receiver_account_set",
|
||||||
|
|
@ -131,8 +125,15 @@ class Msg(SharedMemoryModel):
|
||||||
blank=True,
|
blank=True,
|
||||||
help_text="script_receivers",
|
help_text="script_receivers",
|
||||||
)
|
)
|
||||||
db_receivers_channels = models.ManyToManyField(
|
|
||||||
"ChannelDB", related_name="channel_set", blank=True, help_text="channel recievers"
|
db_receiver_external = models.CharField(
|
||||||
|
"external receiver",
|
||||||
|
max_length=1024,
|
||||||
|
null=True,
|
||||||
|
blank=True,
|
||||||
|
db_index=True,
|
||||||
|
help_text="identifier for single external receiver, for use with "
|
||||||
|
"receivers without a database existence."
|
||||||
)
|
)
|
||||||
|
|
||||||
# header could be used for meta-info about the message if your system needs
|
# header could be used for meta-info about the message if your system needs
|
||||||
|
|
@ -149,7 +150,7 @@ class Msg(SharedMemoryModel):
|
||||||
"locks", blank=True, help_text="access locks on this message."
|
"locks", blank=True, help_text="access locks on this message."
|
||||||
)
|
)
|
||||||
|
|
||||||
# these can be used to filter/hide a given message from supplied objects/accounts/channels
|
# these can be used to filter/hide a given message from supplied objects/accounts
|
||||||
db_hide_from_accounts = models.ManyToManyField(
|
db_hide_from_accounts = models.ManyToManyField(
|
||||||
"accounts.AccountDB", related_name="hide_from_accounts_set", blank=True
|
"accounts.AccountDB", related_name="hide_from_accounts_set", blank=True
|
||||||
)
|
)
|
||||||
|
|
@ -157,10 +158,6 @@ class Msg(SharedMemoryModel):
|
||||||
db_hide_from_objects = models.ManyToManyField(
|
db_hide_from_objects = models.ManyToManyField(
|
||||||
"objects.ObjectDB", related_name="hide_from_objects_set", blank=True
|
"objects.ObjectDB", related_name="hide_from_objects_set", blank=True
|
||||||
)
|
)
|
||||||
# NOTE: deprecated in 1.0. Not used for channels anymore
|
|
||||||
db_hide_from_channels = models.ManyToManyField(
|
|
||||||
"ChannelDB", related_name="hide_from_channels_set", blank=True
|
|
||||||
)
|
|
||||||
|
|
||||||
db_tags = models.ManyToManyField(
|
db_tags = models.ManyToManyField(
|
||||||
Tag,
|
Tag,
|
||||||
|
|
@ -172,10 +169,6 @@ class Msg(SharedMemoryModel):
|
||||||
objects = managers.MsgManager()
|
objects = managers.MsgManager()
|
||||||
_is_deleted = False
|
_is_deleted = False
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
SharedMemoryModel.__init__(self, *args, **kwargs)
|
|
||||||
self.extra_senders = []
|
|
||||||
|
|
||||||
class Meta(object):
|
class Meta(object):
|
||||||
"Define Django meta options"
|
"Define Django meta options"
|
||||||
verbose_name = "Msg"
|
verbose_name = "Msg"
|
||||||
|
|
@ -196,26 +189,24 @@ class Msg(SharedMemoryModel):
|
||||||
# value = self.attr and del self.attr respectively (where self
|
# value = self.attr and del self.attr respectively (where self
|
||||||
# is the object in question).
|
# is the object in question).
|
||||||
|
|
||||||
# sender property (wraps db_sender_*)
|
@property
|
||||||
# @property
|
def senders(self):
|
||||||
def __senders_get(self):
|
"Getter. Allows for value = self.senders"
|
||||||
"Getter. Allows for value = self.sender"
|
|
||||||
return (
|
return (
|
||||||
list(self.db_sender_accounts.all())
|
list(self.db_sender_accounts.all())
|
||||||
+ list(self.db_sender_objects.all())
|
+ list(self.db_sender_objects.all())
|
||||||
+ list(self.db_sender_scripts.all())
|
+ list(self.db_sender_scripts.all())
|
||||||
+ self.extra_senders
|
+ [self.db_sender_external]
|
||||||
)
|
)
|
||||||
|
|
||||||
# @sender.setter
|
@senders.setter
|
||||||
def __senders_set(self, senders):
|
def senders(self, senders):
|
||||||
"Setter. Allows for self.sender = value"
|
"Setter. Allows for self.sender = value"
|
||||||
for sender in make_iter(senders):
|
for sender in make_iter(senders):
|
||||||
if not sender:
|
if not sender:
|
||||||
continue
|
continue
|
||||||
if isinstance(sender, str):
|
if isinstance(sender, str):
|
||||||
self.db_sender_external = sender
|
self.db_sender_external = sender
|
||||||
self.extra_senders.append(sender)
|
|
||||||
self.save(update_fields=["db_sender_external"])
|
self.save(update_fields=["db_sender_external"])
|
||||||
continue
|
continue
|
||||||
if not hasattr(sender, "__dbclass__"):
|
if not hasattr(sender, "__dbclass__"):
|
||||||
|
|
@ -228,32 +219,32 @@ class Msg(SharedMemoryModel):
|
||||||
elif clsname == "ScriptDB":
|
elif clsname == "ScriptDB":
|
||||||
self.db_sender_scripts.add(sender)
|
self.db_sender_scripts.add(sender)
|
||||||
|
|
||||||
# @sender.deleter
|
@senders.deleter
|
||||||
def __senders_del(self):
|
def senders(self):
|
||||||
"Deleter. Clears all senders"
|
"Deleter. Clears all senders"
|
||||||
self.db_sender_accounts.clear()
|
self.db_sender_accounts.clear()
|
||||||
self.db_sender_objects.clear()
|
self.db_sender_objects.clear()
|
||||||
self.db_sender_scripts.clear()
|
self.db_sender_scripts.clear()
|
||||||
self.db_sender_external = ""
|
self.db_sender_external = ""
|
||||||
self.extra_senders = []
|
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
senders = property(__senders_get, __senders_set, __senders_del)
|
|
||||||
|
|
||||||
def remove_sender(self, senders):
|
def remove_sender(self, senders):
|
||||||
"""
|
"""
|
||||||
Remove a single sender or a list of senders.
|
Remove a single sender or a list of senders.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
senders (Account, Object, str or list): Senders to remove.
|
senders (Account, Object, str or list): Senders to remove.
|
||||||
|
If a string, removes the external sender.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
if isinstance(senders, str):
|
||||||
|
self.db_sender_external = ""
|
||||||
|
self.save(update_fields=["db_sender_external"])
|
||||||
|
return
|
||||||
|
|
||||||
for sender in make_iter(senders):
|
for sender in make_iter(senders):
|
||||||
if not sender:
|
if not sender:
|
||||||
continue
|
continue
|
||||||
if isinstance(sender, str):
|
|
||||||
self.db_sender_external = ""
|
|
||||||
self.save(update_fields=["db_sender_external"])
|
|
||||||
if not hasattr(sender, "__dbclass__"):
|
if not hasattr(sender, "__dbclass__"):
|
||||||
raise ValueError("This is a not a typeclassed object!")
|
raise ValueError("This is a not a typeclassed object!")
|
||||||
clsname = sender.__dbclass__.__name__
|
clsname = sender.__dbclass__.__name__
|
||||||
|
|
@ -268,21 +259,29 @@ class Msg(SharedMemoryModel):
|
||||||
def receivers(self):
|
def receivers(self):
|
||||||
"""
|
"""
|
||||||
Getter. Allows for value = self.receivers.
|
Getter. Allows for value = self.receivers.
|
||||||
Returns four lists of receivers: accounts, objects, scripts and channels.
|
Returns four lists of receivers: accounts, objects, scripts and
|
||||||
|
external_receivers.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
return (
|
return (
|
||||||
list(self.db_receivers_accounts.all())
|
list(self.db_receivers_accounts.all())
|
||||||
+ list(self.db_receivers_objects.all())
|
+ list(self.db_receivers_objects.all())
|
||||||
+ list(self.db_receivers_scripts.all())
|
+ list(self.db_receivers_scripts.all())
|
||||||
+ list(self.db_receivers_channels.all())
|
+ [self.db_receiver_external]
|
||||||
)
|
)
|
||||||
|
|
||||||
@receivers.setter
|
@receivers.setter
|
||||||
def receivers(self, receivers):
|
def receivers(self, receivers):
|
||||||
"""
|
"""
|
||||||
Setter. Allows for self.receivers = value.
|
Setter. Allows for self.receivers = value. This appends a new receiver
|
||||||
This appends a new receiver to the message.
|
to the message. If a string, replaces an external receiver.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
if isinstance(receivers, str):
|
||||||
|
self.db_receiver_external = receivers
|
||||||
|
self.save(update_fields=['db_receiver_external'])
|
||||||
|
return
|
||||||
|
|
||||||
for receiver in make_iter(receivers):
|
for receiver in make_iter(receivers):
|
||||||
if not receiver:
|
if not receiver:
|
||||||
continue
|
continue
|
||||||
|
|
@ -295,8 +294,6 @@ class Msg(SharedMemoryModel):
|
||||||
self.db_receivers_accounts.add(receiver)
|
self.db_receivers_accounts.add(receiver)
|
||||||
elif clsname == "ScriptDB":
|
elif clsname == "ScriptDB":
|
||||||
self.db_receivers_scripts.add(receiver)
|
self.db_receivers_scripts.add(receiver)
|
||||||
elif clsname == "ChannelDB":
|
|
||||||
self.db_receivers_channels.add(receiver)
|
|
||||||
|
|
||||||
@receivers.deleter
|
@receivers.deleter
|
||||||
def receivers(self):
|
def receivers(self):
|
||||||
|
|
@ -304,22 +301,28 @@ class Msg(SharedMemoryModel):
|
||||||
self.db_receivers_accounts.clear()
|
self.db_receivers_accounts.clear()
|
||||||
self.db_receivers_objects.clear()
|
self.db_receivers_objects.clear()
|
||||||
self.db_receivers_scripts.clear()
|
self.db_receivers_scripts.clear()
|
||||||
self.db_receivers_channels.clear()
|
self.db_receiver_external = ""
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
|
|
||||||
def remove_receiver(self, receivers):
|
def remove_receiver(self, receivers):
|
||||||
"""
|
"""
|
||||||
Remove a single receiver or a list of receivers.
|
Remove a single receiver, a list of receivers, or a single extral receiver.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
receivers (Account, Object, Script, Channel or list): Receiver to remove.
|
receivers (Account, Object, Script, list or str): Receiver
|
||||||
|
to remove. A string removes the external receiver.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
if isinstance(receivers, str):
|
||||||
|
self.db_receiver_external = ""
|
||||||
|
self.save(update_fields="db_receiver_external")
|
||||||
|
return
|
||||||
|
|
||||||
for receiver in make_iter(receivers):
|
for receiver in make_iter(receivers):
|
||||||
if not receiver:
|
if not receiver:
|
||||||
continue
|
continue
|
||||||
if not hasattr(receiver, "__dbclass__"):
|
elif not hasattr(receiver, "__dbclass__"):
|
||||||
raise ValueError("This is a not a typeclassed object!")
|
raise ValueError("This is a not a typeclassed object!")
|
||||||
clsname = receiver.__dbclass__.__name__
|
clsname = receiver.__dbclass__.__name__
|
||||||
if clsname == "ObjectDB":
|
if clsname == "ObjectDB":
|
||||||
|
|
@ -328,41 +331,17 @@ class Msg(SharedMemoryModel):
|
||||||
self.db_receivers_accounts.remove(receiver)
|
self.db_receivers_accounts.remove(receiver)
|
||||||
elif clsname == "ScriptDB":
|
elif clsname == "ScriptDB":
|
||||||
self.db_receivers_scripts.remove(receiver)
|
self.db_receivers_scripts.remove(receiver)
|
||||||
elif clsname == "ChannelDB":
|
|
||||||
self.db_receivers_channels.remove(receiver)
|
|
||||||
|
|
||||||
# channels property
|
|
||||||
# @property
|
|
||||||
def __channels_get(self):
|
|
||||||
"Getter. Allows for value = self.channels. Returns a list of channels."
|
|
||||||
return self.db_receivers_channels.all()
|
|
||||||
|
|
||||||
# @channels.setter
|
|
||||||
def __channels_set(self, value):
|
|
||||||
"""
|
|
||||||
Setter. Allows for self.channels = value.
|
|
||||||
Requires a channel to be added.
|
|
||||||
"""
|
|
||||||
for val in (v for v in make_iter(value) if v):
|
|
||||||
self.db_receivers_channels.add(val)
|
|
||||||
|
|
||||||
# @channels.deleter
|
|
||||||
def __channels_del(self):
|
|
||||||
"Deleter. Allows for del self.channels"
|
|
||||||
self.db_receivers_channels.clear()
|
|
||||||
self.save()
|
|
||||||
|
|
||||||
channels = property(__channels_get, __channels_set, __channels_del)
|
|
||||||
|
|
||||||
def __hide_from_get(self):
|
def __hide_from_get(self):
|
||||||
"""
|
"""
|
||||||
Getter. Allows for value = self.hide_from.
|
Getter. Allows for value = self.hide_from.
|
||||||
Returns 3 lists of accounts, objects and channels
|
Returns two lists of accounts and objects.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
return (
|
return (
|
||||||
self.db_hide_from_accounts.all(),
|
self.db_hide_from_accounts.all(),
|
||||||
self.db_hide_from_objects.all(),
|
self.db_hide_from_objects.all(),
|
||||||
self.db_hide_from_channels.all(),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# @hide_from_sender.setter
|
# @hide_from_sender.setter
|
||||||
|
|
@ -378,15 +357,12 @@ class Msg(SharedMemoryModel):
|
||||||
self.db_hide_from_accounts.add(hider.__dbclass__)
|
self.db_hide_from_accounts.add(hider.__dbclass__)
|
||||||
elif clsname == "ObjectDB":
|
elif clsname == "ObjectDB":
|
||||||
self.db_hide_from_objects.add(hider.__dbclass__)
|
self.db_hide_from_objects.add(hider.__dbclass__)
|
||||||
elif clsname == "ChannelDB":
|
|
||||||
self.db_hide_from_channels.add(hider.__dbclass__)
|
|
||||||
|
|
||||||
# @hide_from_sender.deleter
|
# @hide_from_sender.deleter
|
||||||
def __hide_from_del(self):
|
def __hide_from_del(self):
|
||||||
"Deleter. Allows for del self.hide_from_senders"
|
"Deleter. Allows for del self.hide_from_senders"
|
||||||
self.db_hide_from_accounts.clear()
|
self.db_hide_from_accounts.clear()
|
||||||
self.db_hide_from_objects.clear()
|
self.db_hide_from_objects.clear()
|
||||||
self.db_hide_from_channels.clear()
|
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
hide_from = property(__hide_from_get, __hide_from_set, __hide_from_del)
|
hide_from = property(__hide_from_get, __hide_from_set, __hide_from_del)
|
||||||
|
|
@ -398,11 +374,7 @@ class Msg(SharedMemoryModel):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
"This handles what is shown when e.g. printing the message"
|
"This handles what is shown when e.g. printing the message"
|
||||||
senders = ",".join(getattr(obj, "key", str(obj)) for obj in self.senders)
|
senders = ",".join(getattr(obj, "key", str(obj)) for obj in self.senders)
|
||||||
|
receivers = ",".join(getattr(obj, "key", str(obj)) for obj in self.receivers)
|
||||||
receivers = ",".join(
|
|
||||||
["[%s]" % getattr(obj, "key", str(obj)) for obj in self.channels]
|
|
||||||
+ [getattr(obj, "key", str(obj)) for obj in self.receivers]
|
|
||||||
)
|
|
||||||
return "%s->%s: %s" % (senders, receivers, crop(self.message, width=40))
|
return "%s->%s: %s" % (senders, receivers, crop(self.message, width=40))
|
||||||
|
|
||||||
def access(self, accessing_obj, access_type="read", default=False):
|
def access(self, accessing_obj, access_type="read", default=False):
|
||||||
|
|
@ -440,7 +412,6 @@ class TempMsg(object):
|
||||||
self,
|
self,
|
||||||
senders=None,
|
senders=None,
|
||||||
receivers=None,
|
receivers=None,
|
||||||
channels=None,
|
|
||||||
message="",
|
message="",
|
||||||
header="",
|
header="",
|
||||||
type="",
|
type="",
|
||||||
|
|
@ -452,18 +423,16 @@ class TempMsg(object):
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
senders (any or list, optional): Senders of the message.
|
senders (any or list, optional): Senders of the message.
|
||||||
receivers (Account, Object, Channel or list, optional): Receivers of this message.
|
receivers (Account, Object, Script or list, optional): Receivers of this message.
|
||||||
channels (Channel or list, optional): Channels to send to.
|
|
||||||
message (str, optional): Message to send.
|
message (str, optional): Message to send.
|
||||||
header (str, optional): Header of message.
|
header (str, optional): Header of message.
|
||||||
type (str, optional): Message class, if any.
|
type (str, optional): Message class, if any.
|
||||||
lockstring (str, optional): Lock for the message.
|
lockstring (str, optional): Lock for the message.
|
||||||
hide_from (Account, Object, Channel or list, optional): Entities to hide this message from.
|
hide_from (Account, Object, or list, optional): Entities to hide this message from.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
self.senders = senders and make_iter(senders) or []
|
self.senders = senders and make_iter(senders) or []
|
||||||
self.receivers = receivers and make_iter(receivers) or []
|
self.receivers = receivers and make_iter(receivers) or []
|
||||||
self.channels = channels and make_iter(channels) or []
|
|
||||||
self.type = type
|
self.type = type
|
||||||
self.header = header
|
self.header = header
|
||||||
self.message = message
|
self.message = message
|
||||||
|
|
@ -480,9 +449,7 @@ class TempMsg(object):
|
||||||
This handles what is shown when e.g. printing the message.
|
This handles what is shown when e.g. printing the message.
|
||||||
"""
|
"""
|
||||||
senders = ",".join(obj.key for obj in self.senders)
|
senders = ",".join(obj.key for obj in self.senders)
|
||||||
receivers = ",".join(
|
receivers = ",".join(obj.key for obj in self.receivers)
|
||||||
["[%s]" % obj.key for obj in self.channels] + [obj.key for obj in self.receivers]
|
|
||||||
)
|
|
||||||
return "%s->%s: %s" % (senders, receivers, crop(self.message, width=40))
|
return "%s->%s: %s" % (senders, receivers, crop(self.message, width=40))
|
||||||
|
|
||||||
def remove_sender(self, sender):
|
def remove_sender(self, sender):
|
||||||
|
|
@ -504,7 +471,7 @@ class TempMsg(object):
|
||||||
Remove a receiver or a list of receivers
|
Remove a receiver or a list of receivers
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
receiver (Object, Account, Channel, str or list): Receivers to remove.
|
receiver (Object, Account, Script, str or list): Receivers to remove.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
for o in make_iter(receiver):
|
for o in make_iter(receiver):
|
||||||
|
|
|
||||||
|
|
@ -373,17 +373,17 @@ def create_message(
|
||||||
message (str): Text with the message. Eventual headers, titles
|
message (str): Text with the message. Eventual headers, titles
|
||||||
etc should all be included in this text string. Formatting
|
etc should all be included in this text string. Formatting
|
||||||
will be retained.
|
will be retained.
|
||||||
receivers (Object, Account or list): An Account/Object to send
|
receivers (Object, Account, Script, str or list): An Account/Object to send
|
||||||
to, or a list of them.
|
to, or a list of them. If a string, it's an identifier for an external
|
||||||
|
receiver.
|
||||||
locks (str): Lock definition string.
|
locks (str): Lock definition string.
|
||||||
tags (list): A list of tags or tuples `(tag, category)`.
|
tags (list): A list of tags or tuples `(tag, category)`.
|
||||||
header (str): Mime-type or other optional information for the message
|
header (str): Mime-type or other optional information for the message
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
The Comm system is created very open-ended, so it's fully possible
|
The Comm system is created to be very open-ended, so it's fully
|
||||||
to let a message both go to several channels and to several
|
possible to let a message both go several receivers at the same time,
|
||||||
receivers at the same time, it's up to the command definitions to
|
it's up to the command definitions to limit this as desired.
|
||||||
limit this as desired.
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if 'channels' in kwargs:
|
if 'channels' in kwargs:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue