mirror of
https://github.com/evennia/evennia.git
synced 2026-03-29 20:17:16 +02:00
836 lines
No EOL
88 KiB
HTML
836 lines
No EOL
88 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>evennia.comms.models — Evennia 1.0-dev documentation</title>
|
|
<link rel="stylesheet" href="../../../_static/nature.css" type="text/css" />
|
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
|
<script id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
|
<script src="../../../_static/jquery.js"></script>
|
|
<script src="../../../_static/underscore.js"></script>
|
|
<script src="../../../_static/doctools.js"></script>
|
|
<script src="../../../_static/language_data.js"></script>
|
|
<link rel="shortcut icon" href="../../../_static/favicon.ico"/>
|
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
|
<link rel="search" title="Search" href="../../../search.html" />
|
|
</head><body>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../../genindex.html" title="General Index"
|
|
accesskey="I">index</a></li>
|
|
<li class="right" >
|
|
<a href="../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0-dev</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">evennia.comms.models</a></li>
|
|
</ul>
|
|
<div class="develop">develop branch</div>
|
|
</div>
|
|
|
|
<div class="document">
|
|
<div class="documentwrapper">
|
|
<div class="bodywrapper">
|
|
<div class="body" role="main">
|
|
|
|
<h1>Source code for evennia.comms.models</h1><div class="highlight"><pre>
|
|
<span></span><span class="sd">"""</span>
|
|
<span class="sd">Models for the in-game communication system.</span>
|
|
|
|
<span class="sd">The comm system could take the form of channels, but can also be</span>
|
|
<span class="sd">adopted for storing tells or in-game mail.</span>
|
|
|
|
<span class="sd">The comsystem's main component is the Message (Msg), which carries the</span>
|
|
<span class="sd">actual information between two parties. Msgs are stored in the</span>
|
|
<span class="sd">database and usually not deleted. A Msg always have one sender (a</span>
|
|
<span class="sd">user), but can have any number targets, both users and channels.</span>
|
|
|
|
<span class="sd">For non-persistent (and slightly faster) use one can also use the</span>
|
|
<span class="sd">TempMsg, which mimics the Msg API but without actually saving to the</span>
|
|
<span class="sd">database.</span>
|
|
|
|
<span class="sd">Channels are central objects that act as targets for Msgs. Accounts can</span>
|
|
<span class="sd">connect to channels by use of a ChannelConnect object (this object is</span>
|
|
<span class="sd">necessary to easily be able to delete connections on the fly).</span>
|
|
<span class="sd">"""</span>
|
|
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
|
|
<span class="kn">from</span> <span class="nn">django.utils</span> <span class="kn">import</span> <span class="n">timezone</span>
|
|
<span class="kn">from</span> <span class="nn">django.db</span> <span class="kn">import</span> <span class="n">models</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.typeclasses.models</span> <span class="kn">import</span> <span class="n">TypedObject</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.typeclasses.tags</span> <span class="kn">import</span> <span class="n">Tag</span><span class="p">,</span> <span class="n">TagHandler</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.idmapper.models</span> <span class="kn">import</span> <span class="n">SharedMemoryModel</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.comms</span> <span class="kn">import</span> <span class="n">managers</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.locks.lockhandler</span> <span class="kn">import</span> <span class="n">LockHandler</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">crop</span><span class="p">,</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">lazy_property</span>
|
|
|
|
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"Msg"</span><span class="p">,</span> <span class="s2">"TempMsg"</span><span class="p">,</span> <span class="s2">"ChannelDB"</span><span class="p">)</span>
|
|
|
|
|
|
<span class="n">_GA</span> <span class="o">=</span> <span class="nb">object</span><span class="o">.</span><span class="fm">__getattribute__</span>
|
|
<span class="n">_SA</span> <span class="o">=</span> <span class="nb">object</span><span class="o">.</span><span class="fm">__setattr__</span>
|
|
<span class="n">_DA</span> <span class="o">=</span> <span class="nb">object</span><span class="o">.</span><span class="fm">__delattr__</span>
|
|
|
|
<span class="n">_CHANNELHANDLER</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
|
|
<span class="c1"># ------------------------------------------------------------</span>
|
|
<span class="c1">#</span>
|
|
<span class="c1"># Msg</span>
|
|
<span class="c1">#</span>
|
|
<span class="c1"># ------------------------------------------------------------</span>
|
|
|
|
|
|
<div class="viewcode-block" id="Msg"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.admin.Msg">[docs]</a><span class="k">class</span> <span class="nc">Msg</span><span class="p">(</span><span class="n">SharedMemoryModel</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> A single message. This model describes all ooc messages</span>
|
|
<span class="sd"> sent in-game, both to channels and between accounts.</span>
|
|
|
|
<span class="sd"> The Msg class defines the following database fields (all</span>
|
|
<span class="sd"> accessed via specific handler methods):</span>
|
|
|
|
<span class="sd"> - db_sender_accounts: Account senders</span>
|
|
<span class="sd"> - db_sender_objects: Object senders</span>
|
|
<span class="sd"> - db_sender_scripts: Script senders</span>
|
|
<span class="sd"> - db_sender_external: External senders (defined as string names)</span>
|
|
<span class="sd"> - db_receivers_accounts: Receiving accounts</span>
|
|
<span class="sd"> - db_receivers_objects: Receiving objects</span>
|
|
<span class="sd"> - db_receivers_scripts: Receiveing scripts</span>
|
|
<span class="sd"> - db_receivers_channels: Receiving channels</span>
|
|
<span class="sd"> - db_header: Header text</span>
|
|
<span class="sd"> - db_message: The actual message text</span>
|
|
<span class="sd"> - db_date_created: time message was created / sent</span>
|
|
<span class="sd"> - db_hide_from_sender: bool if message should be hidden from sender</span>
|
|
<span class="sd"> - db_hide_from_receivers: list of receiver objects to hide message from</span>
|
|
<span class="sd"> - db_hide_from_channels: list of channels objects to hide message from</span>
|
|
<span class="sd"> - db_lock_storage: Internal storage of lock strings.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="c1">#</span>
|
|
<span class="c1"># Msg database model setup</span>
|
|
<span class="c1">#</span>
|
|
<span class="c1">#</span>
|
|
<span class="c1"># These databse fields are all set using their corresponding properties,</span>
|
|
<span class="c1"># named same as the field, but withtout the db_* prefix.</span>
|
|
|
|
<span class="c1"># Sender is either an account, an object or an external sender, like</span>
|
|
<span class="c1"># an IRC channel; normally there is only one, but if co-modification of</span>
|
|
<span class="c1"># a message is allowed, there may be more than one "author"</span>
|
|
<span class="n">db_sender_accounts</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
|
|
<span class="s2">"accounts.AccountDB"</span><span class="p">,</span>
|
|
<span class="n">related_name</span><span class="o">=</span><span class="s2">"sender_account_set"</span><span class="p">,</span>
|
|
<span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="n">verbose_name</span><span class="o">=</span><span class="s2">"sender(account)"</span><span class="p">,</span>
|
|
<span class="n">db_index</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">db_sender_objects</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
|
|
<span class="s2">"objects.ObjectDB"</span><span class="p">,</span>
|
|
<span class="n">related_name</span><span class="o">=</span><span class="s2">"sender_object_set"</span><span class="p">,</span>
|
|
<span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="n">verbose_name</span><span class="o">=</span><span class="s2">"sender(object)"</span><span class="p">,</span>
|
|
<span class="n">db_index</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="n">db_sender_scripts</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
|
|
<span class="s2">"scripts.ScriptDB"</span><span class="p">,</span>
|
|
<span class="n">related_name</span><span class="o">=</span><span class="s2">"sender_script_set"</span><span class="p">,</span>
|
|
<span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="n">verbose_name</span><span class="o">=</span><span class="s2">"sender(script)"</span><span class="p">,</span>
|
|
<span class="n">db_index</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="n">db_sender_external</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span>
|
|
<span class="s2">"external sender"</span><span class="p">,</span>
|
|
<span class="n">max_length</span><span class="o">=</span><span class="mi">255</span><span class="p">,</span>
|
|
<span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="n">db_index</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="n">help_text</span><span class="o">=</span><span class="s2">"identifier for external sender, for example a sender over an "</span>
|
|
<span class="s2">"IRC connection (i.e. someone who doesn't have an exixtence in-game)."</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="c1"># The destination objects of this message. Stored as a</span>
|
|
<span class="c1"># comma-separated string of object dbrefs. Can be defined along</span>
|
|
<span class="c1"># with channels below.</span>
|
|
<span class="n">db_receivers_accounts</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
|
|
<span class="s2">"accounts.AccountDB"</span><span class="p">,</span>
|
|
<span class="n">related_name</span><span class="o">=</span><span class="s2">"receiver_account_set"</span><span class="p">,</span>
|
|
<span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="n">help_text</span><span class="o">=</span><span class="s2">"account receivers"</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">db_receivers_objects</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
|
|
<span class="s2">"objects.ObjectDB"</span><span class="p">,</span>
|
|
<span class="n">related_name</span><span class="o">=</span><span class="s2">"receiver_object_set"</span><span class="p">,</span>
|
|
<span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="n">help_text</span><span class="o">=</span><span class="s2">"object receivers"</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="n">db_receivers_scripts</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
|
|
<span class="s2">"scripts.ScriptDB"</span><span class="p">,</span>
|
|
<span class="n">related_name</span><span class="o">=</span><span class="s2">"receiver_script_set"</span><span class="p">,</span>
|
|
<span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="n">help_text</span><span class="o">=</span><span class="s2">"script_receivers"</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="n">db_receivers_channels</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
|
|
<span class="s2">"ChannelDB"</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s2">"channel_set"</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help_text</span><span class="o">=</span><span class="s2">"channel recievers"</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># header could be used for meta-info about the message if your system needs</span>
|
|
<span class="c1"># it, or as a separate store for the mail subject line maybe.</span>
|
|
<span class="n">db_header</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="s2">"header"</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="c1"># the message body itself</span>
|
|
<span class="n">db_message</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="s2">"message"</span><span class="p">)</span>
|
|
<span class="c1"># send date</span>
|
|
<span class="n">db_date_created</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span>
|
|
<span class="s2">"date sent"</span><span class="p">,</span> <span class="n">editable</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">auto_now_add</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">db_index</span><span class="o">=</span><span class="kc">True</span>
|
|
<span class="p">)</span>
|
|
<span class="c1"># lock storage</span>
|
|
<span class="n">db_lock_storage</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span>
|
|
<span class="s2">"locks"</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help_text</span><span class="o">=</span><span class="s2">"access locks on this message."</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># these can be used to filter/hide a given message from supplied objects/accounts/channels</span>
|
|
<span class="n">db_hide_from_accounts</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
|
|
<span class="s2">"accounts.AccountDB"</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s2">"hide_from_accounts_set"</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">db_hide_from_objects</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
|
|
<span class="s2">"objects.ObjectDB"</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s2">"hide_from_objects_set"</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span>
|
|
<span class="p">)</span>
|
|
<span class="n">db_hide_from_channels</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
|
|
<span class="s2">"ChannelDB"</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s2">"hide_from_channels_set"</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">db_tags</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
|
|
<span class="n">Tag</span><span class="p">,</span>
|
|
<span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="n">help_text</span><span class="o">=</span><span class="s2">"tags on this message. Tags are simple string markers to identify, group and alias messages."</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># Database manager</span>
|
|
<span class="n">objects</span> <span class="o">=</span> <span class="n">managers</span><span class="o">.</span><span class="n">MsgManager</span><span class="p">()</span>
|
|
<span class="n">_is_deleted</span> <span class="o">=</span> <span class="kc">False</span>
|
|
|
|
<div class="viewcode-block" id="Msg.__init__"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.admin.Msg.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
<span class="n">SharedMemoryModel</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">extra_senders</span> <span class="o">=</span> <span class="p">[]</span></div>
|
|
|
|
<span class="k">class</span> <span class="nc">Meta</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="s2">"Define Django meta options"</span>
|
|
<span class="n">verbose_name</span> <span class="o">=</span> <span class="s2">"Msg"</span>
|
|
|
|
<div class="viewcode-block" id="Msg.locks"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.admin.Msg.locks">[docs]</a> <span class="nd">@lazy_property</span>
|
|
<span class="k">def</span> <span class="nf">locks</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="n">LockHandler</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
|
|
|
|
<div class="viewcode-block" id="Msg.tags"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.admin.Msg.tags">[docs]</a> <span class="nd">@lazy_property</span>
|
|
<span class="k">def</span> <span class="nf">tags</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="n">TagHandler</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
|
|
|
|
<span class="c1"># Wrapper properties to easily set database fields. These are</span>
|
|
<span class="c1"># @property decorators that allows to access these fields using</span>
|
|
<span class="c1"># normal python operations (without having to remember to save()</span>
|
|
<span class="c1"># etc). So e.g. a property 'attr' has a get/set/del decorator</span>
|
|
<span class="c1"># defined that allows the user to do self.attr = value,</span>
|
|
<span class="c1"># value = self.attr and del self.attr respectively (where self</span>
|
|
<span class="c1"># is the object in question).</span>
|
|
|
|
<span class="c1"># sender property (wraps db_sender_*)</span>
|
|
<span class="c1"># @property</span>
|
|
<span class="k">def</span> <span class="nf">__senders_get</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="s2">"Getter. Allows for value = self.sender"</span>
|
|
<span class="k">return</span> <span class="p">(</span>
|
|
<span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db_sender_accounts</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
|
|
<span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db_sender_objects</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
|
|
<span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db_sender_scripts</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
|
|
<span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">extra_senders</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># @sender.setter</span>
|
|
<span class="k">def</span> <span class="nf">__senders_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">senders</span><span class="p">):</span>
|
|
<span class="s2">"Setter. Allows for self.sender = value"</span>
|
|
<span class="k">for</span> <span class="n">sender</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">senders</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">sender</span><span class="p">:</span>
|
|
<span class="k">continue</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_sender_external</span> <span class="o">=</span> <span class="n">sender</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">extra_senders</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sender</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">update_fields</span><span class="o">=</span><span class="p">[</span><span class="s2">"db_sender_external"</span><span class="p">])</span>
|
|
<span class="k">continue</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="s2">"__dbclass__"</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"This is a not a typeclassed object!"</span><span class="p">)</span>
|
|
<span class="n">clsname</span> <span class="o">=</span> <span class="n">sender</span><span class="o">.</span><span class="n">__dbclass__</span><span class="o">.</span><span class="vm">__name__</span>
|
|
<span class="k">if</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"ObjectDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_sender_objects</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">sender</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"AccountDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_sender_accounts</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">sender</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"ScriptDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_sender_scripts</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">sender</span><span class="p">)</span>
|
|
|
|
<span class="c1"># @sender.deleter</span>
|
|
<span class="k">def</span> <span class="nf">__senders_del</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="s2">"Deleter. Clears all senders"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_sender_accounts</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_sender_objects</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_sender_scripts</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_sender_external</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">extra_senders</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
|
|
|
<span class="n">senders</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">__senders_get</span><span class="p">,</span> <span class="n">__senders_set</span><span class="p">,</span> <span class="n">__senders_del</span><span class="p">)</span>
|
|
|
|
<div class="viewcode-block" id="Msg.remove_sender"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.admin.Msg.remove_sender">[docs]</a> <span class="k">def</span> <span class="nf">remove_sender</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">senders</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Remove a single sender or a list of senders.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> senders (Account, Object, str or list): Senders to remove.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">for</span> <span class="n">sender</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">senders</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">sender</span><span class="p">:</span>
|
|
<span class="k">continue</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_sender_external</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">update_fields</span><span class="o">=</span><span class="p">[</span><span class="s2">"db_sender_external"</span><span class="p">])</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="s2">"__dbclass__"</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"This is a not a typeclassed object!"</span><span class="p">)</span>
|
|
<span class="n">clsname</span> <span class="o">=</span> <span class="n">sender</span><span class="o">.</span><span class="n">__dbclass__</span><span class="o">.</span><span class="vm">__name__</span>
|
|
<span class="k">if</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"ObjectDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_sender_objects</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">sender</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"AccountDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_sender_accounts</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">sender</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"ScriptDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_sender_accounts</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">sender</span><span class="p">)</span></div>
|
|
|
|
<span class="c1"># receivers property</span>
|
|
<span class="c1"># @property</span>
|
|
<span class="k">def</span> <span class="nf">__receivers_get</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Getter. Allows for value = self.receivers.</span>
|
|
<span class="sd"> Returns four lists of receivers: accounts, objects, scripts and channels.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="p">(</span>
|
|
<span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_accounts</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
|
|
<span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_objects</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
|
|
<span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_scripts</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
|
|
<span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_channels</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># @receivers.setter</span>
|
|
<span class="k">def</span> <span class="nf">__receivers_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">receivers</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Setter. Allows for self.receivers = value.</span>
|
|
<span class="sd"> This appends a new receiver to the message.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">for</span> <span class="n">receiver</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">receivers</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">receiver</span><span class="p">:</span>
|
|
<span class="k">continue</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">receiver</span><span class="p">,</span> <span class="s2">"__dbclass__"</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"This is a not a typeclassed object!"</span><span class="p">)</span>
|
|
<span class="n">clsname</span> <span class="o">=</span> <span class="n">receiver</span><span class="o">.</span><span class="n">__dbclass__</span><span class="o">.</span><span class="vm">__name__</span>
|
|
<span class="k">if</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"ObjectDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_objects</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">receiver</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"AccountDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_accounts</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">receiver</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"ScriptDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_scripts</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">receiver</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"ChannelDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_channels</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">receiver</span><span class="p">)</span>
|
|
|
|
<span class="c1"># @receivers.deleter</span>
|
|
<span class="k">def</span> <span class="nf">__receivers_del</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="s2">"Deleter. Clears all receivers"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_accounts</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_objects</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_scripts</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_channels</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
|
|
|
<span class="n">receivers</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">__receivers_get</span><span class="p">,</span> <span class="n">__receivers_set</span><span class="p">,</span> <span class="n">__receivers_del</span><span class="p">)</span>
|
|
|
|
<div class="viewcode-block" id="Msg.remove_receiver"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.admin.Msg.remove_receiver">[docs]</a> <span class="k">def</span> <span class="nf">remove_receiver</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">receivers</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Remove a single receiver or a list of receivers.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> receivers (Account, Object, Script, Channel or list): Receiver to remove.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">for</span> <span class="n">receiver</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">receivers</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">receiver</span><span class="p">:</span>
|
|
<span class="k">continue</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">receiver</span><span class="p">,</span> <span class="s2">"__dbclass__"</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"This is a not a typeclassed object!"</span><span class="p">)</span>
|
|
<span class="n">clsname</span> <span class="o">=</span> <span class="n">receiver</span><span class="o">.</span><span class="n">__dbclass__</span><span class="o">.</span><span class="vm">__name__</span>
|
|
<span class="k">if</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"ObjectDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_objects</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">receiver</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"AccountDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_accounts</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">receiver</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"ScriptDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_scripts</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">receiver</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"ChannelDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_channels</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">receiver</span><span class="p">)</span></div>
|
|
|
|
<span class="c1"># channels property</span>
|
|
<span class="c1"># @property</span>
|
|
<span class="k">def</span> <span class="nf">__channels_get</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="s2">"Getter. Allows for value = self.channels. Returns a list of channels."</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_channels</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
|
|
|
|
<span class="c1"># @channels.setter</span>
|
|
<span class="k">def</span> <span class="nf">__channels_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Setter. Allows for self.channels = value.</span>
|
|
<span class="sd"> Requires a channel to be added.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="p">(</span><span class="n">v</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">if</span> <span class="n">v</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_channels</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
|
|
|
|
<span class="c1"># @channels.deleter</span>
|
|
<span class="k">def</span> <span class="nf">__channels_del</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="s2">"Deleter. Allows for del self.channels"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_receivers_channels</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
|
|
|
<span class="n">channels</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">__channels_get</span><span class="p">,</span> <span class="n">__channels_set</span><span class="p">,</span> <span class="n">__channels_del</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">__hide_from_get</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Getter. Allows for value = self.hide_from.</span>
|
|
<span class="sd"> Returns 3 lists of accounts, objects and channels</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_hide_from_accounts</span><span class="o">.</span><span class="n">all</span><span class="p">(),</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_hide_from_objects</span><span class="o">.</span><span class="n">all</span><span class="p">(),</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_hide_from_channels</span><span class="o">.</span><span class="n">all</span><span class="p">(),</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># @hide_from_sender.setter</span>
|
|
<span class="k">def</span> <span class="nf">__hide_from_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hiders</span><span class="p">):</span>
|
|
<span class="s2">"Setter. Allows for self.hide_from = value. Will append to hiders"</span>
|
|
<span class="k">for</span> <span class="n">hider</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">hiders</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">hider</span><span class="p">:</span>
|
|
<span class="k">continue</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">hider</span><span class="p">,</span> <span class="s2">"__dbclass__"</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"This is a not a typeclassed object!"</span><span class="p">)</span>
|
|
<span class="n">clsname</span> <span class="o">=</span> <span class="n">hider</span><span class="o">.</span><span class="n">__dbclass__</span><span class="o">.</span><span class="vm">__name__</span>
|
|
<span class="k">if</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"AccountDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_hide_from_accounts</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">hider</span><span class="o">.</span><span class="n">__dbclass__</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"ObjectDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_hide_from_objects</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">hider</span><span class="o">.</span><span class="n">__dbclass__</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"ChannelDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_hide_from_channels</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">hider</span><span class="o">.</span><span class="n">__dbclass__</span><span class="p">)</span>
|
|
|
|
<span class="c1"># @hide_from_sender.deleter</span>
|
|
<span class="k">def</span> <span class="nf">__hide_from_del</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="s2">"Deleter. Allows for del self.hide_from_senders"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_hide_from_accounts</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_hide_from_objects</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">db_hide_from_channels</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
|
|
|
<span class="n">hide_from</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">__hide_from_get</span><span class="p">,</span> <span class="n">__hide_from_set</span><span class="p">,</span> <span class="n">__hide_from_del</span><span class="p">)</span>
|
|
|
|
<span class="c1">#</span>
|
|
<span class="c1"># Msg class methods</span>
|
|
<span class="c1">#</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="s2">"This handles what is shown when e.g. printing the message"</span>
|
|
<span class="n">senders</span> <span class="o">=</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"key"</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="p">)</span>
|
|
|
|
<span class="n">receivers</span> <span class="o">=</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
|
<span class="p">[</span><span class="s2">"[</span><span class="si">%s</span><span class="s2">]"</span> <span class="o">%</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"key"</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">channels</span><span class="p">]</span>
|
|
<span class="o">+</span> <span class="p">[</span><span class="nb">getattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"key"</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">receivers</span><span class="p">]</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">-></span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">senders</span><span class="p">,</span> <span class="n">receivers</span><span class="p">,</span> <span class="n">crop</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">message</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">40</span><span class="p">))</span>
|
|
|
|
<div class="viewcode-block" id="Msg.access"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.admin.Msg.access">[docs]</a> <span class="k">def</span> <span class="nf">access</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">accessing_obj</span><span class="p">,</span> <span class="n">access_type</span><span class="o">=</span><span class="s2">"read"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Checks lock access.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> accessing_obj (Object or Account): The object trying to gain access.</span>
|
|
<span class="sd"> access_type (str, optional): The type of lock access to check.</span>
|
|
<span class="sd"> default (bool): Fallback to use if `access_type` lock is not defined.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> result (bool): If access was granted or not.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="n">accessing_obj</span><span class="p">,</span> <span class="n">access_type</span><span class="o">=</span><span class="n">access_type</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<span class="c1"># ------------------------------------------------------------</span>
|
|
<span class="c1">#</span>
|
|
<span class="c1"># TempMsg</span>
|
|
<span class="c1">#</span>
|
|
<span class="c1"># ------------------------------------------------------------</span>
|
|
|
|
|
|
<div class="viewcode-block" id="TempMsg"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.admin.TempMsg">[docs]</a><span class="k">class</span> <span class="nc">TempMsg</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This is a non-persistent object for sending temporary messages</span>
|
|
<span class="sd"> that will not be stored. It mimics the "real" Msg object, but</span>
|
|
<span class="sd"> doesn't require sender to be given.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<div class="viewcode-block" id="TempMsg.__init__"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.admin.TempMsg.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span>
|
|
<span class="bp">self</span><span class="p">,</span>
|
|
<span class="n">senders</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">receivers</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">channels</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">message</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span>
|
|
<span class="n">header</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span>
|
|
<span class="nb">type</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span>
|
|
<span class="n">lockstring</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span>
|
|
<span class="n">hide_from</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Creates the temp message.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> senders (any or list, optional): Senders of the message.</span>
|
|
<span class="sd"> receivers (Account, Object, Channel or list, optional): Receivers of this message.</span>
|
|
<span class="sd"> channels (Channel or list, optional): Channels to send to.</span>
|
|
<span class="sd"> message (str, optional): Message to send.</span>
|
|
<span class="sd"> header (str, optional): Header of message.</span>
|
|
<span class="sd"> type (str, optional): Message class, if any.</span>
|
|
<span class="sd"> lockstring (str, optional): Lock for the message.</span>
|
|
<span class="sd"> hide_from (Account, Object, Channel or list, optional): Entities to hide this message from.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">senders</span> <span class="o">=</span> <span class="n">senders</span> <span class="ow">and</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">senders</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">receivers</span> <span class="o">=</span> <span class="n">receivers</span> <span class="ow">and</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">receivers</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">channels</span> <span class="o">=</span> <span class="n">channels</span> <span class="ow">and</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">channels</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="nb">type</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="n">header</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">message</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">lock_storage</span> <span class="o">=</span> <span class="n">lockstring</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">hide_from</span> <span class="o">=</span> <span class="n">hide_from</span> <span class="ow">and</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">hide_from</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">date_created</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span></div>
|
|
|
|
<div class="viewcode-block" id="TempMsg.locks"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.admin.TempMsg.locks">[docs]</a> <span class="nd">@lazy_property</span>
|
|
<span class="k">def</span> <span class="nf">locks</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="n">LockHandler</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
|
|
|
|
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This handles what is shown when e.g. printing the message.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">senders</span> <span class="o">=</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="p">)</span>
|
|
<span class="n">receivers</span> <span class="o">=</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
|
<span class="p">[</span><span class="s2">"[</span><span class="si">%s</span><span class="s2">]"</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">channels</span><span class="p">]</span> <span class="o">+</span> <span class="p">[</span><span class="n">obj</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">receivers</span><span class="p">]</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">-></span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">senders</span><span class="p">,</span> <span class="n">receivers</span><span class="p">,</span> <span class="n">crop</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">message</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">40</span><span class="p">))</span>
|
|
|
|
<div class="viewcode-block" id="TempMsg.remove_sender"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.admin.TempMsg.remove_sender">[docs]</a> <span class="k">def</span> <span class="nf">remove_sender</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sender</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Remove a sender or a list of senders.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> sender (Object, Account, str or list): Senders to remove.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">sender</span><span class="p">):</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">o</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
|
<span class="k">pass</span> <span class="c1"># nothing to remove</span></div>
|
|
|
|
<div class="viewcode-block" id="TempMsg.remove_receiver"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.admin.TempMsg.remove_receiver">[docs]</a> <span class="k">def</span> <span class="nf">remove_receiver</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">receiver</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Remove a receiver or a list of receivers</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> receiver (Object, Account, Channel, str or list): Receivers to remove.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">receiver</span><span class="p">):</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">o</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
|
<span class="k">pass</span> <span class="c1"># nothing to remove</span></div>
|
|
|
|
<div class="viewcode-block" id="TempMsg.access"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.admin.TempMsg.access">[docs]</a> <span class="k">def</span> <span class="nf">access</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">accessing_obj</span><span class="p">,</span> <span class="n">access_type</span><span class="o">=</span><span class="s2">"read"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Checks lock access.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> accessing_obj (Object or Account): The object trying to gain access.</span>
|
|
<span class="sd"> access_type (str, optional): The type of lock access to check.</span>
|
|
<span class="sd"> default (bool): Fallback to use if `access_type` lock is not defined.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> result (bool): If access was granted or not.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="n">accessing_obj</span><span class="p">,</span> <span class="n">access_type</span><span class="o">=</span><span class="n">access_type</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<span class="c1"># ------------------------------------------------------------</span>
|
|
<span class="c1">#</span>
|
|
<span class="c1"># Channel</span>
|
|
<span class="c1">#</span>
|
|
<span class="c1"># ------------------------------------------------------------</span>
|
|
|
|
|
|
<span class="k">class</span> <span class="nc">SubscriptionHandler</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This handler manages subscriptions to the</span>
|
|
<span class="sd"> channel and hides away which type of entity is</span>
|
|
<span class="sd"> subscribing (Account or Object)</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Initialize the handler</span>
|
|
|
|
<span class="sd"> Attr:</span>
|
|
<span class="sd"> obj (ChannelDB): The channel the handler sits on.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="k">def</span> <span class="nf">_recache</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="n">account</span><span class="p">:</span> <span class="kc">True</span>
|
|
<span class="k">for</span> <span class="n">account</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">db_account_subscriptions</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">account</span><span class="p">,</span> <span class="s2">"pk"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">account</span><span class="o">.</span><span class="n">pk</span>
|
|
<span class="p">}</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
|
|
<span class="p">{</span>
|
|
<span class="n">obj</span><span class="p">:</span> <span class="kc">True</span>
|
|
<span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">db_object_subscriptions</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"pk"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">pk</span>
|
|
<span class="p">}</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">has</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">entity</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Check if the given entity subscribe to this channel</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> entity (str, Account or Object): The entity to return. If</span>
|
|
<span class="sd"> a string, it assumed to be the key or the #dbref</span>
|
|
<span class="sd"> of the entity.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> subscriber (Account, Object or None): The given</span>
|
|
<span class="sd"> subscriber.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_recache</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="n">entity</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span>
|
|
|
|
<span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">entity</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Subscribe an entity to this channel.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> entity (Account, Object or list): The entity or</span>
|
|
<span class="sd"> list of entities to subscribe to this channel.</span>
|
|
|
|
<span class="sd"> Note:</span>
|
|
<span class="sd"> No access-checking is done here, this must have</span>
|
|
<span class="sd"> been done before calling this method. Also</span>
|
|
<span class="sd"> no hooks will be called.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">global</span> <span class="n">_CHANNELHANDLER</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">_CHANNELHANDLER</span><span class="p">:</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.comms.channelhandler</span> <span class="kn">import</span> <span class="n">CHANNEL_HANDLER</span> <span class="k">as</span> <span class="n">_CHANNELHANDLER</span>
|
|
<span class="k">for</span> <span class="n">subscriber</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">entity</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">subscriber</span><span class="p">:</span>
|
|
<span class="n">clsname</span> <span class="o">=</span> <span class="n">subscriber</span><span class="o">.</span><span class="n">__dbclass__</span><span class="o">.</span><span class="vm">__name__</span>
|
|
<span class="c1"># chooses the right type</span>
|
|
<span class="k">if</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"ObjectDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">db_object_subscriptions</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">subscriber</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"AccountDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">db_account_subscriptions</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">subscriber</span><span class="p">)</span>
|
|
<span class="n">_CHANNELHANDLER</span><span class="o">.</span><span class="n">_cached_cmdsets</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">subscriber</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_recache</span><span class="p">()</span>
|
|
|
|
<span class="k">def</span> <span class="nf">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">entity</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Remove a subscriber from the channel.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> entity (Account, Object or list): The entity or</span>
|
|
<span class="sd"> entities to un-subscribe from the channel.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">global</span> <span class="n">_CHANNELHANDLER</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">_CHANNELHANDLER</span><span class="p">:</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.comms.channelhandler</span> <span class="kn">import</span> <span class="n">CHANNEL_HANDLER</span> <span class="k">as</span> <span class="n">_CHANNELHANDLER</span>
|
|
<span class="k">for</span> <span class="n">subscriber</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">entity</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">subscriber</span><span class="p">:</span>
|
|
<span class="n">clsname</span> <span class="o">=</span> <span class="n">subscriber</span><span class="o">.</span><span class="n">__dbclass__</span><span class="o">.</span><span class="vm">__name__</span>
|
|
<span class="c1"># chooses the right type</span>
|
|
<span class="k">if</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"AccountDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">db_account_subscriptions</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">entity</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">clsname</span> <span class="o">==</span> <span class="s2">"ObjectDB"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">db_object_subscriptions</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">entity</span><span class="p">)</span>
|
|
<span class="n">_CHANNELHANDLER</span><span class="o">.</span><span class="n">_cached_cmdsets</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">subscriber</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_recache</span><span class="p">()</span>
|
|
|
|
<span class="k">def</span> <span class="nf">all</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Get all subscriptions to this channel.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> subscribers (list): The subscribers. This</span>
|
|
<span class="sd"> may be a mix of Accounts and Objects!</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_recache</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span>
|
|
|
|
<span class="n">get</span> <span class="o">=</span> <span class="nb">all</span> <span class="c1"># alias</span>
|
|
|
|
<span class="k">def</span> <span class="nf">online</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Get all online accounts from our cache</span>
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> subscribers (list): Subscribers who are online or</span>
|
|
<span class="sd"> are puppeted by an online account.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">subs</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">recache_needed</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
|
|
<span class="kn">from</span> <span class="nn">django.core.exceptions</span> <span class="kn">import</span> <span class="n">ObjectDoesNotExist</span>
|
|
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"account"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span><span class="p">:</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">is_connected</span><span class="p">:</span>
|
|
<span class="k">continue</span>
|
|
<span class="k">except</span> <span class="n">ObjectDoesNotExist</span><span class="p">:</span>
|
|
<span class="c1"># a subscribed object has already been deleted. Mark that we need a recache and ignore it</span>
|
|
<span class="n">recache_needed</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="k">continue</span>
|
|
<span class="n">subs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">recache_needed</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_recache</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="n">subs</span>
|
|
|
|
<span class="k">def</span> <span class="nf">clear</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Remove all subscribers from channel.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">db_account_subscriptions</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">db_object_subscriptions</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_cache</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
|
|
<div class="viewcode-block" id="ChannelDB"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.admin.ChannelDB">[docs]</a><span class="k">class</span> <span class="nc">ChannelDB</span><span class="p">(</span><span class="n">TypedObject</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This is the basis of a comm channel, only implementing</span>
|
|
<span class="sd"> the very basics of distributing messages.</span>
|
|
|
|
<span class="sd"> The Channel class defines the following database fields</span>
|
|
<span class="sd"> beyond the ones inherited from TypedObject:</span>
|
|
|
|
<span class="sd"> - db_account_subscriptions: The Account subscriptions.</span>
|
|
<span class="sd"> - db_object_subscriptions: The Object subscriptions.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">db_account_subscriptions</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
|
|
<span class="s2">"accounts.AccountDB"</span><span class="p">,</span>
|
|
<span class="n">related_name</span><span class="o">=</span><span class="s2">"account_subscription_set"</span><span class="p">,</span>
|
|
<span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="n">verbose_name</span><span class="o">=</span><span class="s2">"account subscriptions"</span><span class="p">,</span>
|
|
<span class="n">db_index</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">db_object_subscriptions</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
|
|
<span class="s2">"objects.ObjectDB"</span><span class="p">,</span>
|
|
<span class="n">related_name</span><span class="o">=</span><span class="s2">"object_subscription_set"</span><span class="p">,</span>
|
|
<span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="n">verbose_name</span><span class="o">=</span><span class="s2">"object subscriptions"</span><span class="p">,</span>
|
|
<span class="n">db_index</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># Database manager</span>
|
|
<span class="n">objects</span> <span class="o">=</span> <span class="n">managers</span><span class="o">.</span><span class="n">ChannelDBManager</span><span class="p">()</span>
|
|
|
|
<span class="n">__settingclasspath__</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_CHANNEL_TYPECLASS</span>
|
|
<span class="n">__defaultclasspath__</span> <span class="o">=</span> <span class="s2">"evennia.comms.comms.DefaultChannel"</span>
|
|
<span class="n">__applabel__</span> <span class="o">=</span> <span class="s2">"comms"</span>
|
|
|
|
<span class="k">class</span> <span class="nc">Meta</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
<span class="s2">"Define Django meta options"</span>
|
|
<span class="n">verbose_name</span> <span class="o">=</span> <span class="s2">"Channel"</span>
|
|
<span class="n">verbose_name_plural</span> <span class="o">=</span> <span class="s2">"Channels"</span>
|
|
|
|
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="s2">"Echoes the text representation of the channel."</span>
|
|
<span class="k">return</span> <span class="s2">"Channel '</span><span class="si">%s</span><span class="s2">' (</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span><span class="p">)</span>
|
|
|
|
<div class="viewcode-block" id="ChannelDB.subscriptions"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.admin.ChannelDB.subscriptions">[docs]</a> <span class="nd">@lazy_property</span>
|
|
<span class="k">def</span> <span class="nf">subscriptions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="n">SubscriptionHandler</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div></div>
|
|
</pre></div>
|
|
|
|
<div class="clearer"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
<div class="sphinxsidebarwrapper">
|
|
<p class="logo"><a href="../../../index.html">
|
|
<img class="logo" src="../../../_static/evennia_logo.png" alt="Logo"/>
|
|
</a></p>
|
|
<div id="searchbox" style="display: none" role="search">
|
|
<h3 id="searchlabel">Quick search</h3>
|
|
<div class="searchformwrapper">
|
|
<form class="search" action="../../../search.html" method="get">
|
|
<input type="text" name="q" aria-labelledby="searchlabel" />
|
|
<input type="submit" value="Go" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<script>$('#searchbox').show(0);</script>
|
|
<h3>Versions</h3>
|
|
<ul>
|
|
<li><a href="models.html">1.0-dev (develop branch)</a></li>
|
|
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="clearer"></div>
|
|
</div>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../../genindex.html" title="General Index"
|
|
>index</a></li>
|
|
<li class="right" >
|
|
<a href="../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0-dev</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">evennia.comms.models</a></li>
|
|
</ul>
|
|
<div class="develop">develop branch</div>
|
|
</div>
|
|
<div class="footer" role="contentinfo">
|
|
© Copyright 2020, The Evennia developer community.
|
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
|
</div>
|
|
</body>
|
|
</html> |