Updated HTML docs

This commit is contained in:
Griatch 2022-01-09 17:24:06 +01:00
parent 7a8f150ed9
commit 3ba4299df6
99 changed files with 2573 additions and 1932 deletions

View file

@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 3bf6b5fb5391a938af0647d41b75c1c8
config: 13e03b2041c10390196e0d6afb7b4405
tags: 645f666f9bcd5a90fca523b33c5a78b7

View file

@ -83,12 +83,12 @@ entities directly in code (for example when defining new create commands).</p>
</pre></div>
</div>
<ul class="simple">
<li><p><a class="reference internal" href="api/evennia.utils.create.html#evennia.utils.create.create_account" title="evennia.utils.create.create_account"><span class="xref myst py py-func">evennia.create_account</span></a></p></li>
<li><p><a class="reference internal" href="api/evennia.utils.create.html#evennia.utils.create.create_object" title="evennia.utils.create.create_object"><span class="xref myst py py-func">evennia.create_object</span></a></p></li>
<li><p><a class="reference internal" href="api/evennia.utils.create.html#evennia.utils.create.create_script" title="evennia.utils.create.create_script"><span class="xref myst py py-func">evennia.create_script</span></a></p></li>
<li><p><a class="reference internal" href="api/evennia.accounts.manager.html#evennia.accounts.manager.AccountDBManager.create_account" title="evennia.accounts.manager.AccountDBManager.create_account"><span class="xref myst py py-meth">evennia.create_account</span></a></p></li>
<li><p><a class="reference internal" href="api/evennia.objects.manager.html#evennia.objects.manager.ObjectDBManager.create_object" title="evennia.objects.manager.ObjectDBManager.create_object"><span class="xref myst py py-meth">evennia.create_object</span></a></p></li>
<li><p><a class="reference internal" href="api/evennia.scripts.manager.html#evennia.scripts.manager.ScriptDBManager.create_script" title="evennia.scripts.manager.ScriptDBManager.create_script"><span class="xref myst py py-meth">evennia.create_script</span></a></p></li>
<li><p><a class="reference internal" href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannel.create_channel" title="evennia.commands.default.comms.CmdChannel.create_channel"><span class="xref myst py py-meth">evennia.create_channel</span></a></p></li>
<li><p><a class="reference internal" href="api/evennia.utils.create.html#evennia.utils.create.create_help_entry" title="evennia.utils.create.create_help_entry"><span class="xref myst py py-func">evennia.create_help_entry</span></a></p></li>
<li><p><a class="reference internal" href="api/evennia.utils.create.html#evennia.utils.create.create_message" title="evennia.utils.create.create_message"><span class="xref myst py py-func">evennia.create_message</span></a></p></li>
<li><p><a class="reference internal" href="api/evennia.comms.managers.html#evennia.comms.managers.MsgManager.create_message" title="evennia.comms.managers.MsgManager.create_message"><span class="xref myst py py-meth">evennia.create_message</span></a></p></li>
</ul>
<p>Each of these create-functions have a host of arguments to further customize the created entity. See
<code class="docutils literal notranslate"><span class="pre">evennia/utils/create.py</span></code> for more information.</p>

View file

@ -46,9 +46,12 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">datetime</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.contrib.auth.models</span> <span class="kn">import</span> <span class="n">UserManager</span>
<span class="kn">from</span> <span class="nn">evennia.typeclasses.managers</span> <span class="kn">import</span> <span class="n">TypedObjectManager</span><span class="p">,</span> <span class="n">TypeclassManager</span>
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">dbid_to_obj</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;AccountManager&quot;</span><span class="p">,</span> <span class="s2">&quot;AccountDBManager&quot;</span><span class="p">)</span>
@ -196,14 +199,17 @@
<span class="sd"> (non-case-sensitive fuzzy match).</span>
<span class="sd"> typeclass (str or Typeclass, optional): Limit the search only to</span>
<span class="sd"> accounts of this typeclass.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Queryset: A queryset (an iterable) with 0, 1 or more matches.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">dbref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">ostring</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dbref</span> <span class="ow">or</span> <span class="n">dbref</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="c1"># bref search is always exact</span>
<span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">dbref</span><span class="p">)</span>
<span class="k">if</span> <span class="n">matches</span><span class="p">:</span>
<span class="k">return</span> <span class="n">matches</span>
<span class="c1"># dbref search is always exact</span>
<span class="n">dbref_match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">search_dbref</span><span class="p">(</span><span class="n">dbref</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dbref_match</span><span class="p">:</span>
<span class="k">return</span> <span class="n">dbref_match</span>
<span class="n">query</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;username__iexact&quot;</span> <span class="k">if</span> <span class="n">exact</span> <span class="k">else</span> <span class="s2">&quot;username__icontains&quot;</span><span class="p">:</span> <span class="n">ostring</span><span class="p">}</span>
<span class="k">if</span> <span class="n">typeclass</span><span class="p">:</span>
<span class="c1"># we accept both strings and actual typeclasses</span>
@ -224,6 +230,108 @@
<span class="p">)</span>
<span class="k">return</span> <span class="n">matches</span></div>
<div class="viewcode-block" id="AccountDBManager.create_account"><a class="viewcode-back" href="../../../api/evennia.accounts.manager.html#evennia.accounts.accounts.AccountDBManager.create_account">[docs]</a> <span class="k">def</span> <span class="nf">create_account</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">key</span><span class="p">,</span>
<span class="n">email</span><span class="p">,</span>
<span class="n">password</span><span class="p">,</span>
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">is_superuser</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This creates a new account.</span>
<span class="sd"> Args:</span>
<span class="sd"> key (str): The account&#39;s name. This should be unique.</span>
<span class="sd"> email (str or None): Email on valid addr@addr.domain form. If</span>
<span class="sd"> the empty string, will be set to None.</span>
<span class="sd"> password (str): Password in cleartext.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> typeclass (str): The typeclass to use for the account.</span>
<span class="sd"> is_superuser (bool): Wether or not this account is to be a superuser</span>
<span class="sd"> locks (str): Lockstring.</span>
<span class="sd"> permission (list): List of permission strings.</span>
<span class="sd"> tags (list): List of Tags on form `(key, category[, data])`</span>
<span class="sd"> attributes (list): List of Attributes on form</span>
<span class="sd"> `(key, value [, category, [,lockstring [, default_pass]]])`</span>
<span class="sd"> report_to (Object): An object with a msg() method to report</span>
<span class="sd"> errors to. If not given, errors will be logged.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Account: The newly created Account.</span>
<span class="sd"> Raises:</span>
<span class="sd"> ValueError: If `key` already exists in database.</span>
<span class="sd"> Notes:</span>
<span class="sd"> Usually only the server admin should need to be superuser, all</span>
<span class="sd"> other access levels can be handled with more fine-grained</span>
<span class="sd"> permissions or groups. A superuser bypasses all lock checking</span>
<span class="sd"> operations and is thus not suitable for play-testing the game.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_ACCOUNT_TYPECLASS</span>
<span class="n">locks</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span> <span class="k">if</span> <span class="n">locks</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">permissions</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">permissions</span><span class="p">)</span> <span class="k">if</span> <span class="n">permissions</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="c1"># a path is given. Load the actual typeclass.</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
<span class="c1"># setup input for the create command. We use AccountDB as baseclass</span>
<span class="c1"># here to give us maximum freedom (the typeclasses will load</span>
<span class="c1"># correctly when each object is recovered).</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">email</span><span class="p">:</span>
<span class="n">email</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">username__iexact</span><span class="o">=</span><span class="n">key</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;An Account with the name &#39;</span><span class="si">%s</span><span class="s2">&#39; already exists.&quot;</span> <span class="o">%</span> <span class="n">key</span><span class="p">)</span>
<span class="c1"># this handles a given dbref-relocate to an account.</span>
<span class="n">report_to</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">report_to</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
<span class="c1"># create the correct account entity, using the setup from</span>
<span class="c1"># base django auth.</span>
<span class="n">now</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
<span class="n">email</span> <span class="o">=</span> <span class="n">typeclass</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">normalize_email</span><span class="p">(</span><span class="n">email</span><span class="p">)</span>
<span class="n">new_account</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span>
<span class="n">username</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<span class="n">email</span><span class="o">=</span><span class="n">email</span><span class="p">,</span>
<span class="n">is_staff</span><span class="o">=</span><span class="n">is_superuser</span><span class="p">,</span>
<span class="n">is_superuser</span><span class="o">=</span><span class="n">is_superuser</span><span class="p">,</span>
<span class="n">last_login</span><span class="o">=</span><span class="n">now</span><span class="p">,</span>
<span class="n">date_joined</span><span class="o">=</span><span class="n">now</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">password</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># the password may be None for &#39;fake&#39; accounts, like bots</span>
<span class="n">valid</span><span class="p">,</span> <span class="n">error</span> <span class="o">=</span> <span class="n">new_account</span><span class="o">.</span><span class="n">validate_password</span><span class="p">(</span><span class="n">password</span><span class="p">,</span> <span class="n">new_account</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">valid</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">error</span>
<span class="n">new_account</span><span class="o">.</span><span class="n">set_password</span><span class="p">(</span><span class="n">password</span><span class="p">)</span>
<span class="n">new_account</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span> <span class="n">permissions</span><span class="o">=</span><span class="n">permissions</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span> <span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span>
<span class="p">)</span>
<span class="c1"># saving will trigger the signal that calls the</span>
<span class="c1"># at_first_save hook on the typeclass, where the _createdict</span>
<span class="c1"># can be used.</span>
<span class="n">new_account</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="c1"># note that we don&#39;t send a signal here, that is sent from the Account.create helper method</span>
<span class="c1"># instead.</span>
<span class="k">return</span> <span class="n">new_account</span></div>
<span class="c1"># back-compatibility alias</span>
<span class="n">account_search</span> <span class="o">=</span> <span class="n">search_account</span></div>

View file

@ -64,6 +64,7 @@
<span class="n">interactive</span><span class="p">,</span>
<span class="n">list_to_string</span><span class="p">,</span>
<span class="n">display_len</span><span class="p">,</span>
<span class="n">format_grid</span><span class="p">,</span>
<span class="p">)</span>
<span class="kn">from</span> <span class="nn">evennia.utils.eveditor</span> <span class="kn">import</span> <span class="n">EvEditor</span>
<span class="kn">from</span> <span class="nn">evennia.utils.evmore</span> <span class="kn">import</span> <span class="n">EvMore</span>
@ -74,6 +75,7 @@
<span class="n">COMMAND_DEFAULT_CLASS</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">)</span>
<span class="n">_FUNCPARSER</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_ATTRFUNCPARSER</span> <span class="o">=</span> <span class="kc">None</span>
<span class="c1"># limit symbol import for API</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span>
@ -1635,11 +1637,20 @@
<span class="sd"> char: Setting an attribute on a character (global search)</span>
<span class="sd"> character: Alias for char, as above.</span>
<span class="sd"> Example:</span>
<span class="sd"> set self/foo = &quot;bar&quot;</span>
<span class="sd"> set/delete self/foo</span>
<span class="sd"> set self/foo = $dbref(#53)</span>
<span class="sd"> Sets attributes on objects. The second example form above clears a</span>
<span class="sd"> previously set attribute while the third form inspects the current value of</span>
<span class="sd"> the attribute (if any). The last one (with the star) is a shortcut for</span>
<span class="sd"> operating on a player Account rather than an Object.</span>
<span class="sd"> If you want &lt;value&gt; to be an object, use $dbef(#dbref) or</span>
<span class="sd"> $search(key) to assign it. You need control or edit access to</span>
<span class="sd"> the object you are adding.</span>
<span class="sd"> The most common data to save with this command are strings and</span>
<span class="sd"> numbers. You can however also set Python primitives such as lists,</span>
<span class="sd"> dictionaries and tuples on objects (this might be important for</span>
@ -1964,13 +1975,33 @@
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rm_attr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">category</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># setting attribute(s). Make sure to convert to real Python type before saving.</span>
<span class="c1"># add support for $dbref() and $search() in set argument</span>
<span class="k">global</span> <span class="n">_ATTRFUNCPARSER</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_ATTRFUNCPARSER</span><span class="p">:</span>
<span class="n">_ATTRFUNCPARSER</span> <span class="o">=</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">FuncParser</span><span class="p">(</span>
<span class="p">{</span><span class="s2">&quot;dbref&quot;</span><span class="p">:</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">funcparser_callable_search</span><span class="p">,</span>
<span class="s2">&quot;search&quot;</span><span class="p">:</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">funcparser_callable_search</span><span class="p">}</span>
<span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;control&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;edit&quot;</span><span class="p">)):</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You don&#39;t have permission to edit </span><span class="si">%s</span><span class="s2">.&quot;</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_attr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">category</span><span class="p">):</span>
<span class="k">continue</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">_convert_from_string</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="c1"># from evennia import set_trace;set_trace()</span>
<span class="n">parsed_value</span> <span class="o">=</span> <span class="n">_ATTRFUNCPARSER</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">return_str</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">parsed_value</span><span class="p">,</span> <span class="s2">&quot;access&quot;</span><span class="p">):</span>
<span class="c1"># if this is an object we must have the right to read it, if so,</span>
<span class="c1"># we will not convert it to a string</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">parsed_value</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;control&quot;</span><span class="p">)</span>
<span class="ow">or</span> <span class="n">parsed_value</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;edit&quot;</span><span class="p">)):</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You don&#39;t have permission to set &quot;</span>
<span class="sa">f</span><span class="s2">&quot;object with identifier &#39;</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
<span class="k">continue</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">parsed_value</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">_convert_from_string</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="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">set_attr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">category</span><span class="p">))</span>
<span class="c1"># send feedback</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">))</span></div></div>
@ -2458,6 +2489,8 @@
<span class="sd"> Switch:</span>
<span class="sd"> account - examine an Account (same as adding *)</span>
<span class="sd"> object - examine an Object (useful when OOC)</span>
<span class="sd"> script - examine a Script</span>
<span class="sd"> channel - examine a Channel</span>
<span class="sd"> The examine command shows detailed game info about an</span>
<span class="sd"> object and optionally a specific attribute on it.</span>
@ -2472,8 +2505,10 @@
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:perm(examine) or perm(Builder)&quot;</span>
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">&quot;Building&quot;</span>
<span class="n">arg_regex</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;(/\w+?(\s|$))|\s|$&quot;</span>
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;account&quot;</span><span class="p">,</span> <span class="s2">&quot;object&quot;</span><span class="p">,</span> <span class="s2">&quot;script&quot;</span><span class="p">,</span> <span class="s2">&quot;channel&quot;</span><span class="p">]</span>
<span class="n">object_type</span> <span class="o">=</span> <span class="s2">&quot;object&quot;</span>
<span class="n">account_mode</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">detail_color</span> <span class="o">=</span> <span class="s2">&quot;|c&quot;</span>
<span class="n">header_color</span> <span class="o">=</span> <span class="s2">&quot;|w&quot;</span>
<span class="n">quell_color</span> <span class="o">=</span> <span class="s2">&quot;|r&quot;</span>
@ -2498,7 +2533,7 @@
<span class="k">return</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">utils</span><span class="o">.</span><span class="n">make_iter</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">aliases</span><span class="p">)))</span></div>
<div class="viewcode-block" id="CmdExamine.format_typeclass"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_typeclass">[docs]</a> <span class="k">def</span> <span class="nf">format_typeclass</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="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;typeclass&quot;</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">&quot;typeclass_path&quot;</span><span class="p">):</span>
<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">typename</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">typeclass_path</span><span class="si">}</span><span class="s2">)&quot;</span></div>
<div class="viewcode-block" id="CmdExamine.format_sessions"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_sessions">[docs]</a> <span class="k">def</span> <span class="nf">format_sessions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
@ -2597,7 +2632,7 @@
<span class="k">for</span> <span class="n">cmdset</span> <span class="ow">in</span> <span class="n">stored_cmdsets</span><span class="p">:</span>
<span class="k">if</span> <span class="n">cmdset</span><span class="o">.</span><span class="n">key</span> <span class="o">!=</span> <span class="s2">&quot;_EMPTY_CMDSET&quot;</span><span class="p">:</span>
<span class="n">stored_cmdset_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_single_cmdset</span><span class="p">(</span><span class="n">cmdset</span><span class="p">))</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">stored_cmdset_strings</span><span class="p">)</span></div>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">stored_cmdset_strings</span><span class="p">)</span></div>
<div class="viewcode-block" id="CmdExamine.format_merged_cmdsets"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_merged_cmdsets">[docs]</a> <span class="k">def</span> <span class="nf">format_merged_cmdsets</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="n">current_cmdset</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">obj</span><span class="p">,</span> <span class="s2">&quot;cmdset&quot;</span><span class="p">):</span>
@ -2631,7 +2666,7 @@
<span class="k">for</span> <span class="n">cmdset</span> <span class="ow">in</span> <span class="n">all_cmdsets</span><span class="p">:</span>
<span class="k">if</span> <span class="n">cmdset</span><span class="o">.</span><span class="n">key</span> <span class="o">!=</span> <span class="s2">&quot;_EMPTY_CMDSET&quot;</span><span class="p">:</span>
<span class="n">merged_cmdset_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_single_cmdset</span><span class="p">(</span><span class="n">cmdset</span><span class="p">))</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">merged_cmdset_strings</span><span class="p">)</span></div>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">merged_cmdset_strings</span><span class="p">)</span></div>
<div class="viewcode-block" id="CmdExamine.format_current_cmds"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_current_cmds">[docs]</a> <span class="k">def</span> <span class="nf">format_current_cmds</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="n">current_cmdset</span><span class="p">):</span>
<span class="n">current_commands</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">([</span><span class="n">cmd</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">current_cmdset</span> <span class="k">if</span> <span class="n">cmd</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;cmd&quot;</span><span class="p">)])</span>
@ -2686,10 +2721,13 @@
<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">header_color</span><span class="si">}{</span><span class="n">key</span><span class="si">}</span><span class="s2">|n=</span><span class="si">{</span><span class="n">value</span><span class="si">}{</span><span class="n">typ</span><span class="si">}</span><span class="s2">&quot;</span></div>
<div class="viewcode-block" id="CmdExamine.format_attributes"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_attributes">[docs]</a> <span class="k">def</span> <span class="nf">format_attributes</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="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
<span class="n">output</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
<span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_single_attribute</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
<span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_attributes</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
<span class="p">)</span></div>
<span class="p">)</span>
<span class="k">if</span> <span class="n">output</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
<span class="c1"># we don&#39;t want just an empty line</span>
<span class="k">return</span> <span class="n">output</span></div>
<div class="viewcode-block" id="CmdExamine.format_nattributes"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_nattributes">[docs]</a> <span class="k">def</span> <span class="nf">format_nattributes</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="k">try</span><span class="p">:</span>
@ -2720,6 +2758,51 @@
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">destination</span><span class="p">)</span>
<span class="k">return</span> <span class="n">things</span> <span class="k">if</span> <span class="n">things</span> <span class="k">else</span> <span class="kc">None</span></div>
<div class="viewcode-block" id="CmdExamine.format_script_desc"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_script_desc">[docs]</a> <span class="k">def</span> <span class="nf">format_script_desc</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="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;db_desc&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_desc</span><span class="p">:</span>
<span class="k">return</span> <span class="n">crop</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">db_desc</span><span class="p">,</span> <span class="mi">20</span><span class="p">)</span></div>
<div class="viewcode-block" id="CmdExamine.format_script_is_persistent"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_script_is_persistent">[docs]</a> <span class="k">def</span> <span class="nf">format_script_is_persistent</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="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;db_persistent&quot;</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;T&quot;</span> <span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_persistent</span> <span class="k">else</span> <span class="s2">&quot;F&quot;</span></div>
<div class="viewcode-block" id="CmdExamine.format_script_timer_data"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_script_timer_data">[docs]</a> <span class="k">def</span> <span class="nf">format_script_timer_data</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="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;db_interval&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_interval</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">start_delay</span> <span class="o">=</span> <span class="s2">&quot;T&quot;</span> <span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_start_delay</span> <span class="k">else</span> <span class="s2">&quot;F&quot;</span>
<span class="n">next_repeat</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">time_until_next_repeat</span><span class="p">()</span>
<span class="n">active</span> <span class="o">=</span> <span class="s2">&quot;|grunning|n&quot;</span> <span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_is_active</span> <span class="ow">and</span> <span class="n">next_repeat</span> <span class="k">else</span> <span class="s2">&quot;|rinactive|n&quot;</span>
<span class="n">interval</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_interval</span>
<span class="n">next_repeat</span> <span class="o">=</span> <span class="s2">&quot;N/A&quot;</span> <span class="k">if</span> <span class="n">next_repeat</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">next_repeat</span><span class="si">}</span><span class="s2">s&quot;</span>
<span class="n">repeats</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_repeats</span><span class="p">:</span>
<span class="n">remaining_repeats</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">remaining_repeats</span><span class="p">()</span>
<span class="n">remaining_repeats</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">if</span> <span class="n">remaining_repeats</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">remaining_repeats</span>
<span class="n">repeats</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; - </span><span class="si">{</span><span class="n">remaining_repeats</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">db_repeats</span><span class="si">}</span><span class="s2"> remain&quot;</span>
<span class="k">return</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">active</span><span class="si">}</span><span class="s2"> - interval: </span><span class="si">{</span><span class="n">interval</span><span class="si">}</span><span class="s2">s &quot;</span>
<span class="sa">f</span><span class="s2">&quot;(next: </span><span class="si">{</span><span class="n">next_repeat</span><span class="si">}{</span><span class="n">repeats</span><span class="si">}</span><span class="s2">, start_delay: </span><span class="si">{</span><span class="n">start_delay</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="CmdExamine.format_channel_sub_totals"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_channel_sub_totals">[docs]</a> <span class="k">def</span> <span class="nf">format_channel_sub_totals</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="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;db_account_subscriptions&quot;</span><span class="p">):</span>
<span class="n">account_subs</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="n">object_subs</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="n">online</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">subscriptions</span><span class="o">.</span><span class="n">online</span><span class="p">())</span>
<span class="n">ntotal</span> <span class="o">=</span> <span class="n">account_subs</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> <span class="o">+</span> <span class="n">object_subs</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">ntotal</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">online</span><span class="si">}</span><span class="s2"> online)&quot;</span></div>
<div class="viewcode-block" id="CmdExamine.format_channel_account_subs"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_channel_account_subs">[docs]</a> <span class="k">def</span> <span class="nf">format_channel_account_subs</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="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;db_account_subscriptions&quot;</span><span class="p">):</span>
<span class="n">account_subs</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="n">account_subs</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
<span class="n">format_grid</span><span class="p">([</span><span class="n">sub</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">sub</span> <span class="ow">in</span> <span class="n">account_subs</span><span class="p">],</span> <span class="n">sep</span><span class="o">=</span><span class="s1">&#39; &#39;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">_DEFAULT_WIDTH</span><span class="p">))</span></div>
<div class="viewcode-block" id="CmdExamine.format_channel_object_subs"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_channel_object_subs">[docs]</a> <span class="k">def</span> <span class="nf">format_channel_object_subs</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="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;db_object_subscriptions&quot;</span><span class="p">):</span>
<span class="n">object_subs</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="n">object_subs</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
<span class="n">format_grid</span><span class="p">([</span><span class="n">sub</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">sub</span> <span class="ow">in</span> <span class="n">object_subs</span><span class="p">],</span> <span class="n">sep</span><span class="o">=</span><span class="s1">&#39; &#39;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">_DEFAULT_WIDTH</span><span class="p">))</span></div>
<div class="viewcode-block" id="CmdExamine.get_formatted_obj_data"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.get_formatted_obj_data">[docs]</a> <span class="k">def</span> <span class="nf">get_formatted_obj_data</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="n">current_cmdset</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Calls all other `format_*` methods.</span>
@ -2747,6 +2830,10 @@
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Merged Cmdset(s)&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_merged_cmdsets</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="sa">f</span><span class="s2">&quot;Commands vailable to </span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> (result of Merged Cmdset(s))&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">format_current_cmds</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">))</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="o">==</span> <span class="s2">&quot;script&quot;</span><span class="p">:</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Description&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_script_desc</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Persistent&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_script_is_persistent</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Script Repeat&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_script_timer_data</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Scripts&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_scripts</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Tags&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_tags</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Persistent Attributes&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_attributes</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
@ -2754,6 +2841,11 @@
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Exits&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_exits</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Characters&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_chars</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Content&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_things</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="o">==</span> <span class="s2">&quot;channel&quot;</span><span class="p">:</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Subscription Totals&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_channel_sub_totals</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Account Subscriptions&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_channel_account_subs</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Object Subscriptions&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_channel_object_subs</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="k">return</span> <span class="n">objdata</span></div>
<div class="viewcode-block" id="CmdExamine.format_output"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_output">[docs]</a> <span class="k">def</span> <span class="nf">format_output</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="n">current_cmdset</span><span class="p">):</span>
@ -2778,6 +2870,46 @@
<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}</span><span class="se">\n</span><span class="si">{</span><span class="n">main_str</span><span class="si">}</span><span class="se">\n</span><span class="si">{</span><span class="n">sep</span><span class="si">}</span><span class="s2">&quot;</span></div>
<span class="k">def</span> <span class="nf">_search_by_object_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj_name</span><span class="p">,</span> <span class="n">objtype</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Route to different search functions depending on the object type being</span>
<span class="sd"> examined. This also handles error reporting for multimatches/no matches.</span>
<span class="sd"> Args:</span>
<span class="sd"> obj_name (str): The search query.</span>
<span class="sd"> objtype (str): One of &#39;object&#39;, &#39;account&#39;, &#39;script&#39; or &#39;channel&#39;.</span>
<span class="sd"> Returns:</span>
<span class="sd"> any: `None` if no match or multimatch, otherwise a single result.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">objtype</span> <span class="o">==</span> <span class="s2">&quot;object&quot;</span><span class="p">:</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">obj_name</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">objtype</span> <span class="o">==</span> <span class="s2">&quot;account&quot;</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search_account</span><span class="p">(</span><span class="n">obj_name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="c1"># this means we are calling examine from an account object</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span>
<span class="n">obj_name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">),</span> <span class="n">search_object</span><span class="o">=</span><span class="s2">&quot;object&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">obj</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;search_</span><span class="si">{</span><span class="n">objtype</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)(</span><span class="n">obj_name</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No </span><span class="si">{</span><span class="n">objtype</span><span class="si">}</span><span class="s2"> found with key </span><span class="si">{</span><span class="n">obj_name</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">err</span> <span class="o">=</span> <span class="s2">&quot;Multiple </span><span class="si">{objtype}</span><span class="s2"> found with key </span><span class="si">{obj_name}</span><span class="s2">:</span><span class="se">\n</span><span class="si">{matches}</span><span class="s2">&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">obj_name</span><span class="o">=</span><span class="n">obj_name</span><span class="p">,</span>
<span class="n">matches</span><span class="o">=</span><span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">ob</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">(#</span><span class="si">{</span><span class="n">ob</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">for</span> <span class="n">ob</span> <span class="ow">in</span> <span class="n">obj</span><span class="p">)</span>
<span class="p">))</span>
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">return</span> <span class="n">obj</span>
<div class="viewcode-block" id="CmdExamine.parse"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.parse">[docs]</a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">parse</span><span class="p">()</span>
@ -2792,42 +2924,32 @@
<span class="k">raise</span> <span class="n">InterruptCommand</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">for</span> <span class="n">objdef</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objattr</span><span class="p">:</span>
<span class="c1"># note that we check the objtype for every repeat; this will always</span>
<span class="c1"># be the same result, but it makes for a cleaner code and multi-examine</span>
<span class="c1"># is not so common anyway.</span>
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">obj_name</span> <span class="o">=</span> <span class="n">objdef</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="c1"># name</span>
<span class="n">obj_attrs</span> <span class="o">=</span> <span class="n">objdef</span><span class="p">[</span><span class="s2">&quot;attrs&quot;</span><span class="p">]</span> <span class="c1"># /attrs</span>
<span class="bp">self</span><span class="o">.</span><span class="n">account_mode</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">utils</span><span class="o">.</span><span class="n">inherits_from</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;evennia.accounts.accounts.DefaultAccount&quot;</span><span class="p">)</span>
<span class="ow">or</span> <span class="s2">&quot;account&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
<span class="ow">or</span> <span class="n">obj_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">account_mode</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search_account</span><span class="p">(</span><span class="n">obj_name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="c1"># this means we are calling examine from an account object</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span>
<span class="n">obj_name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">),</span> <span class="n">search_object</span><span class="o">=</span><span class="s2">&quot;object&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">obj_name</span><span class="p">)</span>
<span class="c1"># identify object type, in prio account - script - channel</span>
<span class="n">object_type</span> <span class="o">=</span> <span class="s2">&quot;object&quot;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">utils</span><span class="o">.</span><span class="n">inherits_from</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;evennia.accounts.accounts.DefaultAccount&quot;</span><span class="p">)</span>
<span class="ow">or</span> <span class="s2">&quot;account&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">or</span> <span class="n">obj_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)):</span>
<span class="n">object_type</span> <span class="o">=</span> <span class="s2">&quot;account&quot;</span>
<span class="k">elif</span> <span class="s2">&quot;script&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
<span class="n">object_type</span> <span class="o">=</span> <span class="s2">&quot;script&quot;</span>
<span class="k">elif</span> <span class="s2">&quot;channel&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
<span class="n">object_type</span> <span class="o">=</span> <span class="s2">&quot;channel&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="o">=</span> <span class="n">object_type</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_search_by_object_type</span><span class="p">(</span><span class="n">obj_name</span><span class="p">,</span> <span class="n">object_type</span><span class="p">)</span>
<span class="k">if</span> <span class="n">obj</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">examine_objs</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="n">obj_attrs</span><span class="p">))</span></div>
<div class="viewcode-block" id="CmdExamine.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Process command&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">get_cmdset_callback</span><span class="p">(</span><span class="n">current_cmdset</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> We make use of the cmdhandler.get_and_merge_cmdsets below. This</span>
<span class="sd"> is an asynchronous function, returning a Twisted deferred.</span>
<span class="sd"> So in order to properly use this we need use this callback;</span>
<span class="sd"> it is called with the result of get_and_merge_cmdsets, whenever</span>
<span class="sd"> that function finishes. Taking the resulting cmdset, we continue</span>
<span class="sd"> to format and output the result.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_output</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
<span class="k">for</span> <span class="n">obj</span><span class="p">,</span> <span class="n">obj_attrs</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">examine_objs</span><span class="p">:</span>
<span class="c1"># these are parsed out in .parse already</span>
@ -2855,31 +2977,42 @@
<span class="c1"># examine the obj itself</span>
<span class="c1"># get the cmdset status</span>
<span class="n">session</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">count</span><span class="p">():</span>
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">&quot;session&quot;</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">get</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">account_mode</span><span class="p">:</span>
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">&quot;account&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">&quot;object&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;object&quot;</span><span class="p">,</span> <span class="s2">&quot;account&quot;</span><span class="p">):</span>
<span class="c1"># for objects and accounts we need to set up an asynchronous</span>
<span class="c1"># fetch of the cmdset and not proceed with the examine display</span>
<span class="c1"># until the fetch is complete</span>
<span class="n">session</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">count</span><span class="p">():</span>
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">&quot;session&quot;</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">get</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="o">==</span> <span class="s2">&quot;account&quot;</span><span class="p">:</span>
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">&quot;account&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">&quot;object&quot;</span>
<span class="n">account</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">objct</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">account_mode</span><span class="p">:</span>
<span class="n">account</span> <span class="o">=</span> <span class="n">obj</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">account</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span>
<span class="n">objct</span> <span class="o">=</span> <span class="n">obj</span>
<span class="n">account</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">objct</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="o">==</span> <span class="s2">&quot;account&quot;</span><span class="p">:</span>
<span class="n">account</span> <span class="o">=</span> <span class="n">obj</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">account</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span>
<span class="n">objct</span> <span class="o">=</span> <span class="n">obj</span>
<span class="c1"># this is usually handled when a command runs, but when we examine</span>
<span class="c1"># we may have leftover inherited cmdsets directly after a move etc.</span>
<span class="n">obj</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
<span class="c1"># using callback to print results whenever function returns.</span>
<span class="n">get_and_merge_cmdsets</span><span class="p">(</span>
<span class="n">obj</span><span class="p">,</span> <span class="n">session</span><span class="p">,</span> <span class="n">account</span><span class="p">,</span> <span class="n">objct</span><span class="p">,</span> <span class="n">mergemode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw_string</span>
<span class="p">)</span><span class="o">.</span><span class="n">addCallback</span><span class="p">(</span><span class="n">get_cmdset_callback</span><span class="p">)</span></div></div>
<span class="c1"># this is usually handled when a command runs, but when we examine</span>
<span class="c1"># we may have leftover inherited cmdsets directly after a move etc.</span>
<span class="n">obj</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
<span class="c1"># using callback to print results whenever function returns.</span>
<span class="k">def</span> <span class="nf">_get_cmdset_callback</span><span class="p">(</span><span class="n">current_cmdset</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_output</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
<span class="n">get_and_merge_cmdsets</span><span class="p">(</span>
<span class="n">obj</span><span class="p">,</span> <span class="n">session</span><span class="p">,</span> <span class="n">account</span><span class="p">,</span> <span class="n">objct</span><span class="p">,</span> <span class="n">mergemode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw_string</span>
<span class="p">)</span><span class="o">.</span><span class="n">addCallback</span><span class="p">(</span><span class="n">_get_cmdset_callback</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># for objects without cmdsets we can proceed to examine immediately</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_output</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span></div></div>
<div class="viewcode-block" id="CmdFind"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdFind">[docs]</a><span class="k">class</span> <span class="nc">CmdFind</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
@ -3172,6 +3305,7 @@
<span class="sd"> script/stop myobj = scriptname - stop script on object</span>
<span class="sd"> script/pause foo.Bar.Script - pause global script</span>
<span class="sd"> script/delete myobj - delete ALL scripts on object</span>
<span class="sd"> script/delete #dbref[-#dbref] - delete script or range by dbref</span>
<span class="sd"> When given with an `&lt;obj&gt;` as left-hand-side, this creates and</span>
<span class="sd"> assigns a new script to that object. Without an `&lt;obj&gt;`, this</span>
@ -3213,6 +3347,13 @@
<span class="n">scripts</span> <span class="o">=</span> <span class="n">ScriptDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_typeclass_path__iendswith</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
<span class="k">if</span> <span class="n">scripts</span><span class="p">:</span>
<span class="k">return</span> <span class="n">scripts</span>
<span class="k">if</span> <span class="s2">&quot;-&quot;</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
<span class="c1"># may be a dbref-range</span>
<span class="n">val1</span><span class="p">,</span> <span class="n">val2</span> <span class="o">=</span> <span class="p">(</span><span class="n">dbref</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;-&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
<span class="k">if</span> <span class="n">val1</span> <span class="ow">and</span> <span class="n">val2</span><span class="p">:</span>
<span class="n">scripts</span> <span class="o">=</span> <span class="n">ScriptDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">id__in</span><span class="o">=</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="n">val1</span><span class="p">,</span> <span class="n">val2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)))</span>
<span class="k">if</span> <span class="n">scripts</span><span class="p">:</span>
<span class="k">return</span> <span class="n">scripts</span>
<div class="viewcode-block" id="CmdScripts.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdScripts.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;implement method&quot;&quot;&quot;</span>

View file

@ -780,6 +780,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">comtable</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">styled_table</span><span class="p">(</span>
<span class="s2">&quot;id&quot;</span><span class="p">,</span>
<span class="s2">&quot;channel&quot;</span><span class="p">,</span>
<span class="s2">&quot;my aliases&quot;</span><span class="p">,</span>
<span class="s2">&quot;locks&quot;</span><span class="p">,</span>
@ -790,17 +791,24 @@
<span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">subscribed</span><span class="p">:</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;-&quot;</span>
<span class="n">chanid</span> <span class="o">=</span> <span class="s2">&quot;-&quot;</span>
<span class="k">if</span> <span class="n">chan</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;control&quot;</span><span class="p">):</span>
<span class="n">locks</span> <span class="o">=</span> <span class="n">chan</span><span class="o">.</span><span class="n">locks</span>
<span class="n">chanid</span> <span class="o">=</span> <span class="n">chan</span><span class="o">.</span><span class="n">id</span>
<span class="n">my_aliases</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_channel_aliases</span><span class="p">(</span><span class="n">chan</span><span class="p">))</span>
<span class="n">comtable</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span>
<span class="o">*</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{}{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">chan</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
<span class="s2">&quot;(</span><span class="si">{}</span><span class="s2">)&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">()))</span> <span class="k">if</span> <span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">()</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">),</span>
<span class="o">*</span><span class="p">(</span>
<span class="n">chanid</span><span class="p">,</span>
<span class="s2">&quot;</span><span class="si">{key}{aliases}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="n">chan</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="s2">&quot;;&quot;</span><span class="o">+</span> <span class="s2">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">())</span> <span class="k">if</span> <span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">()</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="p">),</span>
<span class="n">my_aliases</span><span class="p">,</span>
<span class="n">locks</span><span class="p">,</span>
<span class="n">chan</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span><span class="p">))</span>
<span class="n">chan</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">comtable</span></div>
<div class="viewcode-block" id="CmdChannel.display_all_channels"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannel.display_all_channels">[docs]</a> <span class="k">def</span> <span class="nf">display_all_channels</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">subscribed</span><span class="p">,</span> <span class="n">available</span><span class="p">):</span>

View file

@ -83,7 +83,7 @@
<span class="kn">from</span> <span class="nn">evennia.commands.command</span> <span class="kn">import</span> <span class="n">Command</span><span class="p">,</span> <span class="n">InterruptCommand</span>
<span class="kn">from</span> <span class="nn">evennia.commands</span> <span class="kn">import</span> <span class="n">cmdparser</span>
<span class="kn">from</span> <span class="nn">evennia.commands.cmdset</span> <span class="kn">import</span> <span class="n">CmdSet</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">ansi</span><span class="p">,</span> <span class="n">utils</span><span class="p">,</span> <span class="n">gametime</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">ansi</span><span class="p">,</span> <span class="n">utils</span><span class="p">,</span> <span class="n">gametime</span><span class="p">,</span> <span class="n">create</span>
<span class="kn">from</span> <span class="nn">evennia.server.sessionhandler</span> <span class="kn">import</span> <span class="n">SESSIONS</span>
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">search_object</span>
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">DefaultObject</span><span class="p">,</span> <span class="n">DefaultCharacter</span>
@ -1771,6 +1771,23 @@
<span class="s2">&quot;Global Script Deleted -&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_script_multi_delete"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_script_multi_delete">[docs]</a> <span class="k">def</span> <span class="nf">test_script_multi_delete</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">script1</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_script</span><span class="p">()</span>
<span class="n">script2</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_script</span><span class="p">()</span>
<span class="n">script3</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_script</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdScripts</span><span class="p">(),</span>
<span class="s2">&quot;/delete #</span><span class="si">{}</span><span class="s2">-#</span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">script1</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">script3</span><span class="o">.</span><span class="n">id</span><span class="p">),</span>
<span class="s2">&quot;Global Script Deleted - #2 (evennia.scripts.scripts.DefaultScript)|&quot;</span>
<span class="s2">&quot;Global Script Deleted - #3 (evennia.scripts.scripts.DefaultScript)|&quot;</span>
<span class="s2">&quot;Global Script Deleted - #4 (evennia.scripts.scripts.DefaultScript)&quot;</span><span class="p">,</span>
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;y&quot;</span><span class="p">]</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="n">script1</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">assertFalse</span><span class="p">(</span><span class="n">script2</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">assertFalse</span><span class="p">(</span><span class="n">script3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_teleport"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_teleport">[docs]</a> <span class="k">def</span> <span class="nf">test_teleport</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">oid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj1</span><span class="o">.</span><span class="n">id</span>

View file

@ -48,10 +48,12 @@
<span class="sd">&quot;&quot;&quot;</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.db.models</span> <span class="kn">import</span> <span class="n">Q</span>
<span class="kn">from</span> <span class="nn">evennia.typeclasses.managers</span> <span class="kn">import</span> <span class="n">TypedObjectManager</span><span class="p">,</span> <span class="n">TypeclassManager</span>
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">dbref</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">dbref</span><span class="p">,</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">class_from_module</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">_AccountDB</span> <span class="o">=</span> <span class="kc">None</span>
@ -278,7 +280,7 @@
<span class="sd"> always gives only one match.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Queryset: Message matches.</span>
<span class="sd"> Queryset: Iterable with 0, 1 or more matches.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># unique msg id</span>
@ -328,8 +330,57 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">sender_restrict</span> <span class="o">&amp;</span> <span class="n">receiver_restrict</span> <span class="o">&amp;</span> <span class="n">fulltext_restrict</span><span class="p">)</span></div>
<span class="c1"># back-compatibility alias</span>
<span class="n">message_search</span> <span class="o">=</span> <span class="n">search_message</span></div>
<span class="n">message_search</span> <span class="o">=</span> <span class="n">search_message</span>
<div class="viewcode-block" id="MsgManager.create_message"><a class="viewcode-back" href="../../../api/evennia.comms.managers.html#evennia.comms.comms.MsgManager.create_message">[docs]</a> <span class="k">def</span> <span class="nf">create_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">senderobj</span><span class="p">,</span> <span class="n">message</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">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">header</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a new communication Msg. Msgs represent a unit of</span>
<span class="sd"> database-persistent communication between entites.</span>
<span class="sd"> Args:</span>
<span class="sd"> senderobj (Object, Account, Script, str or list): The entity (or</span>
<span class="sd"> entities) sending the Msg. If a `str`, this is the id-string</span>
<span class="sd"> for an external sender type.</span>
<span class="sd"> message (str): Text with the message. Eventual headers, titles</span>
<span class="sd"> etc should all be included in this text string. Formatting</span>
<span class="sd"> will be retained.</span>
<span class="sd"> receivers (Object, Account, Script, str or list): An Account/Object to send</span>
<span class="sd"> to, or a list of them. If a string, it&#39;s an identifier for an external</span>
<span class="sd"> receiver.</span>
<span class="sd"> locks (str): Lock definition string.</span>
<span class="sd"> tags (list): A list of tags or tuples `(tag, category)`.</span>
<span class="sd"> header (str): Mime-type or other optional information for the message</span>
<span class="sd"> Notes:</span>
<span class="sd"> The Comm system is created to be very open-ended, so it&#39;s fully</span>
<span class="sd"> possible to let a message both go several receivers at the same time,</span>
<span class="sd"> it&#39;s up to the command definitions to limit this as desired.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="s1">&#39;channels&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span>
<span class="s2">&quot;create_message() does not accept &#39;channel&#39; kwarg anymore &quot;</span>
<span class="s2">&quot;- channels no longer accept Msg objects.&quot;</span>
<span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">message</span><span class="p">:</span>
<span class="c1"># we don&#39;t allow empty messages.</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">new_message</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">(</span><span class="n">db_message</span><span class="o">=</span><span class="n">message</span><span class="p">)</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">save</span><span class="p">()</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">senderobj</span><span class="p">):</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">senders</span> <span class="o">=</span> <span class="n">sender</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="n">header</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="n">new_message</span><span class="o">.</span><span class="n">receivers</span> <span class="o">=</span> <span class="n">receiver</span>
<span class="k">if</span> <span class="n">locks</span><span class="p">:</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span>
<span class="k">if</span> <span class="n">tags</span><span class="p">:</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">batch_add</span><span class="p">(</span><span class="o">*</span><span class="n">tags</span><span class="p">)</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="k">return</span> <span class="n">new_message</span></div></div>
<span class="c1">#</span>
<span class="c1"># Channel manager</span>
@ -412,13 +463,16 @@
<span class="sd"> exact (bool, optional): Require an exact (but not</span>
<span class="sd"> case sensitive) match.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Queryset: Iterable with 0, 1 or more matches.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">dbref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">ostring</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dbref</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">dbref</span><span class="p">)</span>
<span class="k">except</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
<span class="k">pass</span>
<span class="n">dbref_match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">search_dbref</span><span class="p">(</span><span class="n">dbref</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dbref_match</span><span class="p">:</span>
<span class="k">return</span> <span class="n">dbref_match</span>
<span class="k">if</span> <span class="n">exact</span><span class="p">:</span>
<span class="n">channels</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
<span class="n">Q</span><span class="p">(</span><span class="n">db_key__iexact</span><span class="o">=</span><span class="n">ostring</span><span class="p">)</span>
@ -431,6 +485,56 @@
<span class="p">)</span><span class="o">.</span><span class="n">distinct</span><span class="p">()</span>
<span class="k">return</span> <span class="n">channels</span></div>
<div class="viewcode-block" id="ChannelDBManager.create_channel"><a class="viewcode-back" href="../../../api/evennia.comms.managers.html#evennia.comms.comms.ChannelDBManager.create_channel">[docs]</a> <span class="k">def</span> <span class="nf">create_channel</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">keep_log</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create A communication Channel. A Channel serves as a central hub</span>
<span class="sd"> for distributing Msgs to groups of people without specifying the</span>
<span class="sd"> receivers explicitly. Instead accounts may &#39;connect&#39; to the channel</span>
<span class="sd"> and follow the flow of messages. By default the channel allows</span>
<span class="sd"> access to all old messages, but this can be turned off with the</span>
<span class="sd"> keep_log switch.</span>
<span class="sd"> Args:</span>
<span class="sd"> key (str): This must be unique.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> aliases (list of str): List of alternative (likely shorter) keynames.</span>
<span class="sd"> desc (str): A description of the channel, for use in listings.</span>
<span class="sd"> locks (str): Lockstring.</span>
<span class="sd"> keep_log (bool): Log channel throughput.</span>
<span class="sd"> typeclass (str or class): The typeclass of the Channel (not</span>
<span class="sd"> often used).</span>
<span class="sd"> tags (list): A list of tags or tuples `(tag, category)`.</span>
<span class="sd"> Returns:</span>
<span class="sd"> channel (Channel): A newly created channel.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_CHANNEL_TYPECLASS</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="c1"># a path is given. Load the actual typeclass</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
<span class="c1"># create new instance</span>
<span class="n">new_channel</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span><span class="n">db_key</span><span class="o">=</span><span class="n">key</span><span class="p">)</span>
<span class="c1"># store call signature for the signal</span>
<span class="n">new_channel</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span> <span class="n">keep_log</span><span class="o">=</span><span class="n">keep_log</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="n">tags</span>
<span class="p">)</span>
<span class="c1"># this will trigger the save signal which in turn calls the</span>
<span class="c1"># at_first_save hook on the typeclass, where the _createdict can be</span>
<span class="c1"># used.</span>
<span class="n">new_channel</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_CHANNEL_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_channel</span><span class="p">)</span>
<span class="k">return</span> <span class="n">new_channel</span></div>
<span class="c1"># back-compatibility alias</span>
<span class="n">channel_search</span> <span class="o">=</span> <span class="n">search_channel</span></div>

View file

@ -456,7 +456,7 @@
<span class="c1"># ------------------------------------------------------------</span>
<div class="viewcode-block" id="TempMsg"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.models.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>
<div class="viewcode-block" id="TempMsg"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.models.TempMsg">[docs]</a><span class="k">class</span> <span class="nc">TempMsg</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This is a non-persistent object for sending temporary messages that will not be stored. It</span>
<span class="sd"> mimics the &quot;real&quot; Msg object, but doesn&#39;t require sender to be given.</span>

View file

@ -44,8 +44,11 @@
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Custom manager for HelpEntry objects.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">django.db</span> <span class="kn">import</span> <span class="n">IntegrityError</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span><span class="p">,</span> <span class="n">utils</span>
<span class="kn">from</span> <span class="nn">evennia.typeclasses.managers</span> <span class="kn">import</span> <span class="n">TypedObjectManager</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">make_iter</span>
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;HelpEntryManager&quot;</span><span class="p">,)</span>
@ -186,12 +189,58 @@
<span class="sd"> ostring (str): The help topic to look for.</span>
<span class="sd"> category (str): Limit the search to a particular help topic</span>
<span class="sd"> Returns:</span>
<span class="sd"> Queryset: An iterable with 0, 1 or more matches.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">ostring</span> <span class="o">=</span> <span class="n">ostring</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">if</span> <span class="n">help_category</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_key__iexact</span><span class="o">=</span><span class="n">ostring</span><span class="p">,</span> <span class="n">db_help_category__iexact</span><span class="o">=</span><span class="n">help_category</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_key__iexact</span><span class="o">=</span><span class="n">ostring</span><span class="p">)</span></div></div>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_key__iexact</span><span class="o">=</span><span class="n">ostring</span><span class="p">)</span></div>
<div class="viewcode-block" id="HelpEntryManager.create_help"><a class="viewcode-back" href="../../../api/evennia.help.manager.html#evennia.help.manager.HelpEntryManager.create_help">[docs]</a> <span class="k">def</span> <span class="nf">create_help</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">entrytext</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">&quot;General&quot;</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a static help entry in the help database. Note that Command</span>
<span class="sd"> help entries are dynamic and directly taken from the __doc__</span>
<span class="sd"> entries of the command. The database-stored help entries are</span>
<span class="sd"> intended for more general help on the game, more extensive info,</span>
<span class="sd"> in-game setting information and so on.</span>
<span class="sd"> Args:</span>
<span class="sd"> key (str): The name of the help entry.</span>
<span class="sd"> entrytext (str): The body of te help entry</span>
<span class="sd"> category (str, optional): The help category of the entry.</span>
<span class="sd"> locks (str, optional): A lockstring to restrict access.</span>
<span class="sd"> aliases (list of str, optional): List of alternative (likely shorter) keynames.</span>
<span class="sd"> tags (lst, optional): List of tags or tuples `(tag, category)`.</span>
<span class="sd"> Returns:</span>
<span class="sd"> help (HelpEntry): A newly created help entry.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">new_help</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">()</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">key</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">entrytext</span> <span class="o">=</span> <span class="n">entrytext</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">help_category</span> <span class="o">=</span> <span class="n">category</span>
<span class="k">if</span> <span class="n">locks</span><span class="p">:</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span>
<span class="k">if</span> <span class="n">aliases</span><span class="p">:</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">make_iter</span><span class="p">(</span><span class="n">aliases</span><span class="p">))</span>
<span class="k">if</span> <span class="n">tags</span><span class="p">:</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">batch_add</span><span class="p">(</span><span class="o">*</span><span class="n">tags</span><span class="p">)</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="k">return</span> <span class="n">new_help</span>
<span class="k">except</span> <span class="n">IntegrityError</span><span class="p">:</span>
<span class="n">string</span> <span class="o">=</span> <span class="s2">&quot;Could not add help entry: key &#39;</span><span class="si">%s</span><span class="s2">&#39; already exists.&quot;</span> <span class="o">%</span> <span class="n">key</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_HELPENTRY_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_help</span><span class="p">)</span></div></div>
</pre></div>
<div class="clearer"></div>

View file

@ -50,6 +50,9 @@
<span class="kn">from</span> <span class="nn">django.db.models.fields</span> <span class="kn">import</span> <span class="n">exceptions</span>
<span class="kn">from</span> <span class="nn">evennia.typeclasses.managers</span> <span class="kn">import</span> <span class="n">TypedObjectManager</span><span class="p">,</span> <span class="n">TypeclassManager</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">is_iter</span><span class="p">,</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">string_partial_matching</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">dbid_to_obj</span>
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;ObjectManager&quot;</span><span class="p">,</span> <span class="s2">&quot;ObjectDBManager&quot;</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>
@ -72,7 +75,7 @@
<span class="sd"> Querysets or database objects).</span>
<span class="sd"> dbref (converter)</span>
<span class="sd"> get_id (alias: dbref_search)</span>
<span class="sd"> dbref_search</span>
<span class="sd"> get_dbref_range</span>
<span class="sd"> object_totals</span>
<span class="sd"> typeclass_search</span>
@ -202,8 +205,8 @@
<span class="sd"> typeclasses (list, optional): Python pats to restrict matches with.</span>
<span class="sd"> Returns:</span>
<span class="sd"> matches (query): Objects fullfilling both the `attribute_name` and</span>
<span class="sd"> `attribute_value` criterions.</span>
<span class="sd"> Queryset: Iterable with 0, 1 or more matches fullfilling both the `attribute_name` and</span>
<span class="sd"> `attribute_value` criterions.</span>
<span class="sd"> Notes:</span>
<span class="sd"> This uses the Attribute&#39;s PickledField to transparently search the database by matching</span>
@ -262,6 +265,9 @@
<span class="sd"> candidates (list, optional): List of objects to limit search to.</span>
<span class="sd"> typeclasses (list, optional): List of typeclass-path strings to restrict matches with</span>
<span class="sd"> Returns:</span>
<span class="sd"> Queryset: Iterable with 0, 1 or more matches.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">property_name</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">property_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;db_&quot;</span><span class="p">):</span>
@ -274,11 +280,10 @@
<span class="p">)</span>
<span class="n">type_restriction</span> <span class="o">=</span> <span class="n">typeclasses</span> <span class="ow">and</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_typeclass_path__in</span><span class="o">=</span><span class="n">make_iter</span><span class="p">(</span><span class="n">typeclasses</span><span class="p">))</span> <span class="ow">or</span> <span class="n">Q</span><span class="p">()</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">cand_restriction</span> <span class="o">&amp;</span> <span class="n">type_restriction</span> <span class="o">&amp;</span> <span class="n">Q</span><span class="p">(</span><span class="o">**</span><span class="n">querykwargs</span><span class="p">))</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">&quot;id&quot;</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
<span class="n">cand_restriction</span> <span class="o">&amp;</span> <span class="n">type_restriction</span> <span class="o">&amp;</span> <span class="n">Q</span><span class="p">(</span><span class="o">**</span><span class="n">querykwargs</span><span class="p">))</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">&quot;id&quot;</span><span class="p">)</span>
<span class="k">except</span> <span class="n">exceptions</span><span class="o">.</span><span class="n">FieldError</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[]</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>
@ -286,7 +291,7 @@
<span class="s2">&quot;The property &#39;</span><span class="si">%s</span><span class="s2">&#39; does not support search criteria of the type </span><span class="si">%s</span><span class="s2">.&quot;</span>
<span class="o">%</span> <span class="p">(</span><span class="n">property_name</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">property_value</span><span class="p">))</span>
<span class="p">)</span>
<span class="k">return</span> <span class="p">[]</span></div>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span></div>
<div class="viewcode-block" id="ObjectDBManager.get_contents"><a class="viewcode-back" href="../../../api/evennia.objects.manager.html#evennia.objects.manager.ObjectDBManager.get_contents">[docs]</a> <span class="k">def</span> <span class="nf">get_contents</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">location</span><span class="p">,</span> <span class="n">excludeobj</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -298,7 +303,8 @@
<span class="sd"> to exclude from the match.</span>
<span class="sd"> Returns:</span>
<span class="sd"> contents (query): Matching contents, without excludeobj, if given.</span>
<span class="sd"> Queryset: Iterable with 0, 1 or more matches.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">exclude_restriction</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">Q</span><span class="p">(</span><span class="n">pk__in</span><span class="o">=</span><span class="p">[</span><span class="n">_GA</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;id&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">excludeobj</span><span class="p">)])</span> <span class="k">if</span> <span class="n">excludeobj</span> <span class="k">else</span> <span class="n">Q</span><span class="p">()</span>
@ -316,17 +322,18 @@
<span class="sd"> typeclasses (list): Only match objects with typeclasses having thess path strings.</span>
<span class="sd"> Returns:</span>
<span class="sd"> matches (query): A list of matches of length 0, 1 or more.</span>
<span class="sd"> Queryset: An iterable with 0, 1 or more matches.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ostring</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">ostring</span><span class="p">,</span> <span class="s2">&quot;key&quot;</span><span class="p">):</span>
<span class="n">ostring</span> <span class="o">=</span> <span class="n">ostring</span><span class="o">.</span><span class="n">key</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[]</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
<span class="k">if</span> <span class="n">is_iter</span><span class="p">(</span><span class="n">candidates</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="n">candidates</span><span class="p">):</span>
<span class="c1"># if candidates is an empty iterable there can be no matches</span>
<span class="c1"># Exit early.</span>
<span class="k">return</span> <span class="p">[]</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
<span class="c1"># build query objects</span>
<span class="n">candidates_id</span> <span class="o">=</span> <span class="p">[</span><span class="n">_GA</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;id&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">candidates</span><span class="p">)</span> <span class="k">if</span> <span class="n">obj</span><span class="p">]</span>
@ -367,10 +374,12 @@
<span class="c1"># fuzzy matching</span>
<span class="n">key_strings</span> <span class="o">=</span> <span class="n">search_candidates</span><span class="o">.</span><span class="n">values_list</span><span class="p">(</span><span class="s2">&quot;db_key&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">&quot;id&quot;</span><span class="p">)</span>
<span class="n">match_ids</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">index_matches</span> <span class="o">=</span> <span class="n">string_partial_matching</span><span class="p">(</span><span class="n">key_strings</span><span class="p">,</span> <span class="n">ostring</span><span class="p">,</span> <span class="n">ret_index</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">if</span> <span class="n">index_matches</span><span class="p">:</span>
<span class="c1"># a match by key</span>
<span class="k">return</span> <span class="p">[</span><span class="n">obj</span> <span class="k">for</span> <span class="n">ind</span><span class="p">,</span> <span class="n">obj</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">search_candidates</span><span class="p">)</span> <span class="k">if</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">index_matches</span><span class="p">]</span>
<span class="n">match_ids</span> <span class="o">=</span> <span class="p">[</span><span class="n">obj</span><span class="o">.</span><span class="n">id</span> <span class="k">for</span> <span class="n">ind</span><span class="p">,</span> <span class="n">obj</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">search_candidates</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">index_matches</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># match by alias rather than by key</span>
<span class="n">search_candidates</span> <span class="o">=</span> <span class="n">search_candidates</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
@ -386,8 +395,10 @@
<span class="n">index_matches</span> <span class="o">=</span> <span class="n">string_partial_matching</span><span class="p">(</span><span class="n">alias_strings</span><span class="p">,</span> <span class="n">ostring</span><span class="p">,</span> <span class="n">ret_index</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">if</span> <span class="n">index_matches</span><span class="p">:</span>
<span class="c1"># it&#39;s possible to have multiple matches to the same Object, we must weed those out</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">({</span><span class="n">alias_candidates</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span> <span class="k">for</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">index_matches</span><span class="p">})</span>
<span class="k">return</span> <span class="p">[]</span></div>
<span class="n">match_ids</span> <span class="o">=</span> <span class="p">[</span><span class="n">alias_candidates</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span><span class="o">.</span><span class="n">id</span> <span class="k">for</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">index_matches</span><span class="p">]</span>
<span class="c1"># TODO - not ideal to have to do a second lookup here, but we want to return a queryset</span>
<span class="c1"># rather than a list ... maybe the above queries can be improved.</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">id__in</span><span class="o">=</span><span class="n">match_ids</span><span class="p">)</span></div>
<span class="c1"># main search methods and helper functions</span>
@ -462,7 +473,7 @@
<span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">searchdata</span> <span class="ow">and</span> <span class="n">searchdata</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[]</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
<span class="k">if</span> <span class="n">typeclass</span><span class="p">:</span>
<span class="c1"># typeclass may also be a list</span>
@ -490,10 +501,11 @@
<span class="c1"># Easiest case - dbref matching (always exact)</span>
<span class="n">dbref_match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref_search</span><span class="p">(</span><span class="n">dbref</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dbref_match</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">candidates</span> <span class="ow">or</span> <span class="n">dbref_match</span> <span class="ow">in</span> <span class="n">candidates</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[</span><span class="n">dbref_match</span><span class="p">]</span>
<span class="n">dmatch</span> <span class="o">=</span> <span class="n">dbref_match</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">candidates</span> <span class="ow">or</span> <span class="n">dmatch</span> <span class="ow">in</span> <span class="n">candidates</span><span class="p">:</span>
<span class="k">return</span> <span class="n">dbref_match</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[]</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
<span class="c1"># Search through all possibilities.</span>
<span class="n">match_number</span> <span class="o">=</span> <span class="kc">None</span>
@ -518,15 +530,16 @@
<span class="c1"># this indicates trying to get a single match with a match-number</span>
<span class="c1"># targeting some higher-number match (like 2-box when there is only</span>
<span class="c1"># one box in the room). This leads to a no-match.</span>
<span class="n">matches</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">matches</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">match_number</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># multiple matches, but a number was given to separate them</span>
<span class="k">if</span> <span class="mi">0</span> <span class="o">&lt;=</span> <span class="n">match_number</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">matches</span><span class="p">):</span>
<span class="c1"># limit to one match</span>
<span class="n">matches</span> <span class="o">=</span> <span class="p">[</span><span class="n">matches</span><span class="p">[</span><span class="n">match_number</span><span class="p">]]</span>
<span class="c1"># limit to one match (we still want a queryset back)</span>
<span class="c1"># TODO: Can we do this some other way and avoid a second lookup?</span>
<span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">matches</span><span class="p">[</span><span class="n">match_number</span><span class="p">]</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># a number was given outside of range. This means a no-match.</span>
<span class="n">matches</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
<span class="c1"># return a list (possibly empty)</span>
<span class="k">return</span> <span class="n">matches</span></div>
@ -636,7 +649,118 @@
<span class="sd"> db_account field set.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_sessid__isnull</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">db_sessid</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></div></div>
<span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_sessid__isnull</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">db_sessid</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="ObjectDBManager.create_object"><a class="viewcode-back" href="../../../api/evennia.objects.manager.html#evennia.objects.manager.ObjectDBManager.create_object">[docs]</a> <span class="k">def</span> <span class="nf">create_object</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">location</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">home</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">destination</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">nohome</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">nattributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a new in-game object.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> typeclass (class or str): Class or python path to a typeclass.</span>
<span class="sd"> key (str): Name of the new object. If not set, a name of</span>
<span class="sd"> `#dbref` will be set.</span>
<span class="sd"> location (Object or str): Obj or #dbref to use as the location of the new object.</span>
<span class="sd"> home (Object or str): Obj or #dbref to use as the object&#39;s home location.</span>
<span class="sd"> permissions (list): A list of permission strings or tuples (permstring, category).</span>
<span class="sd"> locks (str): one or more lockstrings, separated by semicolons.</span>
<span class="sd"> aliases (list): A list of alternative keys or tuples (aliasstring, category).</span>
<span class="sd"> tags (list): List of tag keys or tuples (tagkey, category) or (tagkey, category, data).</span>
<span class="sd"> destination (Object or str): Obj or #dbref to use as an Exit&#39;s target.</span>
<span class="sd"> report_to (Object): The object to return error messages to.</span>
<span class="sd"> nohome (bool): This allows the creation of objects without a</span>
<span class="sd"> default home location; only used when creating the default</span>
<span class="sd"> location itself or during unittests.</span>
<span class="sd"> attributes (list): Tuples on the form (key, value) or (key, value, category),</span>
<span class="sd"> (key, value, lockstring) or (key, value, lockstring, default_access).</span>
<span class="sd"> to set as Attributes on the new object.</span>
<span class="sd"> nattributes (list): Non-persistent tuples on the form (key, value). Note that</span>
<span class="sd"> adding this rarely makes sense since this data will not survive a reload.</span>
<span class="sd"> Returns:</span>
<span class="sd"> object (Object): A newly created object of the given typeclass.</span>
<span class="sd"> Raises:</span>
<span class="sd"> ObjectDB.DoesNotExist: If trying to create an Object with</span>
<span class="sd"> `location` or `home` that can&#39;t be found.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_OBJECT_TYPECLASS</span>
<span class="c1"># convenience converters to avoid common usage mistake</span>
<span class="n">permissions</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">permissions</span><span class="p">)</span> <span class="k">if</span> <span class="n">permissions</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">locks</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span> <span class="k">if</span> <span class="n">locks</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span> <span class="k">if</span> <span class="n">aliases</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="c1"># a path is given. Load the actual typeclass</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
<span class="c1"># Setup input for the create command. We use ObjectDB as baseclass here</span>
<span class="c1"># to give us maximum freedom (the typeclasses will load</span>
<span class="c1"># correctly when each object is recovered).</span>
<span class="n">location</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">location</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
<span class="n">destination</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">destination</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
<span class="n">home</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">home</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">home</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">nohome</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">except</span> <span class="bp">self</span><span class="o">.</span><span class="n">model_ObjectDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
<span class="k">raise</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">(</span>
<span class="s2">&quot;settings.DEFAULT_HOME (= &#39;</span><span class="si">%s</span><span class="s2">&#39;) does not exist, or the setting is malformed.&quot;</span>
<span class="o">%</span> <span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span>
<span class="p">)</span>
<span class="c1"># create new instance</span>
<span class="n">new_object</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span>
<span class="n">db_key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<span class="n">db_location</span><span class="o">=</span><span class="n">location</span><span class="p">,</span>
<span class="n">db_destination</span><span class="o">=</span><span class="n">destination</span><span class="p">,</span>
<span class="n">db_home</span><span class="o">=</span><span class="n">home</span><span class="p">,</span>
<span class="n">db_typeclass_path</span><span class="o">=</span><span class="n">typeclass</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># store the call signature for the signal</span>
<span class="n">new_object</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<span class="n">location</span><span class="o">=</span><span class="n">location</span><span class="p">,</span>
<span class="n">destination</span><span class="o">=</span><span class="n">destination</span><span class="p">,</span>
<span class="n">home</span><span class="o">=</span><span class="n">home</span><span class="p">,</span>
<span class="n">typeclass</span><span class="o">=</span><span class="n">typeclass</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
<span class="n">permissions</span><span class="o">=</span><span class="n">permissions</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span>
<span class="n">nohome</span><span class="o">=</span><span class="n">nohome</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span><span class="p">,</span>
<span class="n">nattributes</span><span class="o">=</span><span class="n">nattributes</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># this will trigger the save signal which in turn calls the</span>
<span class="c1"># at_first_save hook on the typeclass, where the _createdict can be</span>
<span class="c1"># used.</span>
<span class="n">new_object</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_OBJECT_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_object</span><span class="p">)</span>
<span class="k">return</span> <span class="n">new_object</span></div></div>
<div class="viewcode-block" id="ObjectManager"><a class="viewcode-back" href="../../../api/evennia.objects.manager.html#evennia.objects.manager.ObjectManager">[docs]</a><span class="k">class</span> <span class="nc">ObjectManager</span><span class="p">(</span><span class="n">ObjectDBManager</span><span class="p">,</span> <span class="n">TypeclassManager</span><span class="p">):</span>

View file

@ -182,11 +182,11 @@
<span class="n">nattr</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
<span class="k">if</span> <span class="n">nattr</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="c1"># we assume a None-value</span>
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
<span class="k">elif</span> <span class="n">nattr</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">attr</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">attr</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
<span class="k">elif</span> <span class="n">nattr</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">attr</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">attr</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">attr</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">attr</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attr</span><span class="p">[:</span><span class="mi">4</span><span class="p">])</span>

View file

@ -45,13 +45,19 @@
<span class="sd">The custom manager for Scripts.</span>
<span class="sd">&quot;&quot;&quot;</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.db.models</span> <span class="kn">import</span> <span class="n">Q</span>
<span class="kn">from</span> <span class="nn">evennia.typeclasses.managers</span> <span class="kn">import</span> <span class="n">TypedObjectManager</span><span class="p">,</span> <span class="n">TypeclassManager</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">make_iter</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">dbid_to_obj</span>
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;ScriptManager&quot;</span><span class="p">,</span> <span class="s2">&quot;ScriptDBManager&quot;</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">_ObjectDB</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_AccountDB</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">VALIDATE_ITERATION</span> <span class="o">=</span> <span class="mi">0</span>
@ -65,7 +71,7 @@
<span class="sd"> Querysets or database objects).</span>
<span class="sd"> dbref (converter)</span>
<span class="sd"> get_id (or dbref_search)</span>
<span class="sd"> dbref_search</span>
<span class="sd"> get_dbref_range</span>
<span class="sd"> object_totals</span>
<span class="sd"> typeclass_search</span>
@ -124,7 +130,6 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
<span class="n">script</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">dbref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dbref</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">dbref</span><span class="p">)</span>
@ -176,6 +181,9 @@
<span class="sd"> on a timer.</span>
<span class="sd"> typeclass (class or str): Typeclass or path to typeclass.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Queryset: An iterable with 0, 1 or more results.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">ostring</span> <span class="o">=</span> <span class="n">ostring</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
@ -184,10 +192,10 @@
<span class="k">if</span> <span class="n">dbref</span><span class="p">:</span>
<span class="c1"># this is a dbref, try to find the script directly</span>
<span class="n">dbref_match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref_search</span><span class="p">(</span><span class="n">dbref</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dbref_match</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span>
<span class="p">(</span><span class="n">obj</span> <span class="ow">and</span> <span class="n">obj</span> <span class="o">!=</span> <span class="n">dbref_match</span><span class="o">.</span><span class="n">obj</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">only_timed</span> <span class="ow">and</span> <span class="n">dbref_match</span><span class="o">.</span><span class="n">interval</span><span class="p">)</span>
<span class="p">):</span>
<span class="k">return</span> <span class="p">[</span><span class="n">dbref_match</span><span class="p">]</span>
<span class="k">if</span> <span class="n">dbref_match</span><span class="p">:</span>
<span class="n">dmatch</span> <span class="o">=</span> <span class="n">dbref_match</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span> <span class="ow">and</span> <span class="n">obj</span> <span class="o">!=</span> <span class="n">dmatch</span><span class="o">.</span><span class="n">obj</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">only_timed</span> <span class="ow">and</span> <span class="n">dmatch</span><span class="o">.</span><span class="n">interval</span><span class="p">):</span>
<span class="k">return</span> <span class="n">dbref_match</span>
<span class="k">if</span> <span class="n">typeclass</span><span class="p">:</span>
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">typeclass</span><span class="p">):</span>
@ -232,6 +240,129 @@
<span class="n">new_script</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_script</span><span class="p">(</span>
<span class="n">typeclass</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">new_key</span><span class="p">,</span> <span class="n">obj</span><span class="o">=</span><span class="n">new_obj</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="n">new_locks</span><span class="p">,</span> <span class="n">autostart</span><span class="o">=</span><span class="kc">True</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">new_script</span></div>
<div class="viewcode-block" id="ScriptDBManager.create_script"><a class="viewcode-back" href="../../../api/evennia.scripts.manager.html#evennia.scripts.manager.ScriptDBManager.create_script">[docs]</a> <span class="k">def</span> <span class="nf">create_script</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">obj</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">account</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">interval</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">start_delay</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">repeats</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">persistent</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">autostart</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a new script. All scripts are a combination of a database</span>
<span class="sd"> object that communicates with the database, and an typeclass that</span>
<span class="sd"> &#39;decorates&#39; the database object into being different types of</span>
<span class="sd"> scripts. It&#39;s behaviour is similar to the game objects except</span>
<span class="sd"> scripts has a time component and are more limited in scope.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> typeclass (class or str): Class or python path to a typeclass.</span>
<span class="sd"> key (str): Name of the new object. If not set, a name of</span>
<span class="sd"> #dbref will be set.</span>
<span class="sd"> obj (Object): The entity on which this Script sits. If this</span>
<span class="sd"> is `None`, we are creating a &quot;global&quot; script.</span>
<span class="sd"> account (Account): The account on which this Script sits. It is</span>
<span class="sd"> exclusiv to `obj`.</span>
<span class="sd"> locks (str): one or more lockstrings, separated by semicolons.</span>
<span class="sd"> interval (int): The triggering interval for this Script, in</span>
<span class="sd"> seconds. If unset, the Script will not have a timing</span>
<span class="sd"> component.</span>
<span class="sd"> start_delay (bool): If `True`, will wait `interval` seconds</span>
<span class="sd"> before triggering the first time.</span>
<span class="sd"> repeats (int): The number of times to trigger before stopping.</span>
<span class="sd"> If unset, will repeat indefinitely.</span>
<span class="sd"> persistent (bool): If this Script survives a server shutdown</span>
<span class="sd"> or not (all Scripts will survive a reload).</span>
<span class="sd"> autostart (bool): If this Script will start immediately when</span>
<span class="sd"> created or if the `start` method must be called explicitly.</span>
<span class="sd"> report_to (Object): The object to return error messages to.</span>
<span class="sd"> desc (str): Optional description of script</span>
<span class="sd"> tags (list): List of tags or tuples (tag, category).</span>
<span class="sd"> attributes (list): List if tuples (key, value) or (key, value, category)</span>
<span class="sd"> (key, value, lockstring) or (key, value, lockstring, default_access).</span>
<span class="sd"> Returns:</span>
<span class="sd"> script (obj): An instance of the script created</span>
<span class="sd"> See evennia.scripts.manager for methods to manipulate existing</span>
<span class="sd"> scripts in the database.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">global</span> <span class="n">_ObjectDB</span><span class="p">,</span> <span class="n">_AccountDB</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_ObjectDB</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.objects.models</span> <span class="kn">import</span> <span class="n">ObjectDB</span> <span class="k">as</span> <span class="n">_ObjectDB</span>
<span class="kn">from</span> <span class="nn">evennia.accounts.models</span> <span class="kn">import</span> <span class="n">AccountDB</span> <span class="k">as</span> <span class="n">_AccountDB</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_SCRIPT_TYPECLASS</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="c1"># a path is given. Load the actual typeclass</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
<span class="c1"># validate input</span>
<span class="n">kwarg</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_key&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">key</span>
<span class="k">if</span> <span class="n">account</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_account&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">account</span><span class="p">,</span> <span class="n">_AccountDB</span><span class="p">)</span>
<span class="k">if</span> <span class="n">obj</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_obj&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span>
<span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_interval&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">interval</span><span class="p">)</span>
<span class="k">if</span> <span class="n">start_delay</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_start_delay&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">start_delay</span>
<span class="k">if</span> <span class="n">repeats</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_repeats&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">repeats</span><span class="p">)</span>
<span class="k">if</span> <span class="n">persistent</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_persistent&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">persistent</span>
<span class="k">if</span> <span class="n">desc</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_desc&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">desc</span>
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="c1"># create new instance</span>
<span class="n">new_script</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span><span class="o">**</span><span class="n">kwarg</span><span class="p">)</span>
<span class="c1"># store the call signature for the signal</span>
<span class="n">new_script</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<span class="n">obj</span><span class="o">=</span><span class="n">obj</span><span class="p">,</span>
<span class="n">account</span><span class="o">=</span><span class="n">account</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span>
<span class="n">interval</span><span class="o">=</span><span class="n">interval</span><span class="p">,</span>
<span class="n">start_delay</span><span class="o">=</span><span class="n">start_delay</span><span class="p">,</span>
<span class="n">repeats</span><span class="o">=</span><span class="n">repeats</span><span class="p">,</span>
<span class="n">persistent</span><span class="o">=</span><span class="n">persistent</span><span class="p">,</span>
<span class="n">autostart</span><span class="o">=</span><span class="n">autostart</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span>
<span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># this will trigger the save signal which in turn calls the</span>
<span class="c1"># at_first_save hook on the typeclass, where the _createdict</span>
<span class="c1"># can be used.</span>
<span class="n">new_script</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">new_script</span><span class="o">.</span><span class="n">id</span><span class="p">:</span>
<span class="c1"># this happens in the case of having a repeating script with `repeats=1` and</span>
<span class="c1"># `start_delay=False` - the script will run once and immediately stop before</span>
<span class="c1"># save is over.</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_SCRIPT_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_script</span><span class="p">)</span>
<span class="k">return</span> <span class="n">new_script</span></div></div>

View file

@ -136,11 +136,25 @@
<span class="c1"># make sure to clean data from database</span>
<span class="n">ServerConfig</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">conf</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">savekey</span><span class="p">,</span> <span class="n">delete</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">_attr_category_fieldname</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">category</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Modify the saved fieldname to make sure to differentiate between Attributes</span>
<span class="sd"> with different categories.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">fieldname</span><span class="si">}</span><span class="s2">[</span><span class="si">{</span><span class="n">category</span><span class="si">}</span><span class="s2">]&quot;</span> <span class="k">if</span> <span class="n">category</span> <span class="k">else</span> <span class="n">fieldname</span>
<div class="viewcode-block" id="MonitorHandler.at_update"><a class="viewcode-back" href="../../../api/evennia.scripts.monitorhandler.html#evennia.scripts.monitorhandler.MonitorHandler.at_update">[docs]</a> <span class="k">def</span> <span class="nf">at_update</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="n">fieldname</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Called by the field/attribute as it saves.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># if this an Attribute with a category we should differentiate</span>
<span class="n">fieldname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_category_fieldname</span><span class="p">(</span>
<span class="n">fieldname</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_category</span>
<span class="k">if</span> <span class="n">fieldname</span> <span class="o">==</span> <span class="s2">&quot;db_value&quot;</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;db_category&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
<span class="p">)</span>
<span class="n">to_delete</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="n">obj</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitors</span> <span class="ow">and</span> <span class="n">fieldname</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitors</span><span class="p">[</span><span class="n">obj</span><span class="p">]:</span>
<span class="k">for</span> <span class="n">idstring</span><span class="p">,</span> <span class="p">(</span><span class="n">callback</span><span class="p">,</span> <span class="n">persistent</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitors</span><span class="p">[</span><span class="n">obj</span><span class="p">][</span><span class="n">fieldname</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
@ -153,7 +167,8 @@
<span class="k">for</span> <span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">idstring</span><span class="p">)</span> <span class="ow">in</span> <span class="n">to_delete</span><span class="p">:</span>
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitors</span><span class="p">[</span><span class="n">obj</span><span class="p">][</span><span class="n">fieldname</span><span class="p">][</span><span class="n">idstring</span><span class="p">]</span></div>
<div class="viewcode-block" id="MonitorHandler.add"><a class="viewcode-back" href="../../../api/evennia.scripts.monitorhandler.html#evennia.scripts.monitorhandler.MonitorHandler.add">[docs]</a> <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">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">idstring</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">persistent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<div class="viewcode-block" id="MonitorHandler.add"><a class="viewcode-back" href="../../../api/evennia.scripts.monitorhandler.html#evennia.scripts.monitorhandler.MonitorHandler.add">[docs]</a> <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">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">idstring</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">persistent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Add monitoring to a given field or Attribute. A field must</span>
<span class="sd"> be specified with the full db_* name or it will be assumed</span>
@ -169,6 +184,9 @@
<span class="sd"> of the same field and object.</span>
<span class="sd"> persistent (bool, optional): If False, the monitor will survive</span>
<span class="sd"> a server reload but not a cold restart. This is default.</span>
<span class="sd"> category (str, optional): This is only used if `fieldname` refers to</span>
<span class="sd"> an Attribute (i.e. it does not start with `db_`). You must specify this</span>
<span class="sd"> if you want to target an Attribute with a category.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> session (Session): If this keyword is given, the monitorhandler will</span>
@ -183,7 +201,7 @@
<span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">fieldname</span><span class="p">,</span> <span class="n">return_obj</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
<span class="k">return</span>
<span class="n">fieldname</span> <span class="o">=</span> <span class="s2">&quot;db_value&quot;</span>
<span class="n">fieldname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_category_fieldname</span><span class="p">(</span><span class="s2">&quot;db_value&quot;</span><span class="p">,</span> <span class="n">category</span><span class="p">)</span>
<span class="c1"># we try to serialize this data to test it&#39;s valid. Otherwise we won&#39;t accept it.</span>
<span class="k">try</span><span class="p">:</span>
@ -203,7 +221,7 @@
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">monitors</span><span class="p">[</span><span class="n">obj</span><span class="p">][</span><span class="n">fieldname</span><span class="p">][</span><span class="n">idstring</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">callback</span><span class="p">,</span> <span class="n">persistent</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span></div>
<div class="viewcode-block" id="MonitorHandler.remove"><a class="viewcode-back" href="../../../api/evennia.scripts.monitorhandler.html#evennia.scripts.monitorhandler.MonitorHandler.remove">[docs]</a> <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">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">idstring</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
<div class="viewcode-block" id="MonitorHandler.remove"><a class="viewcode-back" href="../../../api/evennia.scripts.monitorhandler.html#evennia.scripts.monitorhandler.MonitorHandler.remove">[docs]</a> <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">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">idstring</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Remove a monitor.</span>
<span class="sd"> &quot;&quot;&quot;</span>
@ -211,7 +229,7 @@
<span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">fieldname</span><span class="p">,</span> <span class="n">return_obj</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
<span class="k">return</span>
<span class="n">fieldname</span> <span class="o">=</span> <span class="s2">&quot;db_value&quot;</span>
<span class="n">fieldname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_category_fieldname</span><span class="p">(</span><span class="s2">&quot;db_value&quot;</span><span class="p">,</span> <span class="n">category</span><span class="p">)</span>
<span class="n">idstring_dict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitors</span><span class="p">[</span><span class="n">obj</span><span class="p">][</span><span class="n">fieldname</span><span class="p">]</span>
<span class="k">if</span> <span class="n">idstring</span> <span class="ow">in</span> <span class="n">idstring_dict</span><span class="p">:</span>

View file

@ -507,10 +507,13 @@
<span class="sd"> dbref (str or int): The id to search for.</span>
<span class="sd"> Returns:</span>
<span class="sd"> object (TypedObject): The matched object.</span>
<span class="sd"> Queryset: Queryset with 0 or 1 match.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_id</span><span class="p">(</span><span class="n">dbref</span><span class="p">)</span></div>
<span class="n">dbref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">dbref</span><span class="p">,</span> <span class="n">reqhash</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dbref</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">dbref</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span></div>
<div class="viewcode-block" id="TypedObjectManager.get_dbref_range"><a class="viewcode-back" href="../../../api/evennia.typeclasses.managers.html#evennia.typeclasses.managers.TypedObjectManager.get_dbref_range">[docs]</a> <span class="k">def</span> <span class="nf">get_dbref_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">min_dbref</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">max_dbref</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>

View file

@ -1,691 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>evennia.utils.create &#8212; Evennia 0.9.5 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>
<script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({"tex2jax": {"processClass": "tex2jax_process|mathjax_process|math|output_area"}})</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 0.9.5</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.utils.create</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for evennia.utils.create</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">This module gathers all the essential database-creation functions for the game</span>
<span class="sd">engine&#39;s various object types.</span>
<span class="sd">Only objects created &#39;stand-alone&#39; are in here. E.g. object Attributes are</span>
<span class="sd">always created through their respective objects handlers.</span>
<span class="sd">Each `creation_*` function also has an alias named for the entity being created,</span>
<span class="sd">such as create_object() and object(). This is for consistency with the</span>
<span class="sd">utils.search module and allows you to do the shorter `create.object()`.</span>
<span class="sd">The respective object managers hold more methods for manipulating and searching</span>
<span class="sd">objects already existing in the database.</span>
<span class="sd">&quot;&quot;&quot;</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.db</span> <span class="kn">import</span> <span class="n">IntegrityError</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">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">dbid_to_obj</span>
<span class="c1"># delayed imports</span>
<span class="n">_User</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_ObjectDB</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_Object</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_Script</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_ScriptDB</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_HelpEntry</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_Msg</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_Account</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_AccountDB</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_to_object</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_ChannelDB</span> <span class="o">=</span> <span class="kc">None</span>
<span class="c1"># limit symbol import from API</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;create_object&quot;</span><span class="p">,</span>
<span class="s2">&quot;create_script&quot;</span><span class="p">,</span>
<span class="s2">&quot;create_help_entry&quot;</span><span class="p">,</span>
<span class="s2">&quot;create_message&quot;</span><span class="p">,</span>
<span class="s2">&quot;create_channel&quot;</span><span class="p">,</span>
<span class="s2">&quot;create_account&quot;</span><span class="p">,</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="c1">#</span>
<span class="c1"># Game Object creation</span>
<div class="viewcode-block" id="create_object"><a class="viewcode-back" href="../../../api/evennia.utils.create.html#evennia.utils.create.create_object">[docs]</a><span class="k">def</span> <span class="nf">create_object</span><span class="p">(</span>
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">location</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">home</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">destination</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">nohome</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">nattributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a new in-game object.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> typeclass (class or str): Class or python path to a typeclass.</span>
<span class="sd"> key (str): Name of the new object. If not set, a name of</span>
<span class="sd"> `#dbref` will be set.</span>
<span class="sd"> location (Object or str): Obj or #dbref to use as the location of the new object.</span>
<span class="sd"> home (Object or str): Obj or #dbref to use as the object&#39;s home location.</span>
<span class="sd"> permissions (list): A list of permission strings or tuples (permstring, category).</span>
<span class="sd"> locks (str): one or more lockstrings, separated by semicolons.</span>
<span class="sd"> aliases (list): A list of alternative keys or tuples (aliasstring, category).</span>
<span class="sd"> tags (list): List of tag keys or tuples (tagkey, category) or (tagkey, category, data).</span>
<span class="sd"> destination (Object or str): Obj or #dbref to use as an Exit&#39;s target.</span>
<span class="sd"> report_to (Object): The object to return error messages to.</span>
<span class="sd"> nohome (bool): This allows the creation of objects without a</span>
<span class="sd"> default home location; only used when creating the default</span>
<span class="sd"> location itself or during unittests.</span>
<span class="sd"> attributes (list): Tuples on the form (key, value) or (key, value, category),</span>
<span class="sd"> (key, value, lockstring) or (key, value, lockstring, default_access).</span>
<span class="sd"> to set as Attributes on the new object.</span>
<span class="sd"> nattributes (list): Non-persistent tuples on the form (key, value). Note that</span>
<span class="sd"> adding this rarely makes sense since this data will not survive a reload.</span>
<span class="sd"> Returns:</span>
<span class="sd"> object (Object): A newly created object of the given typeclass.</span>
<span class="sd"> Raises:</span>
<span class="sd"> ObjectDB.DoesNotExist: If trying to create an Object with</span>
<span class="sd"> `location` or `home` that can&#39;t be found.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">global</span> <span class="n">_ObjectDB</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_ObjectDB</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.objects.models</span> <span class="kn">import</span> <span class="n">ObjectDB</span> <span class="k">as</span> <span class="n">_ObjectDB</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_OBJECT_TYPECLASS</span>
<span class="c1"># convenience converters to avoid common usage mistake</span>
<span class="n">permissions</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">permissions</span><span class="p">)</span> <span class="k">if</span> <span class="n">permissions</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">locks</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span> <span class="k">if</span> <span class="n">locks</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span> <span class="k">if</span> <span class="n">aliases</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="c1"># a path is given. Load the actual typeclass</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
<span class="c1"># Setup input for the create command. We use ObjectDB as baseclass here</span>
<span class="c1"># to give us maximum freedom (the typeclasses will load</span>
<span class="c1"># correctly when each object is recovered).</span>
<span class="n">location</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">location</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span>
<span class="n">destination</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">destination</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span>
<span class="n">home</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">home</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">home</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">nohome</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">except</span> <span class="n">_ObjectDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">_ObjectDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">(</span>
<span class="s2">&quot;settings.DEFAULT_HOME (= &#39;</span><span class="si">%s</span><span class="s2">&#39;) does not exist, or the setting is malformed.&quot;</span>
<span class="o">%</span> <span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span>
<span class="p">)</span>
<span class="c1"># create new instance</span>
<span class="n">new_object</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span>
<span class="n">db_key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<span class="n">db_location</span><span class="o">=</span><span class="n">location</span><span class="p">,</span>
<span class="n">db_destination</span><span class="o">=</span><span class="n">destination</span><span class="p">,</span>
<span class="n">db_home</span><span class="o">=</span><span class="n">home</span><span class="p">,</span>
<span class="n">db_typeclass_path</span><span class="o">=</span><span class="n">typeclass</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># store the call signature for the signal</span>
<span class="n">new_object</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<span class="n">location</span><span class="o">=</span><span class="n">location</span><span class="p">,</span>
<span class="n">destination</span><span class="o">=</span><span class="n">destination</span><span class="p">,</span>
<span class="n">home</span><span class="o">=</span><span class="n">home</span><span class="p">,</span>
<span class="n">typeclass</span><span class="o">=</span><span class="n">typeclass</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
<span class="n">permissions</span><span class="o">=</span><span class="n">permissions</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span>
<span class="n">nohome</span><span class="o">=</span><span class="n">nohome</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span><span class="p">,</span>
<span class="n">nattributes</span><span class="o">=</span><span class="n">nattributes</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># this will trigger the save signal which in turn calls the</span>
<span class="c1"># at_first_save hook on the typeclass, where the _createdict can be</span>
<span class="c1"># used.</span>
<span class="n">new_object</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_OBJECT_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_object</span><span class="p">)</span>
<span class="k">return</span> <span class="n">new_object</span></div>
<span class="c1"># alias for create_object</span>
<span class="nb">object</span> <span class="o">=</span> <span class="n">create_object</span>
<span class="c1">#</span>
<span class="c1"># Script creation</span>
<div class="viewcode-block" id="create_script"><a class="viewcode-back" href="../../../api/evennia.utils.create.html#evennia.utils.create.create_script">[docs]</a><span class="k">def</span> <span class="nf">create_script</span><span class="p">(</span>
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">obj</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">account</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">interval</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">start_delay</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">repeats</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">persistent</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">autostart</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a new script. All scripts are a combination of a database</span>
<span class="sd"> object that communicates with the database, and an typeclass that</span>
<span class="sd"> &#39;decorates&#39; the database object into being different types of</span>
<span class="sd"> scripts. It&#39;s behaviour is similar to the game objects except</span>
<span class="sd"> scripts has a time component and are more limited in scope.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> typeclass (class or str): Class or python path to a typeclass.</span>
<span class="sd"> key (str): Name of the new object. If not set, a name of</span>
<span class="sd"> #dbref will be set.</span>
<span class="sd"> obj (Object): The entity on which this Script sits. If this</span>
<span class="sd"> is `None`, we are creating a &quot;global&quot; script.</span>
<span class="sd"> account (Account): The account on which this Script sits. It is</span>
<span class="sd"> exclusiv to `obj`.</span>
<span class="sd"> locks (str): one or more lockstrings, separated by semicolons.</span>
<span class="sd"> interval (int): The triggering interval for this Script, in</span>
<span class="sd"> seconds. If unset, the Script will not have a timing</span>
<span class="sd"> component.</span>
<span class="sd"> start_delay (bool): If `True`, will wait `interval` seconds</span>
<span class="sd"> before triggering the first time.</span>
<span class="sd"> repeats (int): The number of times to trigger before stopping.</span>
<span class="sd"> If unset, will repeat indefinitely.</span>
<span class="sd"> persistent (bool): If this Script survives a server shutdown</span>
<span class="sd"> or not (all Scripts will survive a reload).</span>
<span class="sd"> autostart (bool): If this Script will start immediately when</span>
<span class="sd"> created or if the `start` method must be called explicitly.</span>
<span class="sd"> report_to (Object): The object to return error messages to.</span>
<span class="sd"> desc (str): Optional description of script</span>
<span class="sd"> tags (list): List of tags or tuples (tag, category).</span>
<span class="sd"> attributes (list): List if tuples (key, value) or (key, value, category)</span>
<span class="sd"> (key, value, lockstring) or (key, value, lockstring, default_access).</span>
<span class="sd"> Returns:</span>
<span class="sd"> script (obj): An instance of the script created</span>
<span class="sd"> See evennia.scripts.manager for methods to manipulate existing</span>
<span class="sd"> scripts in the database.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">global</span> <span class="n">_ScriptDB</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_ScriptDB</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.scripts.models</span> <span class="kn">import</span> <span class="n">ScriptDB</span> <span class="k">as</span> <span class="n">_ScriptDB</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_SCRIPT_TYPECLASS</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="c1"># a path is given. Load the actual typeclass</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
<span class="c1"># validate input</span>
<span class="n">kwarg</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_key&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">key</span>
<span class="k">if</span> <span class="n">account</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_account&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">account</span><span class="p">,</span> <span class="n">_AccountDB</span><span class="p">)</span>
<span class="k">if</span> <span class="n">obj</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_obj&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span>
<span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_interval&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">interval</span><span class="p">)</span>
<span class="k">if</span> <span class="n">start_delay</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_start_delay&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">start_delay</span>
<span class="k">if</span> <span class="n">repeats</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_repeats&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">repeats</span><span class="p">)</span>
<span class="k">if</span> <span class="n">persistent</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_persistent&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">persistent</span>
<span class="k">if</span> <span class="n">desc</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_desc&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">desc</span>
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="c1"># create new instance</span>
<span class="n">new_script</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span><span class="o">**</span><span class="n">kwarg</span><span class="p">)</span>
<span class="c1"># store the call signature for the signal</span>
<span class="n">new_script</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<span class="n">obj</span><span class="o">=</span><span class="n">obj</span><span class="p">,</span>
<span class="n">account</span><span class="o">=</span><span class="n">account</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span>
<span class="n">interval</span><span class="o">=</span><span class="n">interval</span><span class="p">,</span>
<span class="n">start_delay</span><span class="o">=</span><span class="n">start_delay</span><span class="p">,</span>
<span class="n">repeats</span><span class="o">=</span><span class="n">repeats</span><span class="p">,</span>
<span class="n">persistent</span><span class="o">=</span><span class="n">persistent</span><span class="p">,</span>
<span class="n">autostart</span><span class="o">=</span><span class="n">autostart</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span>
<span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># this will trigger the save signal which in turn calls the</span>
<span class="c1"># at_first_save hook on the typeclass, where the _createdict</span>
<span class="c1"># can be used.</span>
<span class="n">new_script</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">new_script</span><span class="o">.</span><span class="n">id</span><span class="p">:</span>
<span class="c1"># this happens in the case of having a repeating script with `repeats=1` and</span>
<span class="c1"># `start_delay=False` - the script will run once and immediately stop before save is over.</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_SCRIPT_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_script</span><span class="p">)</span>
<span class="k">return</span> <span class="n">new_script</span></div>
<span class="c1"># alias</span>
<span class="n">script</span> <span class="o">=</span> <span class="n">create_script</span>
<span class="c1">#</span>
<span class="c1"># Help entry creation</span>
<span class="c1">#</span>
<div class="viewcode-block" id="create_help_entry"><a class="viewcode-back" href="../../../api/evennia.utils.create.html#evennia.utils.create.create_help_entry">[docs]</a><span class="k">def</span> <span class="nf">create_help_entry</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">entrytext</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">&quot;General&quot;</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a static help entry in the help database. Note that Command</span>
<span class="sd"> help entries are dynamic and directly taken from the __doc__</span>
<span class="sd"> entries of the command. The database-stored help entries are</span>
<span class="sd"> intended for more general help on the game, more extensive info,</span>
<span class="sd"> in-game setting information and so on.</span>
<span class="sd"> Args:</span>
<span class="sd"> key (str): The name of the help entry.</span>
<span class="sd"> entrytext (str): The body of te help entry</span>
<span class="sd"> category (str, optional): The help category of the entry.</span>
<span class="sd"> locks (str, optional): A lockstring to restrict access.</span>
<span class="sd"> aliases (list of str, optional): List of alternative (likely shorter) keynames.</span>
<span class="sd"> tags (lst, optional): List of tags or tuples `(tag, category)`.</span>
<span class="sd"> Returns:</span>
<span class="sd"> help (HelpEntry): A newly created help entry.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">global</span> <span class="n">_HelpEntry</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_HelpEntry</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.help.models</span> <span class="kn">import</span> <span class="n">HelpEntry</span> <span class="k">as</span> <span class="n">_HelpEntry</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">new_help</span> <span class="o">=</span> <span class="n">_HelpEntry</span><span class="p">()</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">key</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">entrytext</span> <span class="o">=</span> <span class="n">entrytext</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">help_category</span> <span class="o">=</span> <span class="n">category</span>
<span class="k">if</span> <span class="n">locks</span><span class="p">:</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span>
<span class="k">if</span> <span class="n">aliases</span><span class="p">:</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">make_iter</span><span class="p">(</span><span class="n">aliases</span><span class="p">))</span>
<span class="k">if</span> <span class="n">tags</span><span class="p">:</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">batch_add</span><span class="p">(</span><span class="o">*</span><span class="n">tags</span><span class="p">)</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="k">return</span> <span class="n">new_help</span>
<span class="k">except</span> <span class="n">IntegrityError</span><span class="p">:</span>
<span class="n">string</span> <span class="o">=</span> <span class="s2">&quot;Could not add help entry: key &#39;</span><span class="si">%s</span><span class="s2">&#39; already exists.&quot;</span> <span class="o">%</span> <span class="n">key</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_HELPENTRY_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_help</span><span class="p">)</span></div>
<span class="c1"># alias</span>
<span class="n">help_entry</span> <span class="o">=</span> <span class="n">create_help_entry</span>
<span class="c1">#</span>
<span class="c1"># Comm system methods</span>
<div class="viewcode-block" id="create_message"><a class="viewcode-back" href="../../../api/evennia.utils.create.html#evennia.utils.create.create_message">[docs]</a><span class="k">def</span> <span class="nf">create_message</span><span class="p">(</span>
<span class="n">senderobj</span><span class="p">,</span> <span class="n">message</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">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">header</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a new communication Msg. Msgs represent a unit of</span>
<span class="sd"> database-persistent communication between entites.</span>
<span class="sd"> Args:</span>
<span class="sd"> senderobj (Object, Account, Script, str or list): The entity (or</span>
<span class="sd"> entities) sending the Msg. If a `str`, this is the id-string</span>
<span class="sd"> for an external sender type.</span>
<span class="sd"> message (str): Text with the message. Eventual headers, titles</span>
<span class="sd"> etc should all be included in this text string. Formatting</span>
<span class="sd"> will be retained.</span>
<span class="sd"> receivers (Object, Account, Script, str or list): An Account/Object to send</span>
<span class="sd"> to, or a list of them. If a string, it&#39;s an identifier for an external</span>
<span class="sd"> receiver.</span>
<span class="sd"> locks (str): Lock definition string.</span>
<span class="sd"> tags (list): A list of tags or tuples `(tag, category)`.</span>
<span class="sd"> header (str): Mime-type or other optional information for the message</span>
<span class="sd"> Notes:</span>
<span class="sd"> The Comm system is created to be very open-ended, so it&#39;s fully</span>
<span class="sd"> possible to let a message both go several receivers at the same time,</span>
<span class="sd"> it&#39;s up to the command definitions to limit this as desired.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="s1">&#39;channels&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span>
<span class="s2">&quot;create_message() does not accept &#39;channel&#39; kwarg anymore &quot;</span>
<span class="s2">&quot;- channels no longer accept Msg objects.&quot;</span>
<span class="p">)</span>
<span class="k">global</span> <span class="n">_Msg</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_Msg</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.comms.models</span> <span class="kn">import</span> <span class="n">Msg</span> <span class="k">as</span> <span class="n">_Msg</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">message</span><span class="p">:</span>
<span class="c1"># we don&#39;t allow empty messages.</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">new_message</span> <span class="o">=</span> <span class="n">_Msg</span><span class="p">(</span><span class="n">db_message</span><span class="o">=</span><span class="n">message</span><span class="p">)</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">save</span><span class="p">()</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">senderobj</span><span class="p">):</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">senders</span> <span class="o">=</span> <span class="n">sender</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="n">header</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="n">new_message</span><span class="o">.</span><span class="n">receivers</span> <span class="o">=</span> <span class="n">receiver</span>
<span class="k">if</span> <span class="n">locks</span><span class="p">:</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span>
<span class="k">if</span> <span class="n">tags</span><span class="p">:</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">batch_add</span><span class="p">(</span><span class="o">*</span><span class="n">tags</span><span class="p">)</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="k">return</span> <span class="n">new_message</span></div>
<span class="n">message</span> <span class="o">=</span> <span class="n">create_message</span>
<span class="n">create_msg</span> <span class="o">=</span> <span class="n">create_message</span>
<div class="viewcode-block" id="create_channel"><a class="viewcode-back" href="../../../api/evennia.utils.create.html#evennia.utils.create.create_channel">[docs]</a><span class="k">def</span> <span class="nf">create_channel</span><span class="p">(</span>
<span class="n">key</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">keep_log</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create A communication Channel. A Channel serves as a central hub</span>
<span class="sd"> for distributing Msgs to groups of people without specifying the</span>
<span class="sd"> receivers explicitly. Instead accounts may &#39;connect&#39; to the channel</span>
<span class="sd"> and follow the flow of messages. By default the channel allows</span>
<span class="sd"> access to all old messages, but this can be turned off with the</span>
<span class="sd"> keep_log switch.</span>
<span class="sd"> Args:</span>
<span class="sd"> key (str): This must be unique.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> aliases (list of str): List of alternative (likely shorter) keynames.</span>
<span class="sd"> desc (str): A description of the channel, for use in listings.</span>
<span class="sd"> locks (str): Lockstring.</span>
<span class="sd"> keep_log (bool): Log channel throughput.</span>
<span class="sd"> typeclass (str or class): The typeclass of the Channel (not</span>
<span class="sd"> often used).</span>
<span class="sd"> tags (list): A list of tags or tuples `(tag, category)`.</span>
<span class="sd"> Returns:</span>
<span class="sd"> channel (Channel): A newly created channel.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_CHANNEL_TYPECLASS</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="c1"># a path is given. Load the actual typeclass</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
<span class="c1"># create new instance</span>
<span class="n">new_channel</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span><span class="n">db_key</span><span class="o">=</span><span class="n">key</span><span class="p">)</span>
<span class="c1"># store call signature for the signal</span>
<span class="n">new_channel</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span> <span class="n">keep_log</span><span class="o">=</span><span class="n">keep_log</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="n">tags</span>
<span class="p">)</span>
<span class="c1"># this will trigger the save signal which in turn calls the</span>
<span class="c1"># at_first_save hook on the typeclass, where the _createdict can be</span>
<span class="c1"># used.</span>
<span class="n">new_channel</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_CHANNEL_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_channel</span><span class="p">)</span>
<span class="k">return</span> <span class="n">new_channel</span></div>
<span class="n">channel</span> <span class="o">=</span> <span class="n">create_channel</span>
<span class="c1">#</span>
<span class="c1"># Account creation methods</span>
<span class="c1">#</span>
<div class="viewcode-block" id="create_account"><a class="viewcode-back" href="../../../api/evennia.utils.create.html#evennia.utils.create.create_account">[docs]</a><span class="k">def</span> <span class="nf">create_account</span><span class="p">(</span>
<span class="n">key</span><span class="p">,</span>
<span class="n">email</span><span class="p">,</span>
<span class="n">password</span><span class="p">,</span>
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">is_superuser</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This creates a new account.</span>
<span class="sd"> Args:</span>
<span class="sd"> key (str): The account&#39;s name. This should be unique.</span>
<span class="sd"> email (str or None): Email on valid addr@addr.domain form. If</span>
<span class="sd"> the empty string, will be set to None.</span>
<span class="sd"> password (str): Password in cleartext.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> typeclass (str): The typeclass to use for the account.</span>
<span class="sd"> is_superuser (bool): Wether or not this account is to be a superuser</span>
<span class="sd"> locks (str): Lockstring.</span>
<span class="sd"> permission (list): List of permission strings.</span>
<span class="sd"> tags (list): List of Tags on form `(key, category[, data])`</span>
<span class="sd"> attributes (list): List of Attributes on form</span>
<span class="sd"> `(key, value [, category, [,lockstring [, default_pass]]])`</span>
<span class="sd"> report_to (Object): An object with a msg() method to report</span>
<span class="sd"> errors to. If not given, errors will be logged.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Account: The newly created Account.</span>
<span class="sd"> Raises:</span>
<span class="sd"> ValueError: If `key` already exists in database.</span>
<span class="sd"> Notes:</span>
<span class="sd"> Usually only the server admin should need to be superuser, all</span>
<span class="sd"> other access levels can be handled with more fine-grained</span>
<span class="sd"> permissions or groups. A superuser bypasses all lock checking</span>
<span class="sd"> operations and is thus not suitable for play-testing the game.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">global</span> <span class="n">_AccountDB</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_AccountDB</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.accounts.models</span> <span class="kn">import</span> <span class="n">AccountDB</span> <span class="k">as</span> <span class="n">_AccountDB</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_ACCOUNT_TYPECLASS</span>
<span class="n">locks</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span> <span class="k">if</span> <span class="n">locks</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">permissions</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">permissions</span><span class="p">)</span> <span class="k">if</span> <span class="n">permissions</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="c1"># a path is given. Load the actual typeclass.</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
<span class="c1"># setup input for the create command. We use AccountDB as baseclass</span>
<span class="c1"># here to give us maximum freedom (the typeclasses will load</span>
<span class="c1"># correctly when each object is recovered).</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">email</span><span class="p">:</span>
<span class="n">email</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">_AccountDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">username__iexact</span><span class="o">=</span><span class="n">key</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;An Account with the name &#39;</span><span class="si">%s</span><span class="s2">&#39; already exists.&quot;</span> <span class="o">%</span> <span class="n">key</span><span class="p">)</span>
<span class="c1"># this handles a given dbref-relocate to an account.</span>
<span class="n">report_to</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">report_to</span><span class="p">,</span> <span class="n">_AccountDB</span><span class="p">)</span>
<span class="c1"># create the correct account entity, using the setup from</span>
<span class="c1"># base django auth.</span>
<span class="n">now</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
<span class="n">email</span> <span class="o">=</span> <span class="n">typeclass</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">normalize_email</span><span class="p">(</span><span class="n">email</span><span class="p">)</span>
<span class="n">new_account</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span>
<span class="n">username</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<span class="n">email</span><span class="o">=</span><span class="n">email</span><span class="p">,</span>
<span class="n">is_staff</span><span class="o">=</span><span class="n">is_superuser</span><span class="p">,</span>
<span class="n">is_superuser</span><span class="o">=</span><span class="n">is_superuser</span><span class="p">,</span>
<span class="n">last_login</span><span class="o">=</span><span class="n">now</span><span class="p">,</span>
<span class="n">date_joined</span><span class="o">=</span><span class="n">now</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">password</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># the password may be None for &#39;fake&#39; accounts, like bots</span>
<span class="n">valid</span><span class="p">,</span> <span class="n">error</span> <span class="o">=</span> <span class="n">new_account</span><span class="o">.</span><span class="n">validate_password</span><span class="p">(</span><span class="n">password</span><span class="p">,</span> <span class="n">new_account</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">valid</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">error</span>
<span class="n">new_account</span><span class="o">.</span><span class="n">set_password</span><span class="p">(</span><span class="n">password</span><span class="p">)</span>
<span class="n">new_account</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span> <span class="n">permissions</span><span class="o">=</span><span class="n">permissions</span><span class="p">,</span> <span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span> <span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span>
<span class="p">)</span>
<span class="c1"># saving will trigger the signal that calls the</span>
<span class="c1"># at_first_save hook on the typeclass, where the _createdict</span>
<span class="c1"># can be used.</span>
<span class="n">new_account</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="c1"># note that we don&#39;t send a signal here, that is sent from the Account.create helper method</span>
<span class="c1"># instead.</span>
<span class="k">return</span> <span class="n">new_account</span></div>
<span class="c1"># alias</span>
<span class="n">account</span> <span class="o">=</span> <span class="n">create_account</span>
</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>Links</h3>
<ul>
<li><a href="https://www.evennia.com">Home page</a> </li>
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li>
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
<a href="https://evennia.blogspot.com/">Blog</a>
</li>
</ul>
<h3>Versions</h3>
<ul>
<li><a href="../../../../1.0-dev/index.html">1.0-dev (develop branch)</a></li>
<li><a href="create.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 0.9.5</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.utils.create</a></li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2020, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>

View file

@ -153,7 +153,7 @@
<span class="c1"># candidates=None,</span>
<span class="c1"># attribute_name=None):</span>
<span class="c1">#</span>
<span class="n">search_object</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">object_search</span>
<span class="n">search_object</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">search_object</span>
<span class="n">search_objects</span> <span class="o">=</span> <span class="n">search_object</span>
<span class="n">object_search</span> <span class="o">=</span> <span class="n">search_object</span>
<span class="n">objects</span> <span class="o">=</span> <span class="n">search_objects</span>
@ -169,7 +169,7 @@
<span class="c1"># ostring = a string or database id.</span>
<span class="c1">#</span>
<span class="n">search_account</span> <span class="o">=</span> <span class="n">AccountDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">account_search</span>
<span class="n">search_account</span> <span class="o">=</span> <span class="n">AccountDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">search_account</span>
<span class="n">search_accounts</span> <span class="o">=</span> <span class="n">search_account</span>
<span class="n">account_search</span> <span class="o">=</span> <span class="n">search_account</span>
<span class="n">accounts</span> <span class="o">=</span> <span class="n">search_accounts</span>
@ -187,7 +187,7 @@
<span class="c1"># on a timer.</span>
<span class="c1">#</span>
<span class="n">search_script</span> <span class="o">=</span> <span class="n">ScriptDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">script_search</span>
<span class="n">search_script</span> <span class="o">=</span> <span class="n">ScriptDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">search_script</span>
<span class="n">search_scripts</span> <span class="o">=</span> <span class="n">search_script</span>
<span class="n">script_search</span> <span class="o">=</span> <span class="n">search_script</span>
<span class="n">scripts</span> <span class="o">=</span> <span class="n">search_scripts</span>
@ -208,7 +208,7 @@
<span class="c1"># one of the other arguments to limit the search.</span>
<span class="c1">#</span>
<span class="n">search_message</span> <span class="o">=</span> <span class="n">Msg</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">message_search</span>
<span class="n">search_message</span> <span class="o">=</span> <span class="n">Msg</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">search_message</span>
<span class="n">search_messages</span> <span class="o">=</span> <span class="n">search_message</span>
<span class="n">message_search</span> <span class="o">=</span> <span class="n">search_message</span>
<span class="n">messages</span> <span class="o">=</span> <span class="n">search_messages</span>
@ -224,7 +224,7 @@
<span class="c1"># exact - requires an exact ostring match (not case sensitive)</span>
<span class="c1">#</span>
<span class="n">search_channel</span> <span class="o">=</span> <span class="n">ChannelDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">channel_search</span>
<span class="n">search_channel</span> <span class="o">=</span> <span class="n">ChannelDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">search_channel</span>
<span class="n">search_channels</span> <span class="o">=</span> <span class="n">search_channel</span>
<span class="n">channel_search</span> <span class="o">=</span> <span class="n">search_channel</span>
<span class="n">channels</span> <span class="o">=</span> <span class="n">search_channels</span>

View file

@ -174,26 +174,6 @@
<span class="n">room_typeclass</span> <span class="o">=</span> <span class="n">DefaultRoom</span>
<span class="n">script_typeclass</span> <span class="o">=</span> <span class="n">DefaultScript</span>
<div class="viewcode-block" id="EvenniaTestMixin.save_backups"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.save_backups">[docs]</a> <span class="k">def</span> <span class="nf">save_backups</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">backups</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">data_out</span><span class="p">,</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">disconnect</span><span class="p">,</span>
<span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="p">,</span>
<span class="n">settings</span><span class="o">.</span><span class="n">PROTOTYPE_MODULES</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="EvenniaTestMixin.restore_backups"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.restore_backups">[docs]</a> <span class="k">def</span> <span class="nf">restore_backups</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">flush_cache</span><span class="p">()</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">data_out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">disconnect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
<span class="n">settings</span><span class="o">.</span><span class="n">PROTOTYPE_MODULES</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span></div>
<div class="viewcode-block" id="EvenniaTestMixin.mock_sessions"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.mock_sessions">[docs]</a> <span class="k">def</span> <span class="nf">mock_sessions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">data_out</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">disconnect</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mocked_SESSIONS</span> <span class="o">=</span> <span class="n">SESSIONS</span></div>
<div class="viewcode-block" id="EvenniaTestMixin.create_accounts"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.create_accounts">[docs]</a> <span class="k">def</span> <span class="nf">create_accounts</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">account</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_account</span><span class="p">(</span>
<span class="s2">&quot;TestAccount&quot;</span><span class="p">,</span>
@ -210,8 +190,10 @@
<span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;Developer&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="EvenniaTestMixin.teardown_accounts"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.teardown_accounts">[docs]</a> <span class="k">def</span> <span class="nf">teardown_accounts</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">account</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">account2</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span></div>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;account&quot;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;account2&quot;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">account2</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span></div>
<div class="viewcode-block" id="EvenniaTestMixin.create_rooms"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.create_rooms">[docs]</a> <span class="k">def</span> <span class="nf">create_rooms</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">room1</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">room_typeclass</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;Room&quot;</span><span class="p">,</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
@ -261,15 +243,23 @@
<span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="n">session</span></div>
<div class="viewcode-block" id="EvenniaTestMixin.teardown_session"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.teardown_session">[docs]</a> <span class="k">def</span> <span class="nf">teardown_session</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">del</span> <span class="n">SESSIONS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">sessid</span><span class="p">]</span></div>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;sessions&quot;</span><span class="p">):</span>
<span class="k">del</span> <span class="n">SESSIONS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">sessid</span><span class="p">]</span></div>
<div class="viewcode-block" id="EvenniaTestMixin.setUp"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.setUp">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.scripts.taskhandler.deferLater&quot;</span><span class="p">,</span> <span class="n">_mock_deferlater</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets up testing environment</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">save_backups</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mock_sessions</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">backups</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">data_out</span><span class="p">,</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">disconnect</span><span class="p">,</span>
<span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="p">,</span>
<span class="n">settings</span><span class="o">.</span><span class="n">PROTOTYPE_MODULES</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">data_out</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">disconnect</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create_accounts</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create_rooms</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create_objs</span><span class="p">()</span>
@ -278,8 +268,17 @@
<span class="bp">self</span><span class="o">.</span><span class="n">setup_session</span><span class="p">()</span></div>
<div class="viewcode-block" id="EvenniaTestMixin.tearDown"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.tearDown">[docs]</a> <span class="k">def</span> <span class="nf">tearDown</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">restore_backups</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">teardown_session</span><span class="p">()</span>
<span class="n">flush_cache</span><span class="p">()</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">data_out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">disconnect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
<span class="n">settings</span><span class="o">.</span><span class="n">PROTOTYPE_MODULES</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
<span class="k">except</span> <span class="ne">AttributeError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">: Teardown error. If you overrode the `setUp()` method &quot;</span>
<span class="s2">&quot;in your test, make sure you also added `super().setUp()`!&quot;</span><span class="p">)</span>
<span class="k">del</span> <span class="n">SESSIONS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">sessid</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">teardown_accounts</span><span class="p">()</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">tearDown</span><span class="p">()</span></div></div>

View file

@ -141,7 +141,6 @@
<li><a href="evennia/utils/ansi.html">evennia.utils.ansi</a></li>
<li><a href="evennia/utils/batchprocessors.html">evennia.utils.batchprocessors</a></li>
<li><a href="evennia/utils/containers.html">evennia.utils.containers</a></li>
<li><a href="evennia/utils/create.html">evennia.utils.create</a></li>
<li><a href="evennia/utils/dbserialize.html">evennia.utils.dbserialize</a></li>
<li><a href="evennia/utils/eveditor.html">evennia.utils.eveditor</a></li>
<li><a href="evennia/utils/evform.html">evennia.utils.evform</a></li>

View file

@ -190,9 +190,52 @@ otherwise also match also keys containing the <strong>ostring</strong>
accounts of this typeclass.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> A queryset (an iterable) with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.accounts.manager.AccountDBManager.create_account">
<code class="sig-name descname">create_account</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">email</span></em>, <em class="sig-param"><span class="n">password</span></em>, <em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">is_superuser</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">permissions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">report_to</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/accounts/manager.html#AccountDBManager.create_account"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.accounts.manager.AccountDBManager.create_account" title="Permalink to this definition"></a></dt>
<dd><p>This creates a new account.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>key</strong> (<em>str</em>) The accounts name. This should be unique.</p></li>
<li><p><strong>email</strong> (<em>str</em><em> or </em><em>None</em>) Email on valid <a class="reference external" href="mailto:addr&#37;&#52;&#48;addr&#46;domain">addr<span>&#64;</span>addr<span>&#46;</span>domain</a> form. If
the empty string, will be set to None.</p></li>
<li><p><strong>password</strong> (<em>str</em>) Password in cleartext.</p></li>
</ul>
</dd>
<dt class="field-even">Keyword Arguments</dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>typeclass</strong> (<em>str</em>) The typeclass to use for the account.</p></li>
<li><p><strong>is_superuser</strong> (<em>bool</em>) Wether or not this account is to be a superuser</p></li>
<li><p><strong>locks</strong> (<em>str</em>) Lockstring.</p></li>
<li><p><strong>permission</strong> (<em>list</em>) List of permission strings.</p></li>
<li><p><strong>tags</strong> (<em>list</em>) List of Tags on form <strong>(key, category[, data])</strong></p></li>
<li><p><strong>attributes</strong> (<em>list</em>) List of Attributes on form
<strong>(key, value [, category, [,lockstring [, default_pass]]])</strong></p></li>
<li><p><strong>report_to</strong> (<em>Object</em>) An object with a msg() method to report
errors to. If not given, errors will be logged.</p></li>
</ul>
</dd>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><em>Account</em> The newly created Account.</p>
</dd>
<dt class="field-even">Raises</dt>
<dd class="field-even"><p><strong>ValueError</strong> If <strong>key</strong> already exists in database.</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>Usually only the server admin should need to be superuser, all
other access levels can be handled with more fine-grained
permissions or groups. A superuser bypasses all lock checking
operations and is thus not suitable for play-testing the game.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.accounts.manager.AccountDBManager.account_search">
<code class="sig-name descname">account_search</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ostring</span></em>, <em class="sig-param"><span class="n">exact</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.accounts.manager.AccountDBManager.account_search" title="Permalink to this definition"></a></dt>
@ -210,6 +253,9 @@ otherwise also match also keys containing the <strong>ostring</strong>
accounts of this typeclass.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> A queryset (an iterable) with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>

View file

@ -72,7 +72,7 @@ method. Otherwise all text will be returned to all connected sessions.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.account.CmdOOCLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -103,7 +103,7 @@ method. Otherwise all text will be returned to all connected sessions.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.account.CmdOOCLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}</em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}</em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -77,7 +77,7 @@ skipping, reloading etc.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.batchprocess.CmdBatchCommands.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['batchcmd', 'batchcommand']</em><a class="headerlink" href="#evennia.commands.default.batchprocess.CmdBatchCommands.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['batchcommand', 'batchcmd']</em><a class="headerlink" href="#evennia.commands.default.batchprocess.CmdBatchCommands.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -108,7 +108,7 @@ skipping, reloading etc.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.batchprocess.CmdBatchCommands.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'batchcmd batchcommand', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcmd batchcommand', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] &lt;python.path.to.file&gt;\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}</em><a class="headerlink" href="#evennia.commands.default.batchprocess.CmdBatchCommands.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'batchcommand batchcmd', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcommand batchcmd', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] &lt;python.path.to.file&gt;\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}</em><a class="headerlink" href="#evennia.commands.default.batchprocess.CmdBatchCommands.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -1086,10 +1086,17 @@ char: Setting an attribute on a character (global search)
character: Alias for char, as above.</p>
</dd>
</dl>
<p class="rubric">Example</p>
<p>set self/foo = “bar”
set/delete self/foo
set self/foo = $dbref(#53)</p>
<p>Sets attributes on objects. The second example form above clears a
previously set attribute while the third form inspects the current value of
the attribute (if any). The last one (with the star) is a shortcut for
operating on a player Account rather than an Object.</p>
<p>If you want &lt;value&gt; to be an object, use $dbef(#dbref) or
$search(key) to assign it. You need control or edit access to
the object you are adding.</p>
<p>The most common data to save with this command are strings and
numbers. You can however also set Python primitives such as lists,
dictionaries and tuples on objects (this might be important for
@ -1219,7 +1226,7 @@ with older attrs that might have been named with <strong>[]</strong>s.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdSetAttribute.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '', 'category': 'building', 'key': '&#64;set', 'no_prefix': 'set ', 'tags': '', 'text': '\n set attribute on an object or account\n\n Usage:\n set[/switch] &lt;obj&gt;/&lt;attr&gt;[:category] = &lt;value&gt;\n set[/switch] &lt;obj&gt;/&lt;attr&gt;[:category] = # delete attribute\n set[/switch] &lt;obj&gt;/&lt;attr&gt;[:category] # view attribute\n set[/switch] *&lt;account&gt;/&lt;attr&gt;[:category] = &lt;value&gt;\n\n Switch:\n edit: Open the line editor (string values only)\n script: If we\'re trying to set an attribute on a script\n channel: If we\'re trying to set an attribute on a channel\n account: If we\'re trying to set an attribute on an account\n room: Setting an attribute on a room (global search)\n exit: Setting an attribute on an exit (global search)\n char: Setting an attribute on a character (global search)\n character: Alias for char, as above.\n\n Sets attributes on objects. The second example form above clears a\n previously set attribute while the third form inspects the current value of\n the attribute (if any). The last one (with the star) is a shortcut for\n operating on a player Account rather than an Object.\n\n The most common data to save with this command are strings and\n numbers. You can however also set Python primitives such as lists,\n dictionaries and tuples on objects (this might be important for\n the functionality of certain custom objects). This is indicated\n by you starting your value with one of |c\'|n, |c&quot;|n, |c(|n, |c[|n\n or |c{ |n.\n\n Once you have stored a Python primitive as noted above, you can include\n |c[&lt;key&gt;]|n in &lt;attr&gt; to reference nested values in e.g. a list or dict.\n\n Remember that if you use Python primitives like this, you must\n write proper Python syntax too - notably you must include quotes\n around your strings or you will get an error.\n\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdSetAttribute.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '', 'category': 'building', 'key': '&#64;set', 'no_prefix': 'set ', 'tags': '', 'text': '\n set attribute on an object or account\n\n Usage:\n set[/switch] &lt;obj&gt;/&lt;attr&gt;[:category] = &lt;value&gt;\n set[/switch] &lt;obj&gt;/&lt;attr&gt;[:category] = # delete attribute\n set[/switch] &lt;obj&gt;/&lt;attr&gt;[:category] # view attribute\n set[/switch] *&lt;account&gt;/&lt;attr&gt;[:category] = &lt;value&gt;\n\n Switch:\n edit: Open the line editor (string values only)\n script: If we\'re trying to set an attribute on a script\n channel: If we\'re trying to set an attribute on a channel\n account: If we\'re trying to set an attribute on an account\n room: Setting an attribute on a room (global search)\n exit: Setting an attribute on an exit (global search)\n char: Setting an attribute on a character (global search)\n character: Alias for char, as above.\n\n Example:\n set self/foo = &quot;bar&quot;\n set/delete self/foo\n set self/foo = $dbref(#53)\n\n Sets attributes on objects. The second example form above clears a\n previously set attribute while the third form inspects the current value of\n the attribute (if any). The last one (with the star) is a shortcut for\n operating on a player Account rather than an Object.\n\n If you want &lt;value&gt; to be an object, use $dbef(#dbref) or\n $search(key) to assign it. You need control or edit access to\n the object you are adding.\n\n The most common data to save with this command are strings and\n numbers. You can however also set Python primitives such as lists,\n dictionaries and tuples on objects (this might be important for\n the functionality of certain custom objects). This is indicated\n by you starting your value with one of |c\'|n, |c&quot;|n, |c(|n, |c[|n\n or |c{ |n.\n\n Once you have stored a Python primitive as noted above, you can include\n |c[&lt;key&gt;]|n in &lt;attr&gt; to reference nested values in e.g. a list or dict.\n\n Remember that if you use Python primitives like this, you must\n write proper Python syntax too - notably you must include quotes\n around your strings or you will get an error.\n\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdSetAttribute.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -1277,7 +1284,7 @@ server settings.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdTypeclass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;swap', '&#64;type', '&#64;update', '&#64;parent', '&#64;typeclasses']</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;type', '&#64;update', '&#64;swap', '&#64;parent', '&#64;typeclasses']</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -1308,7 +1315,7 @@ server settings.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdTypeclass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;swap &#64;type &#64;update &#64;parent &#64;typeclasses', 'category': 'building', 'key': '&#64;typeclass', 'no_prefix': 'typeclass swap type update parent typeclasses', 'tags': '', 'text': &quot;\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] &lt;object&gt; [= typeclass.path]\n typeclass/prototype &lt;object&gt; = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;type &#64;update &#64;swap &#64;parent &#64;typeclasses', 'category': 'building', 'key': '&#64;typeclass', 'no_prefix': 'typeclass type update swap parent typeclasses', 'tags': '', 'text': &quot;\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] &lt;object&gt; [= typeclass.path]\n typeclass/prototype &lt;object&gt; = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -1447,7 +1454,9 @@ them by ;, i.e:</p>
examine [<a href="#id39"><span class="problematic" id="id40">*</span></a>&lt;account&gt;[/attrname]]</p>
</dd>
<dt>Switch:</dt><dd><p>account - examine an Account (same as adding <a href="#id41"><span class="problematic" id="id42">*</span></a>)
object - examine an Object (useful when OOC)</p>
object - examine an Object (useful when OOC)
script - examine a Script
channel - examine a Channel</p>
</dd>
</dl>
<p>The examine command shows detailed game info about an
@ -1461,7 +1470,7 @@ If object is not specified, the current location is examined.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdExamine.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;ex', '&#64;exam']</em><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;exam', '&#64;ex']</em><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -1480,8 +1489,13 @@ If object is not specified, the current location is examined.</p>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdExamine.account_mode">
<code class="sig-name descname">account_mode</code><em class="property"> = False</em><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.account_mode" title="Permalink to this definition"></a></dt>
<dt id="evennia.commands.default.building.CmdExamine.switch_options">
<code class="sig-name descname">switch_options</code><em class="property"> = ['account', 'object', 'script', 'channel']</em><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.switch_options" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdExamine.object_type">
<code class="sig-name descname">object_type</code><em class="property"> = 'object'</em><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.object_type" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -1662,6 +1676,36 @@ the message as examine for eventual custom markup in the client.</p>
<code class="sig-name descname">format_things</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdExamine.format_things"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.format_things" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdExamine.format_script_desc">
<code class="sig-name descname">format_script_desc</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdExamine.format_script_desc"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.format_script_desc" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdExamine.format_script_is_persistent">
<code class="sig-name descname">format_script_is_persistent</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdExamine.format_script_is_persistent"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.format_script_is_persistent" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdExamine.format_script_timer_data">
<code class="sig-name descname">format_script_timer_data</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdExamine.format_script_timer_data"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.format_script_timer_data" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdExamine.format_channel_sub_totals">
<code class="sig-name descname">format_channel_sub_totals</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdExamine.format_channel_sub_totals"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.format_channel_sub_totals" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdExamine.format_channel_account_subs">
<code class="sig-name descname">format_channel_account_subs</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdExamine.format_channel_account_subs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.format_channel_account_subs" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdExamine.format_channel_object_subs">
<code class="sig-name descname">format_channel_object_subs</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdExamine.format_channel_object_subs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.format_channel_object_subs" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdExamine.get_formatted_obj_data">
<code class="sig-name descname">get_formatted_obj_data</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em>, <em class="sig-param"><span class="n">current_cmdset</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdExamine.get_formatted_obj_data"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.get_formatted_obj_data" title="Permalink to this definition"></a></dt>
@ -1694,7 +1738,7 @@ the cases, see the module doc.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdExamine.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;ex &#64;exam', 'category': 'building', 'key': '&#64;examine', 'no_prefix': 'examine ex exam', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [&lt;object&gt;[/attrname]]\n examine [*&lt;account&gt;[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;exam &#64;ex', 'category': 'building', 'key': '&#64;examine', 'no_prefix': 'examine exam ex', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [&lt;object&gt;[/attrname]]\n examine [*&lt;account&gt;[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n script - examine a Script\n channel - examine a Channel\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -1728,7 +1772,7 @@ one is given.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdFind.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;search', '&#64;locate']</em><a class="headerlink" href="#evennia.commands.default.building.CmdFind.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;locate', '&#64;search']</em><a class="headerlink" href="#evennia.commands.default.building.CmdFind.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -1759,7 +1803,7 @@ one is given.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdFind.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;search &#64;locate', 'category': 'building', 'key': '&#64;find', 'no_prefix': 'find search locate', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] &lt;name or dbref or *account&gt; [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdFind.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;locate &#64;search', 'category': 'building', 'key': '&#64;find', 'no_prefix': 'find locate search', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] &lt;name or dbref or *account&gt; [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdFind.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -1877,7 +1921,8 @@ script scriptname - examine named existing global script
script myobj = foo.bar.Script - create and assign script to object
script/stop myobj = scriptname - stop script on object
script/pause foo.Bar.Script - pause global script
script/delete myobj - delete ALL scripts on object</p>
script/delete myobj - delete ALL scripts on object
script/delete #dbref[-#dbref] - delete script or range by dbref</p>
<p>When given with an <strong>&lt;obj&gt;</strong> as left-hand-side, this creates and
assigns a new script to that object. Without an <strong>&lt;obj&gt;</strong>, this
manages and inspects global scripts</p>
@ -1936,7 +1981,7 @@ objects.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdScripts.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;script', 'category': 'system', 'key': '&#64;scripts', 'no_prefix': 'scripts script', 'tags': '', 'text': &quot;\n List and manage all running scripts. Allows for creating new global\n scripts.\n\n Usage:\n script[/switches] [script-#dbref, key, script.path or &lt;obj&gt;]\n script[/start||stop] &lt;obj&gt; = &lt;script.path or script-key&gt;\n\n Switches:\n start - start/unpause an existing script's timer.\n stop - stops an existing script's timer\n pause - pause a script's timer\n delete - deletes script. This will also stop the timer as needed\n\n Examples:\n script - list scripts\n script myobj - list all scripts on object\n script foo.bar.Script - create a new global Script\n script scriptname - examine named existing global script\n script myobj = foo.bar.Script - create and assign script to object\n script/stop myobj = scriptname - stop script on object\n script/pause foo.Bar.Script - pause global script\n script/delete myobj - delete ALL scripts on object\n\n When given with an `&lt;obj&gt;` as left-hand-side, this creates and\n assigns a new script to that object. Without an `&lt;obj&gt;`, this\n manages and inspects global scripts\n\n If no switches are given, this command just views all active\n scripts. The argument can be either an object, at which point it\n will be searched for all scripts defined on it, or a script name\n or #dbref. For using the /stop switch, a unique script #dbref is\n required since whole classes of scripts often have the same name.\n\n Use the `script` build-level command for managing scripts attached to\n objects.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.building.CmdScripts.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;script', 'category': 'system', 'key': '&#64;scripts', 'no_prefix': 'scripts script', 'tags': '', 'text': &quot;\n List and manage all running scripts. Allows for creating new global\n scripts.\n\n Usage:\n script[/switches] [script-#dbref, key, script.path or &lt;obj&gt;]\n script[/start||stop] &lt;obj&gt; = &lt;script.path or script-key&gt;\n\n Switches:\n start - start/unpause an existing script's timer.\n stop - stops an existing script's timer\n pause - pause a script's timer\n delete - deletes script. This will also stop the timer as needed\n\n Examples:\n script - list scripts\n script myobj - list all scripts on object\n script foo.bar.Script - create a new global Script\n script scriptname - examine named existing global script\n script myobj = foo.bar.Script - create and assign script to object\n script/stop myobj = scriptname - stop script on object\n script/pause foo.Bar.Script - pause global script\n script/delete myobj - delete ALL scripts on object\n script/delete #dbref[-#dbref] - delete script or range by dbref\n\n When given with an `&lt;obj&gt;` as left-hand-side, this creates and\n assigns a new script to that object. Without an `&lt;obj&gt;`, this\n manages and inspects global scripts\n\n If no switches are given, this command just views all active\n scripts. The argument can be either an object, at which point it\n will be searched for all scripts defined on it, or a script name\n or #dbref. For using the /stop switch, a unique script #dbref is\n required since whole classes of scripts often have the same name.\n\n Use the `script` build-level command for managing scripts attached to\n objects.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.building.CmdScripts.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -114,7 +114,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.commands.default.general.CmdLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.commands.default.general.CmdLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -145,7 +145,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look &lt;obj&gt;\n look *&lt;account&gt;\n\n Observes your location or objects in your vicinity.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look &lt;obj&gt;\n look *&lt;account&gt;\n\n Observes your location or objects in your vicinity.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -207,7 +207,7 @@ for everyone to use, you need build privileges and the alias command.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdNick.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['nicks', 'nickname']</em><a class="headerlink" href="#evennia.commands.default.general.CmdNick.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['nickname', 'nicks']</em><a class="headerlink" href="#evennia.commands.default.general.CmdNick.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -239,7 +239,7 @@ for everyone to use, you need build privileges and the alias command.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdNick.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'nicks nickname', 'category': 'general', 'key': 'nick', 'no_prefix': ' nicks nickname', 'tags': '', 'text': '\n define a personal alias/nick by defining a string to\n match and replace it with another on the fly\n\n Usage:\n nick[/switches] &lt;string&gt; [= [replacement_string]]\n nick[/switches] &lt;template&gt; = &lt;replacement_template&gt;\n nick/delete &lt;string&gt; or number\n nicks\n\n Switches:\n inputline - replace on the inputline (default)\n object - replace on object-lookup\n account - replace on account-lookup\n list - show all defined aliases (also &quot;nicks&quot; works)\n delete - remove nick by index in /list\n clearall - clear all nicks\n\n Examples:\n nick hi = say Hello, I\'m Sarah!\n nick/object tom = the tall man\n nick build $1 $2 = create/drop $1;$2\n nick tell $1 $2=page $1=$2\n nick tm?$1=page tallman=$1\n nick tm\\=$1=page tallman=$1\n\n A \'nick\' is a personal string replacement. Use $1, $2, ... to catch arguments.\n Put the last $-marker without an ending space to catch all remaining text. You\n can also use unix-glob matching for the left-hand side &lt;string&gt;:\n\n * - matches everything\n ? - matches 0 or 1 single characters\n [abcd] - matches these chars in any order\n [!abcd] - matches everything not among these chars\n \\= - escape literal \'=\' you want in your &lt;string&gt;\n\n Note that no objects are actually renamed or changed by this command - your nicks\n are only available to you. If you want to permanently add keywords to an object\n for everyone to use, you need build privileges and the alias command.\n\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdNick.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'nickname nicks', 'category': 'general', 'key': 'nick', 'no_prefix': ' nickname nicks', 'tags': '', 'text': '\n define a personal alias/nick by defining a string to\n match and replace it with another on the fly\n\n Usage:\n nick[/switches] &lt;string&gt; [= [replacement_string]]\n nick[/switches] &lt;template&gt; = &lt;replacement_template&gt;\n nick/delete &lt;string&gt; or number\n nicks\n\n Switches:\n inputline - replace on the inputline (default)\n object - replace on object-lookup\n account - replace on account-lookup\n list - show all defined aliases (also &quot;nicks&quot; works)\n delete - remove nick by index in /list\n clearall - clear all nicks\n\n Examples:\n nick hi = say Hello, I\'m Sarah!\n nick/object tom = the tall man\n nick build $1 $2 = create/drop $1;$2\n nick tell $1 $2=page $1=$2\n nick tm?$1=page tallman=$1\n nick tm\\=$1=page tallman=$1\n\n A \'nick\' is a personal string replacement. Use $1, $2, ... to catch arguments.\n Put the last $-marker without an ending space to catch all remaining text. You\n can also use unix-glob matching for the left-hand side &lt;string&gt;:\n\n * - matches everything\n ? - matches 0 or 1 single characters\n [abcd] - matches these chars in any order\n [!abcd] - matches everything not among these chars\n \\= - escape literal \'=\' you want in your &lt;string&gt;\n\n Note that no objects are actually renamed or changed by this command - your nicks\n are only available to you. If you want to permanently add keywords to an object\n for everyone to use, you need build privileges and the alias command.\n\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdNick.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -262,7 +262,7 @@ inv</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdInventory.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['i', 'inv']</em><a class="headerlink" href="#evennia.commands.default.general.CmdInventory.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['inv', 'i']</em><a class="headerlink" href="#evennia.commands.default.general.CmdInventory.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -293,7 +293,7 @@ inv</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdInventory.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdInventory.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdInventory.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -648,7 +648,7 @@ automatically begin with your name.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdPose.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = [':', 'emote']</em><a class="headerlink" href="#evennia.commands.default.general.CmdPose.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['emote', ':']</em><a class="headerlink" href="#evennia.commands.default.general.CmdPose.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -689,7 +689,7 @@ space.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdPose.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': ': emote', 'category': 'general', 'key': 'pose', 'no_prefix': ' : emote', 'tags': '', 'text': &quot;\n strike a pose\n\n Usage:\n pose &lt;pose text&gt;\n pose's &lt;pose text&gt;\n\n Example:\n pose is standing by the wall, smiling.\n -&gt; others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.general.CmdPose.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'emote :', 'category': 'general', 'key': 'pose', 'no_prefix': ' emote :', 'tags': '', 'text': &quot;\n strike a pose\n\n Usage:\n pose &lt;pose text&gt;\n pose's &lt;pose text&gt;\n\n Example:\n pose is standing by the wall, smiling.\n -&gt; others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.general.CmdPose.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -622,7 +622,7 @@ See <a href="#id11"><span class="problematic" id="id12">|</span></a>luhttps://ww
<dl class="py attribute">
<dt id="evennia.commands.default.system.CmdTasks.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;delays', '&#64;task']</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;task', '&#64;delays']</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -668,7 +668,7 @@ to all the variables defined therein.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.system.CmdTasks.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;delays &#64;task', 'category': 'system', 'key': '&#64;tasks', 'no_prefix': 'tasks delays task', 'tags': '', 'text': &quot;\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;task &#64;delays', 'category': 'system', 'key': '&#64;tasks', 'no_prefix': 'tasks task delays', 'tags': '', 'text': &quot;\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -710,6 +710,11 @@ classes and settings in mygame.</p>
<code class="sig-name descname">test_script</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestBuilding.test_script"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestBuilding.test_script" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.tests.TestBuilding.test_script_multi_delete">
<code class="sig-name descname">test_script_multi_delete</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestBuilding.test_script_multi_delete"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestBuilding.test_script_multi_delete" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.tests.TestBuilding.test_teleport">
<code class="sig-name descname">test_teleport</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestBuilding.test_teleport"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestBuilding.test_teleport" title="Permalink to this definition"></a></dt>

View file

@ -61,7 +61,7 @@ connect “account name” “pass word”</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['co', 'conn', 'con']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['conn', 'con', 'co']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -96,7 +96,7 @@ there is no object yet before the account has logged in)</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'co conn con', 'category': 'general', 'key': 'connect', 'no_prefix': ' co conn con', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect &quot;account name&quot; &quot;pass word&quot;\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'conn con co', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn con co', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect &quot;account name&quot; &quot;pass word&quot;\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -120,7 +120,7 @@ create “account name” “pass word”</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedCreate.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['cre', 'cr']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedCreate.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['cr', 'cre']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedCreate.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -151,7 +151,7 @@ create “account name” “pass word”</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedCreate.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', 'no_prefix': ' cre cr', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create &lt;accountname&gt; &lt;password&gt;\n create &quot;account name&quot; &quot;pass word&quot;\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedCreate.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'no_prefix': ' cr cre', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create &lt;accountname&gt; &lt;password&gt;\n create &quot;account name&quot; &quot;pass word&quot;\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedCreate.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -274,7 +274,7 @@ for simplicity. It shows a pane of info.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedHelp.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['?', 'h']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedHelp.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['h', '?']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedHelp.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -300,7 +300,7 @@ for simplicity. It shows a pane of info.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedHelp.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '? h', 'category': 'general', 'key': 'help', 'no_prefix': ' ? h', 'tags': '', 'text': '\n get help when in unconnected-in state\n\n Usage:\n help\n\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedHelp.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'h ?', 'category': 'general', 'key': 'help', 'no_prefix': ' h ?', 'tags': '', 'text': '\n get help when in unconnected-in state\n\n Usage:\n help\n\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedHelp.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -190,7 +190,7 @@ always gives only one match.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> Message matches.</p>
<dd class="field-even"><p><em>Queryset</em> Iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
@ -215,11 +215,40 @@ always gives only one match.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> Message matches.</p>
<dd class="field-even"><p><em>Queryset</em> Iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.comms.managers.MsgManager.create_message">
<code class="sig-name descname">create_message</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">senderobj</span></em>, <em class="sig-param"><span class="n">message</span></em>, <em class="sig-param"><span class="n">receivers</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">header</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/comms/managers.html#MsgManager.create_message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.comms.managers.MsgManager.create_message" title="Permalink to this definition"></a></dt>
<dd><p>Create a new communication Msg. Msgs represent a unit of
database-persistent communication between entites.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>senderobj</strong> (<em>Object</em><em>, </em><em>Account</em><em>, </em><em>Script</em><em>, </em><em>str</em><em> or </em><em>list</em>) The entity (or
entities) sending the Msg. If a <strong>str</strong>, this is the id-string
for an external sender type.</p></li>
<li><p><strong>message</strong> (<em>str</em>) Text with the message. Eventual headers, titles
etc should all be included in this text string. Formatting
will be retained.</p></li>
<li><p><strong>receivers</strong> (<em>Object</em><em>, </em><em>Account</em><em>, </em><em>Script</em><em>, </em><em>str</em><em> or </em><em>list</em>) An Account/Object to send
to, or a list of them. If a string, its an identifier for an external
receiver.</p></li>
<li><p><strong>locks</strong> (<em>str</em>) Lock definition string.</p></li>
<li><p><strong>tags</strong> (<em>list</em>) A list of tags or tuples <strong>(tag, category)</strong>.</p></li>
<li><p><strong>header</strong> (<em>str</em>) Mime-type or other optional information for the message</p></li>
</ul>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>The Comm system is created to be very open-ended, so its fully
possible to let a message both go several receivers at the same time,
its up to the command definitions to limit this as desired.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
@ -286,6 +315,39 @@ Also searches its aliases.</p>
case sensitive) match.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> Iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.comms.managers.ChannelDBManager.create_channel">
<code class="sig-name descname">create_channel</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">aliases</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">desc</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">keep_log</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/comms/managers.html#ChannelDBManager.create_channel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.comms.managers.ChannelDBManager.create_channel" title="Permalink to this definition"></a></dt>
<dd><p>Create A communication Channel. A Channel serves as a central hub
for distributing Msgs to groups of people without specifying the
receivers explicitly. Instead accounts may connect to the channel
and follow the flow of messages. By default the channel allows
access to all old messages, but this can be turned off with the
keep_log switch.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>key</strong> (<em>str</em>) This must be unique.</p>
</dd>
<dt class="field-even">Keyword Arguments</dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>aliases</strong> (<em>list of str</em>) List of alternative (likely shorter) keynames.</p></li>
<li><p><strong>desc</strong> (<em>str</em>) A description of the channel, for use in listings.</p></li>
<li><p><strong>locks</strong> (<em>str</em>) Lockstring.</p></li>
<li><p><strong>keep_log</strong> (<em>bool</em>) Log channel throughput.</p></li>
<li><p><strong>typeclass</strong> (<em>str</em><em> or </em><em>class</em>) The typeclass of the Channel (not
often used).</p></li>
<li><p><strong>tags</strong> (<em>list</em>) A list of tags or tuples <strong>(tag, category)</strong>.</p></li>
</ul>
</dd>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><em>channel (Channel)</em> A newly created channel.</p>
</dd>
</dl>
</dd></dl>
@ -301,6 +363,9 @@ case sensitive) match.</p></li>
case sensitive) match.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> Iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>

View file

@ -174,6 +174,34 @@ up in one easily separated category.</p>
<li><p><strong>category</strong> (<em>str</em>) Limit the search to a particular help topic</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> An iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.help.manager.HelpEntryManager.create_help">
<code class="sig-name descname">create_help</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">entrytext</span></em>, <em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">'General'</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">aliases</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/help/manager.html#HelpEntryManager.create_help"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.help.manager.HelpEntryManager.create_help" title="Permalink to this definition"></a></dt>
<dd><p>Create a static help entry in the help database. Note that Command
help entries are dynamic and directly taken from the __doc__
entries of the command. The database-stored help entries are
intended for more general help on the game, more extensive info,
in-game setting information and so on.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>key</strong> (<em>str</em>) The name of the help entry.</p></li>
<li><p><strong>entrytext</strong> (<em>str</em>) The body of te help entry</p></li>
<li><p><strong>category</strong> (<em>str</em><em>, </em><em>optional</em>) The help category of the entry.</p></li>
<li><p><strong>locks</strong> (<em>str</em><em>, </em><em>optional</em>) A lockstring to restrict access.</p></li>
<li><p><strong>aliases</strong> (<em>list of str</em><em>, </em><em>optional</em>) List of alternative (likely shorter) keynames.</p></li>
<li><p><strong>tags</strong> (<em>lst</em><em>, </em><em>optional</em>) List of tags or tuples <strong>(tag, category)</strong>.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>help (HelpEntry)</em> A newly created help entry.</p>
</dd>
</dl>
</dd></dl>

View file

@ -58,7 +58,7 @@ and manipulating Objects directly from the database.</p>
lists of Typeclasses, whereas Django-general methods will return
Querysets or database objects).</p>
<p>dbref (converter)
get_id (alias: dbref_search)
dbref_search
get_dbref_range
object_totals
typeclass_search
@ -148,8 +148,12 @@ objects.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>matches (query)</em> Objects fullfilling both the <strong>attribute_name</strong> and
<strong>attribute_value</strong> criterions.</p>
<dd class="field-even"><p><p><em>Queryset</em> </p>
<dl class="simple">
<dt>Iterable with 0, 1 or more matches fullfilling both the <strong>attribute_name</strong> and</dt><dd><p><strong>attribute_value</strong> criterions.</p>
</dd>
</dl>
</p>
</dd>
</dl>
<p class="rubric">Notes</p>
@ -188,6 +192,9 @@ cannot be indexed, searching by Attribute key is to be preferred whenever possib
<li><p><strong>typeclasses</strong> (<em>list</em><em>, </em><em>optional</em>) List of typeclass-path strings to restrict matches with</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> Iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
@ -204,7 +211,7 @@ to exclude from the match.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>contents (query)</em> Matching contents, without excludeobj, if given.</p>
<dd class="field-even"><p><em>Queryset</em> Iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
@ -224,7 +231,7 @@ using <strong>evennia.utils.utils.string_partial_matching</strong> algorithm.</p
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>matches (query)</em> A list of matches of length 0, 1 or more.</p>
<dd class="field-even"><p><em>Queryset</em> An iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
@ -402,6 +409,44 @@ arguments. <strong>None</strong> if an error was encountered.</p>
db_account field set.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.objects.manager.ObjectDBManager.create_object">
<code class="sig-name descname">create_object</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">key</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">location</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">home</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">permissions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">aliases</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">destination</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">report_to</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nohome</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nattributes</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/objects/manager.html#ObjectDBManager.create_object"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.objects.manager.ObjectDBManager.create_object" title="Permalink to this definition"></a></dt>
<dd><p>Create a new in-game object.</p>
<dl class="field-list simple">
<dt class="field-odd">Keyword Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>typeclass</strong> (<em>class</em><em> or </em><em>str</em>) Class or python path to a typeclass.</p></li>
<li><p><strong>key</strong> (<em>str</em>) Name of the new object. If not set, a name of
<strong>#dbref</strong> will be set.</p></li>
<li><p><strong>location</strong> (<em>Object</em><em> or </em><em>str</em>) Obj or #dbref to use as the location of the new object.</p></li>
<li><p><strong>home</strong> (<em>Object</em><em> or </em><em>str</em>) Obj or #dbref to use as the objects home location.</p></li>
<li><p><strong>permissions</strong> (<em>list</em>) A list of permission strings or tuples (permstring, category).</p></li>
<li><p><strong>locks</strong> (<em>str</em>) one or more lockstrings, separated by semicolons.</p></li>
<li><p><strong>aliases</strong> (<em>list</em>) A list of alternative keys or tuples (aliasstring, category).</p></li>
<li><p><strong>tags</strong> (<em>list</em>) List of tag keys or tuples (tagkey, category) or (tagkey, category, data).</p></li>
<li><p><strong>destination</strong> (<em>Object</em><em> or </em><em>str</em>) Obj or #dbref to use as an Exits target.</p></li>
<li><p><strong>report_to</strong> (<em>Object</em>) The object to return error messages to.</p></li>
<li><p><strong>nohome</strong> (<em>bool</em>) This allows the creation of objects without a
default home location; only used when creating the default
location itself or during unittests.</p></li>
<li><p><strong>attributes</strong> (<em>list</em>) Tuples on the form (key, value) or (key, value, category),
(key, value, lockstring) or (key, value, lockstring, default_access).
to set as Attributes on the new object.</p></li>
<li><p><strong>nattributes</strong> (<em>list</em>) Non-persistent tuples on the form (key, value). Note that
adding this rarely makes sense since this data will not survive a reload.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>object (Object)</em> A newly created object of the given typeclass.</p>
</dd>
<dt class="field-odd">Raises</dt>
<dd class="field-odd"><p><a class="reference internal" href="evennia.objects.models.html#evennia.objects.models.ObjectDB.DoesNotExist" title="evennia.objects.models.ObjectDB.DoesNotExist"><strong>ObjectDB.DoesNotExist</strong></a> If trying to create an Object with
<strong>location</strong> or <strong>home</strong> that cant be found.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</section>

View file

@ -58,7 +58,7 @@ and manipulating Scripts directly from the database.</p>
lists of Typeclasses, whereas Django-general methods will return
Querysets or database objects).</p>
<p>dbref (converter)
get_id (or dbref_search)
dbref_search
get_dbref_range
object_totals
typeclass_search
@ -139,6 +139,9 @@ on a timer.</p></li>
<li><p><strong>typeclass</strong> (<em>class</em><em> or </em><em>str</em>) Typeclass or path to typeclass.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> An iterable with 0, 1 or more results.</p>
</dd>
</dl>
</dd></dl>
@ -157,6 +160,9 @@ on a timer.</p></li>
<li><p><strong>typeclass</strong> (<em>class</em><em> or </em><em>str</em>) Typeclass or path to typeclass.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> An iterable with 0, 1 or more results.</p>
</dd>
</dl>
</dd></dl>
@ -185,6 +191,51 @@ the original.</p></li>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.scripts.manager.ScriptDBManager.create_script">
<code class="sig-name descname">create_script</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">key</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">obj</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">account</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">interval</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">start_delay</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">repeats</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">persistent</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">autostart</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">report_to</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">desc</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/manager.html#ScriptDBManager.create_script"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.manager.ScriptDBManager.create_script" title="Permalink to this definition"></a></dt>
<dd><p>Create a new script. All scripts are a combination of a database
object that communicates with the database, and an typeclass that
decorates the database object into being different types of
scripts. Its behaviour is similar to the game objects except
scripts has a time component and are more limited in scope.</p>
<dl class="field-list simple">
<dt class="field-odd">Keyword Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>typeclass</strong> (<em>class</em><em> or </em><em>str</em>) Class or python path to a typeclass.</p></li>
<li><p><strong>key</strong> (<em>str</em>) Name of the new object. If not set, a name of
#dbref will be set.</p></li>
<li><p><strong>obj</strong> (<em>Object</em>) The entity on which this Script sits. If this
is <strong>None</strong>, we are creating a “global” script.</p></li>
<li><p><strong>account</strong> (<em>Account</em>) The account on which this Script sits. It is
exclusiv to <strong>obj</strong>.</p></li>
<li><p><strong>locks</strong> (<em>str</em>) one or more lockstrings, separated by semicolons.</p></li>
<li><p><strong>interval</strong> (<em>int</em>) The triggering interval for this Script, in
seconds. If unset, the Script will not have a timing
component.</p></li>
<li><p><strong>start_delay</strong> (<em>bool</em>) If <strong>True</strong>, will wait <strong>interval</strong> seconds
before triggering the first time.</p></li>
<li><p><strong>repeats</strong> (<em>int</em>) The number of times to trigger before stopping.
If unset, will repeat indefinitely.</p></li>
<li><p><strong>persistent</strong> (<em>bool</em>) If this Script survives a server shutdown
or not (all Scripts will survive a reload).</p></li>
<li><p><strong>autostart</strong> (<em>bool</em>) If this Script will start immediately when
created or if the <strong>start</strong> method must be called explicitly.</p></li>
<li><p><strong>report_to</strong> (<em>Object</em>) The object to return error messages to.</p></li>
<li><p><strong>desc</strong> (<em>str</em>) Optional description of script</p></li>
<li><p><strong>tags</strong> (<em>list</em>) List of tags or tuples (tag, category).</p></li>
<li><p><strong>attributes</strong> (<em>list</em>) List if tuples (key, value) or (key, value, category)
(key, value, lockstring) or (key, value, lockstring, default_access).</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>script (obj)</em> An instance of the script created</p>
</dd>
</dl>
<p>See evennia.scripts.manager for methods to manipulate existing
scripts in the database.</p>
</dd></dl>
</dd></dl>
</section>

View file

@ -99,7 +99,7 @@ non-persistent tickers must be killed.</p>
<dl class="py method">
<dt id="evennia.scripts.monitorhandler.MonitorHandler.add">
<code class="sig-name descname">add</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em>, <em class="sig-param"><span class="n">fieldname</span></em>, <em class="sig-param"><span class="n">callback</span></em>, <em class="sig-param"><span class="n">idstring</span><span class="o">=</span><span class="default_value">''</span></em>, <em class="sig-param"><span class="n">persistent</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.add" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">add</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em>, <em class="sig-param"><span class="n">fieldname</span></em>, <em class="sig-param"><span class="n">callback</span></em>, <em class="sig-param"><span class="n">idstring</span><span class="o">=</span><span class="default_value">''</span></em>, <em class="sig-param"><span class="n">persistent</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.add" title="Permalink to this definition"></a></dt>
<dd><p>Add monitoring to a given field or Attribute. A field must
be specified with the full db_* name or it will be assumed
to be an Attribute (so <strong>db_key</strong>, not just <strong>key</strong>).</p>
@ -115,6 +115,9 @@ where kwargs holds keys fieldname and obj.</p></li>
of the same field and object.</p></li>
<li><p><strong>persistent</strong> (<em>bool</em><em>, </em><em>optional</em>) If False, the monitor will survive
a server reload but not a cold restart. This is default.</p></li>
<li><p><strong>category</strong> (<em>str</em><em>, </em><em>optional</em>) This is only used if <strong>fieldname</strong> refers to
an Attribute (i.e. it does not start with <strong>db_</strong>). You must specify this
if you want to target an Attribute with a category.</p></li>
</ul>
</dd>
<dt class="field-even">Keyword Arguments</dt>
@ -131,7 +134,7 @@ all kwargs must be possible to pickle!</p></li>
<dl class="py method">
<dt id="evennia.scripts.monitorhandler.MonitorHandler.remove">
<code class="sig-name descname">remove</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em>, <em class="sig-param"><span class="n">fieldname</span></em>, <em class="sig-param"><span class="n">idstring</span><span class="o">=</span><span class="default_value">''</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.remove" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">remove</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em>, <em class="sig-param"><span class="n">fieldname</span></em>, <em class="sig-param"><span class="n">idstring</span><span class="o">=</span><span class="default_value">''</span></em>, <em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.remove" title="Permalink to this definition"></a></dt>
<dd><p>Remove a monitor.</p>
</dd></dl>

View file

@ -360,7 +360,7 @@ either a string #N or an integer N.</p>
<dd class="field-odd"><p><strong>dbref</strong> (<em>str</em><em> or </em><em>int</em>) The id to search for.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>object (TypedObject)</em> The matched object.</p>
<dd class="field-even"><p><em>Queryset</em> Queryset with 0 or 1 match.</p>
</dd>
</dl>
</dd></dl>

View file

@ -52,7 +52,7 @@ utils.search module and allows you to do the shorter <strong>create.object()</st
objects already existing in the database.</p>
<dl class="py function">
<dt id="evennia.utils.create.create_object">
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_object</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">key</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">location</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">home</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">permissions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">aliases</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">destination</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">report_to</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nohome</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nattributes</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/create.html#create_object"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.create.create_object" title="Permalink to this definition"></a></dt>
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_object</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">key</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">location</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">home</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">permissions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">aliases</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">destination</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">report_to</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nohome</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nattributes</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.utils.create.create_object" title="Permalink to this definition"></a></dt>
<dd><p>Create a new in-game object.</p>
<dl class="field-list simple">
<dt class="field-odd">Keyword Arguments</dt>
@ -90,7 +90,7 @@ adding this rarely makes sense since this data will not survive a reload.</p></l
<dl class="py function">
<dt id="evennia.utils.create.create_script">
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_script</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">key</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">obj</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">account</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">interval</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">start_delay</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">repeats</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">persistent</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">autostart</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">report_to</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">desc</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/create.html#create_script"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.create.create_script" title="Permalink to this definition"></a></dt>
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_script</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">key</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">obj</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">account</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">interval</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">start_delay</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">repeats</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">persistent</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">autostart</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">report_to</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">desc</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.utils.create.create_script" title="Permalink to this definition"></a></dt>
<dd><p>Create a new script. All scripts are a combination of a database
object that communicates with the database, and an typeclass that
decorates the database object into being different types of
@ -135,7 +135,7 @@ scripts in the database.</p>
<dl class="py function">
<dt id="evennia.utils.create.create_help_entry">
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_help_entry</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">entrytext</span></em>, <em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">'General'</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">aliases</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/create.html#create_help_entry"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.create.create_help_entry" title="Permalink to this definition"></a></dt>
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_help_entry</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">entrytext</span></em>, <em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">'General'</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">aliases</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.utils.create.create_help_entry" title="Permalink to this definition"></a></dt>
<dd><p>Create a static help entry in the help database. Note that Command
help entries are dynamic and directly taken from the __doc__
entries of the command. The database-stored help entries are
@ -160,7 +160,7 @@ in-game setting information and so on.</p>
<dl class="py function">
<dt id="evennia.utils.create.create_message">
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_message</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">senderobj</span></em>, <em class="sig-param"><span class="n">message</span></em>, <em class="sig-param"><span class="n">receivers</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">header</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/create.html#create_message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.create.create_message" title="Permalink to this definition"></a></dt>
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_message</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">senderobj</span></em>, <em class="sig-param"><span class="n">message</span></em>, <em class="sig-param"><span class="n">receivers</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">header</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.utils.create.create_message" title="Permalink to this definition"></a></dt>
<dd><p>Create a new communication Msg. Msgs represent a unit of
database-persistent communication between entites.</p>
<dl class="field-list simple">
@ -189,7 +189,7 @@ its up to the command definitions to limit this as desired.</p>
<dl class="py function">
<dt id="evennia.utils.create.create_channel">
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_channel</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">aliases</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">desc</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">keep_log</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/create.html#create_channel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.create.create_channel" title="Permalink to this definition"></a></dt>
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_channel</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">aliases</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">desc</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">keep_log</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.utils.create.create_channel" title="Permalink to this definition"></a></dt>
<dd><p>Create A communication Channel. A Channel serves as a central hub
for distributing Msgs to groups of people without specifying the
receivers explicitly. Instead accounts may connect to the channel
@ -219,7 +219,7 @@ often used).</p></li>
<dl class="py function">
<dt id="evennia.utils.create.create_account">
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_account</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">email</span></em>, <em class="sig-param"><span class="n">password</span></em>, <em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">is_superuser</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">permissions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">report_to</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/create.html#create_account"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.create.create_account" title="Permalink to this definition"></a></dt>
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_account</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">email</span></em>, <em class="sig-param"><span class="n">password</span></em>, <em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">is_superuser</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">permissions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">report_to</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.utils.create.create_account" title="Permalink to this definition"></a></dt>
<dd><p>This creates a new account.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>

View file

@ -276,7 +276,7 @@ indentation.</p>
<dl class="py attribute">
<dt id="evennia.utils.eveditor.CmdEditorGroup.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = [':wq', ':f', ':u', ':q', ':s', ':fi', ':q!', ':A', ':!', ':uu', ':j', ':r', ':echo', ':w', ':dw', ':=', ':DD', ':&gt;', ':fd', ':p', '::', ':', ':S', ':x', ':i', ':::', ':UU', ':dd', ':&lt;', ':h', ':I', ':y']</em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = [':S', ':w', ':UU', ':fd', ':', ':dd', ':f', ':::', ':DD', ':x', ':i', ':echo', ':q', ':h', ':dw', ':A', ':s', ':&gt;', '::', ':p', ':uu', ':!', ':u', ':wq', ':I', ':fi', ':=', ':&lt;', ':j', ':r', ':q!', ':y']</em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -304,7 +304,7 @@ efficient presentation.</p>
<dl class="py attribute">
<dt id="evennia.utils.eveditor.CmdEditorGroup.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': ':wq :f :u :q :s :fi :q! :A :! :uu :j :r :echo :w :dw := :DD :&gt; :fd :p :: : :S :x :i ::: :UU :dd :&lt; :h :I :y', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :wq :f :u :q :s :fi :q! :A :! :uu :j :r :echo :w :dw := :DD :&gt; :fd :p :: : :S :x :i ::: :UU :dd :&lt; :h :I :y', 'tags': '', 'text': '\n Commands for the editor\n '}</em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': ':S :w :UU :fd : :dd :f ::: :DD :x :i :echo :q :h :dw :A :s :&gt; :: :p :uu :! :u :wq :I :fi := :&lt; :j :r :q! :y', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :S :w :UU :fd : :dd :f ::: :DD :x :i :echo :q :h :dw :A :s :&gt; :: :p :uu :! :u :wq :I :fi := :&lt; :j :r :q! :y', 'tags': '', 'text': '\n Commands for the editor\n '}</em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -946,7 +946,7 @@ single question.</p>
<dl class="py attribute">
<dt id="evennia.utils.evmenu.CmdYesNoQuestion.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['n', 'abort', 'yes', 'no', 'a', '__nomatch_command', 'y']</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['n', 'a', 'yes', 'no', 'abort', 'y', '__nomatch_command']</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -972,7 +972,7 @@ single question.</p>
<dl class="py attribute">
<dt id="evennia.utils.evmenu.CmdYesNoQuestion.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'n abort yes no a __nomatch_command y', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' n abort yes no a __nomatch_command y', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'n a yes no abort y __nomatch_command', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' n a yes no abort y __nomatch_command', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -77,7 +77,7 @@ the <strong>caller.msg()</strong> construct every time the page is updated.</p>
<dl class="py attribute">
<dt id="evennia.utils.evmore.CmdMore.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['top', 'end', 'p', 'n', 'abort', 't', 'next', 'quit', 'a', 'e', 'previous', 'q']</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['n', 'a', 'p', 't', 'end', 'next', 'e', 'previous', 'top', 'abort', 'quit', 'q']</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -103,7 +103,7 @@ the <strong>caller.msg()</strong> construct every time the page is updated.</p>
<dl class="py attribute">
<dt id="evennia.utils.evmore.CmdMore.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'top end p n abort t next quit a e previous q', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' top end p n abort t next quit a e previous q', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'n a p t end next e previous top abort quit q', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' n a p t end next e previous top abort quit q', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -120,6 +120,9 @@ otherwise also match also keys containing the <strong>ostring</strong>
accounts of this typeclass.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> A queryset (an iterable) with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
@ -138,6 +141,9 @@ on a timer.</p></li>
<li><p><strong>typeclass</strong> (<em>class</em><em> or </em><em>str</em>) Typeclass or path to typeclass.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> An iterable with 0, 1 or more results.</p>
</dd>
</dl>
</dd></dl>
@ -161,7 +167,7 @@ always gives only one match.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> Message matches.</p>
<dd class="field-even"><p><em>Queryset</em> Iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
@ -178,6 +184,9 @@ always gives only one match.</p></li>
case sensitive) match.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> Iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
@ -192,6 +201,9 @@ case sensitive) match.</p></li>
<li><p><strong>category</strong> (<em>str</em>) Limit the search to a particular help topic</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> An iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>

View file

@ -118,21 +118,6 @@ loaded once).</p>
<dd><p>alias of <a class="reference internal" href="evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript" title="evennia.scripts.scripts.DefaultScript"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.scripts.scripts.DefaultScript</span></code></a></p>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.test_resources.EvenniaTestMixin.save_backups">
<code class="sig-name descname">save_backups</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/test_resources.html#EvenniaTestMixin.save_backups"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.test_resources.EvenniaTestMixin.save_backups" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.utils.test_resources.EvenniaTestMixin.restore_backups">
<code class="sig-name descname">restore_backups</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/test_resources.html#EvenniaTestMixin.restore_backups"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.test_resources.EvenniaTestMixin.restore_backups" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.utils.test_resources.EvenniaTestMixin.mock_sessions">
<code class="sig-name descname">mock_sessions</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/test_resources.html#EvenniaTestMixin.mock_sessions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.test_resources.EvenniaTestMixin.mock_sessions" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.utils.test_resources.EvenniaTestMixin.create_accounts">
<code class="sig-name descname">create_accounts</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/test_resources.html#EvenniaTestMixin.create_accounts"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.test_resources.EvenniaTestMixin.create_accounts" title="Permalink to this definition"></a></dt>

View file

@ -326,8 +326,6 @@
</li>
</ul></li>
<li><a href="api/evennia.server.sessionhandler.html#evennia.server.sessionhandler.ServerSessionHandler.account_count">account_count() (evennia.server.sessionhandler.ServerSessionHandler method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.account_mode">account_mode (evennia.commands.default.building.CmdExamine attribute)</a>
</li>
<li><a href="api/evennia.accounts.manager.html#evennia.accounts.manager.AccountDBManager.account_search">account_search() (evennia.accounts.manager.AccountDBManager method)</a>
</li>
@ -731,14 +729,14 @@
</li>
<li><a href="api/evennia.server.portal.amp_server.html#evennia.server.portal.amp_server.AMPServerProtocol">AMPServerProtocol (class in evennia.server.portal.amp_server)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.server.portal.portalsessionhandler.html#evennia.server.portal.portalsessionhandler.PortalSessionHandler.announce_all">announce_all() (evennia.server.portal.portalsessionhandler.PortalSessionHandler method)</a>
<ul>
<li><a href="api/evennia.server.sessionhandler.html#evennia.server.sessionhandler.ServerSessionHandler.announce_all">(evennia.server.sessionhandler.ServerSessionHandler method)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.objects.objects.html#evennia.objects.objects.DefaultObject.announce_move_from">announce_move_from() (evennia.objects.objects.DefaultObject method)</a>
</li>
<li><a href="api/evennia.objects.objects.html#evennia.objects.objects.DefaultObject.announce_move_to">announce_move_to() (evennia.objects.objects.DefaultObject method)</a>
@ -1749,14 +1747,14 @@
</li>
<li><a href="api/evennia.utils.eveditor.html#evennia.utils.eveditor.CmdLineInput">CmdLineInput (class in evennia.utils.eveditor)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdLink">CmdLink (class in evennia.commands.default.building)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdListCmdSets">CmdListCmdSets (class in evennia.commands.default.building)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdLock">CmdLock (class in evennia.commands.default.building)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.commands.default.general.html#evennia.commands.default.general.CmdLook">CmdLook (class in evennia.commands.default.general)</a>
</li>
<li><a href="api/evennia.utils.evmore.html#evennia.utils.evmore.CmdMore">CmdMore (class in evennia.utils.evmore)</a>
@ -2053,8 +2051,12 @@
<li><a href="api/evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript.create">(evennia.scripts.scripts.DefaultScript class method)</a>
</li>
</ul></li>
<li><a href="api/evennia.utils.create.html#evennia.utils.create.create_account">create_account() (in module evennia.utils.create)</a>
<li><a href="api/evennia.accounts.manager.html#evennia.accounts.manager.AccountDBManager.create_account">create_account() (evennia.accounts.manager.AccountDBManager method)</a>
<ul>
<li><a href="api/evennia.utils.create.html#evennia.utils.create.create_account">(in module evennia.utils.create)</a>
</li>
</ul></li>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.create_accounts">create_accounts() (evennia.utils.test_resources.EvenniaTestMixin method)</a>
</li>
<li><a href="api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.IAttributeBackend.create_attribute">create_attribute() (evennia.typeclasses.attributes.IAttributeBackend method)</a>
@ -2062,6 +2064,8 @@
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannel.create_channel">create_channel() (evennia.commands.default.comms.CmdChannel method)</a>
<ul>
<li><a href="api/evennia.comms.managers.html#evennia.comms.managers.ChannelDBManager.create_channel">(evennia.comms.managers.ChannelDBManager method)</a>
</li>
<li><a href="api/evennia.utils.create.html#evennia.utils.create.create_channel">(in module evennia.utils.create)</a>
</li>
</ul></li>
@ -2078,15 +2082,25 @@
<li><a href="api/evennia.objects.objects.html#evennia.objects.objects.DefaultExit.create_exit_cmdset">create_exit_cmdset() (evennia.objects.objects.DefaultExit method)</a>
</li>
<li><a href="api/evennia.server.evennia_launcher.html#evennia.server.evennia_launcher.create_game_directory">create_game_directory() (in module evennia.server.evennia_launcher)</a>
</li>
<li><a href="api/evennia.help.manager.html#evennia.help.manager.HelpEntryManager.create_help">create_help() (evennia.help.manager.HelpEntryManager method)</a>
</li>
<li><a href="api/evennia.utils.create.html#evennia.utils.create.create_help_entry">create_help_entry() (in module evennia.utils.create)</a>
</li>
<li><a href="api/evennia.commands.cmdparser.html#evennia.commands.cmdparser.create_match">create_match() (in module evennia.commands.cmdparser)</a>
</li>
<li><a href="api/evennia.utils.create.html#evennia.utils.create.create_message">create_message() (in module evennia.utils.create)</a>
<li><a href="api/evennia.comms.managers.html#evennia.comms.managers.MsgManager.create_message">create_message() (evennia.comms.managers.MsgManager method)</a>
<ul>
<li><a href="api/evennia.utils.create.html#evennia.utils.create.create_message">(in module evennia.utils.create)</a>
</li>
<li><a href="api/evennia.utils.create.html#evennia.utils.create.create_object">create_object() (in module evennia.utils.create)</a>
</ul></li>
<li><a href="api/evennia.objects.manager.html#evennia.objects.manager.ObjectDBManager.create_object">create_object() (evennia.objects.manager.ObjectDBManager method)</a>
<ul>
<li><a href="api/evennia.utils.create.html#evennia.utils.create.create_object">(in module evennia.utils.create)</a>
</li>
</ul></li>
<li><a href="api/evennia.server.initial_setup.html#evennia.server.initial_setup.create_objects">create_objects() (in module evennia.server.initial_setup)</a>
</li>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.create_objs">create_objs() (evennia.utils.test_resources.EvenniaTestMixin method)</a>
@ -2095,9 +2109,11 @@
</li>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.create_rooms">create_rooms() (evennia.utils.test_resources.EvenniaTestMixin method)</a>
</li>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.create_script">create_script() (evennia.utils.test_resources.EvenniaTestMixin method)</a>
<li><a href="api/evennia.scripts.manager.html#evennia.scripts.manager.ScriptDBManager.create_script">create_script() (evennia.scripts.manager.ScriptDBManager method)</a>
<ul>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.create_script">(evennia.utils.test_resources.EvenniaTestMixin method)</a>
</li>
<li><a href="api/evennia.utils.create.html#evennia.utils.create.create_script">(in module evennia.utils.create)</a>
</li>
</ul></li>
@ -4044,6 +4060,12 @@
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_attributes">format_attributes() (evennia.commands.default.building.CmdExamine method)</a>
</li>
<li><a href="api/evennia.prototypes.prototypes.html#evennia.prototypes.prototypes.format_available_protfuncs">format_available_protfuncs() (in module evennia.prototypes.prototypes)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_channel_account_subs">format_channel_account_subs() (evennia.commands.default.building.CmdExamine method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_channel_object_subs">format_channel_object_subs() (evennia.commands.default.building.CmdExamine method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_channel_sub_totals">format_channel_sub_totals() (evennia.commands.default.building.CmdExamine method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_chars">format_chars() (evennia.commands.default.building.CmdExamine method)</a>
</li>
@ -4082,6 +4104,12 @@
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_output">format_output() (evennia.commands.default.building.CmdExamine method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_permissions">format_permissions() (evennia.commands.default.building.CmdExamine method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_script_desc">format_script_desc() (evennia.commands.default.building.CmdExamine method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_script_is_persistent">format_script_is_persistent() (evennia.commands.default.building.CmdExamine method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_script_timer_data">format_script_timer_data() (evennia.commands.default.building.CmdExamine method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_scripts">format_scripts() (evennia.commands.default.building.CmdExamine method)</a>
</li>
@ -6244,8 +6272,6 @@
<li><a href="api/evennia.comms.managers.html#evennia.comms.managers.MsgManager.message_search">message_search() (evennia.comms.managers.MsgManager method)</a>
</li>
<li><a href="api/evennia.comms.comms.html#evennia.comms.comms.DefaultChannel.message_transform">message_transform() (evennia.comms.comms.DefaultChannel method)</a>
</li>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.mock_sessions">mock_sessions() (evennia.utils.test_resources.EvenniaTestMixin method)</a>
</li>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.mockdeferLater">mockdeferLater() (in module evennia.utils.test_resources)</a>
</li>
@ -6913,6 +6939,8 @@
<li><a href="api/evennia.objects.models.html#evennia.objects.models.ObjectDB.object_subscription_set">object_subscription_set (evennia.objects.models.ObjectDB attribute)</a>
</li>
<li><a href="api/evennia.typeclasses.managers.html#evennia.typeclasses.managers.TypedObjectManager.object_totals">object_totals() (evennia.typeclasses.managers.TypedObjectManager method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.object_type">object_type (evennia.commands.default.building.CmdExamine attribute)</a>
</li>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTest.object_typeclass">object_typeclass (evennia.utils.test_resources.EvenniaTest attribute)</a>
@ -7577,11 +7605,11 @@
<li><a href="api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.remove_backspaces">remove_backspaces() (evennia.utils.text2html.TextToHTMLparser method)</a>
</li>
<li><a href="api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.remove_bells">remove_bells() (evennia.utils.text2html.TextToHTMLparser method)</a>
</li>
<li><a href="api/evennia.commands.cmdsethandler.html#evennia.commands.cmdsethandler.CmdSetHandler.remove_default">remove_default() (evennia.commands.cmdsethandler.CmdSetHandler method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.commands.cmdsethandler.html#evennia.commands.cmdsethandler.CmdSetHandler.remove_default">remove_default() (evennia.commands.cmdsethandler.CmdSetHandler method)</a>
</li>
<li><a href="api/evennia.comms.models.html#evennia.comms.models.Msg.remove_receiver">remove_receiver() (evennia.comms.models.Msg method)</a>
<ul>
@ -7670,8 +7698,6 @@
<li><a href="api/evennia.scripts.tickerhandler.html#evennia.scripts.tickerhandler.TickerHandler.restore">(evennia.scripts.tickerhandler.TickerHandler method)</a>
</li>
</ul></li>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.restore_backups">restore_backups() (evennia.utils.test_resources.EvenniaTestMixin method)</a>
</li>
<li><a href="api/evennia.commands.command.html#evennia.commands.command.Command.retain_instance">retain_instance (evennia.commands.command.Command attribute)</a>
</li>
<li><a href="api/evennia.objects.objects.html#evennia.objects.objects.DefaultObject.return_appearance">return_appearance() (evennia.objects.objects.DefaultObject method)</a>
@ -7778,8 +7804,6 @@
<li><a href="api/evennia.utils.optionclasses.html#evennia.utils.optionclasses.BaseOption.save">(evennia.utils.optionclasses.BaseOption method)</a>
</li>
</ul></li>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.save_backups">save_backups() (evennia.utils.test_resources.EvenniaTestMixin method)</a>
</li>
<li><a href="api/evennia.utils.eveditor.html#evennia.utils.eveditor.EvEditor.save_buffer">save_buffer() (evennia.utils.eveditor.EvEditor method)</a>
</li>
<li><a href="api/evennia.commands.command.html#evennia.commands.command.Command.save_for_next">save_for_next (evennia.commands.command.Command attribute)</a>
@ -8220,10 +8244,10 @@
<li><a href="api/evennia.utils.optionclasses.html#evennia.utils.optionclasses.Timezone.serialize">(evennia.utils.optionclasses.Timezone method)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.server.portal.portalsessionhandler.html#evennia.server.portal.portalsessionhandler.PortalSessionHandler.server_connect">server_connect() (evennia.server.portal.portalsessionhandler.PortalSessionHandler method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.server.portal.portalsessionhandler.html#evennia.server.portal.portalsessionhandler.PortalSessionHandler.server_disconnect">server_disconnect() (evennia.server.portal.portalsessionhandler.PortalSessionHandler method)</a>
</li>
<li><a href="api/evennia.server.portal.portalsessionhandler.html#evennia.server.portal.portalsessionhandler.PortalSessionHandler.server_disconnect_all">server_disconnect_all() (evennia.server.portal.portalsessionhandler.PortalSessionHandler method)</a>
@ -8626,6 +8650,8 @@
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdDestroy.switch_options">(evennia.commands.default.building.CmdDestroy attribute)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdDig.switch_options">(evennia.commands.default.building.CmdDig attribute)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.switch_options">(evennia.commands.default.building.CmdExamine attribute)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdFind.switch_options">(evennia.commands.default.building.CmdFind attribute)</a>
</li>
@ -8993,6 +9019,8 @@
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_say">test_say() (evennia.commands.default.tests.TestGeneral method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_script">test_script() (evennia.commands.default.tests.TestBuilding method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_script_multi_delete">test_script_multi_delete() (evennia.commands.default.tests.TestBuilding method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystem.test_scripts">test_scripts() (evennia.commands.default.tests.TestSystem method)</a>
</li>

Binary file not shown.

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 388d32df924aaf9ca6b477785c97b89b
config: 44e75c10040f09608c15510f0fb43995
tags: 645f666f9bcd5a90fca523b33c5a78b7

View file

@ -47,9 +47,12 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">datetime</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.contrib.auth.models</span> <span class="kn">import</span> <span class="n">UserManager</span>
<span class="kn">from</span> <span class="nn">evennia.typeclasses.managers</span> <span class="kn">import</span> <span class="n">TypedObjectManager</span><span class="p">,</span> <span class="n">TypeclassManager</span>
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">dbid_to_obj</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;AccountManager&quot;</span><span class="p">,</span> <span class="s2">&quot;AccountDBManager&quot;</span><span class="p">)</span>
@ -197,14 +200,17 @@
<span class="sd"> (non-case-sensitive fuzzy match).</span>
<span class="sd"> typeclass (str or Typeclass, optional): Limit the search only to</span>
<span class="sd"> accounts of this typeclass.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Queryset: A queryset (an iterable) with 0, 1 or more matches.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">dbref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">ostring</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dbref</span> <span class="ow">or</span> <span class="n">dbref</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="c1"># bref search is always exact</span>
<span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">dbref</span><span class="p">)</span>
<span class="k">if</span> <span class="n">matches</span><span class="p">:</span>
<span class="k">return</span> <span class="n">matches</span>
<span class="c1"># dbref search is always exact</span>
<span class="n">dbref_match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">search_dbref</span><span class="p">(</span><span class="n">dbref</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dbref_match</span><span class="p">:</span>
<span class="k">return</span> <span class="n">dbref_match</span>
<span class="n">query</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;username__iexact&quot;</span> <span class="k">if</span> <span class="n">exact</span> <span class="k">else</span> <span class="s2">&quot;username__icontains&quot;</span><span class="p">:</span> <span class="n">ostring</span><span class="p">}</span>
<span class="k">if</span> <span class="n">typeclass</span><span class="p">:</span>
<span class="c1"># we accept both strings and actual typeclasses</span>
@ -225,6 +231,108 @@
<span class="p">)</span>
<span class="k">return</span> <span class="n">matches</span></div>
<div class="viewcode-block" id="AccountDBManager.create_account"><a class="viewcode-back" href="../../../api/evennia.accounts.manager.html#evennia.accounts.accounts.AccountDBManager.create_account">[docs]</a> <span class="k">def</span> <span class="nf">create_account</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">key</span><span class="p">,</span>
<span class="n">email</span><span class="p">,</span>
<span class="n">password</span><span class="p">,</span>
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">is_superuser</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This creates a new account.</span>
<span class="sd"> Args:</span>
<span class="sd"> key (str): The account&#39;s name. This should be unique.</span>
<span class="sd"> email (str or None): Email on valid addr@addr.domain form. If</span>
<span class="sd"> the empty string, will be set to None.</span>
<span class="sd"> password (str): Password in cleartext.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> typeclass (str): The typeclass to use for the account.</span>
<span class="sd"> is_superuser (bool): Wether or not this account is to be a superuser</span>
<span class="sd"> locks (str): Lockstring.</span>
<span class="sd"> permission (list): List of permission strings.</span>
<span class="sd"> tags (list): List of Tags on form `(key, category[, data])`</span>
<span class="sd"> attributes (list): List of Attributes on form</span>
<span class="sd"> `(key, value [, category, [,lockstring [, default_pass]]])`</span>
<span class="sd"> report_to (Object): An object with a msg() method to report</span>
<span class="sd"> errors to. If not given, errors will be logged.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Account: The newly created Account.</span>
<span class="sd"> Raises:</span>
<span class="sd"> ValueError: If `key` already exists in database.</span>
<span class="sd"> Notes:</span>
<span class="sd"> Usually only the server admin should need to be superuser, all</span>
<span class="sd"> other access levels can be handled with more fine-grained</span>
<span class="sd"> permissions or groups. A superuser bypasses all lock checking</span>
<span class="sd"> operations and is thus not suitable for play-testing the game.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_ACCOUNT_TYPECLASS</span>
<span class="n">locks</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span> <span class="k">if</span> <span class="n">locks</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">permissions</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">permissions</span><span class="p">)</span> <span class="k">if</span> <span class="n">permissions</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="c1"># a path is given. Load the actual typeclass.</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
<span class="c1"># setup input for the create command. We use AccountDB as baseclass</span>
<span class="c1"># here to give us maximum freedom (the typeclasses will load</span>
<span class="c1"># correctly when each object is recovered).</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">email</span><span class="p">:</span>
<span class="n">email</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">username__iexact</span><span class="o">=</span><span class="n">key</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;An Account with the name &#39;</span><span class="si">%s</span><span class="s2">&#39; already exists.&quot;</span> <span class="o">%</span> <span class="n">key</span><span class="p">)</span>
<span class="c1"># this handles a given dbref-relocate to an account.</span>
<span class="n">report_to</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">report_to</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
<span class="c1"># create the correct account entity, using the setup from</span>
<span class="c1"># base django auth.</span>
<span class="n">now</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
<span class="n">email</span> <span class="o">=</span> <span class="n">typeclass</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">normalize_email</span><span class="p">(</span><span class="n">email</span><span class="p">)</span>
<span class="n">new_account</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span>
<span class="n">username</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<span class="n">email</span><span class="o">=</span><span class="n">email</span><span class="p">,</span>
<span class="n">is_staff</span><span class="o">=</span><span class="n">is_superuser</span><span class="p">,</span>
<span class="n">is_superuser</span><span class="o">=</span><span class="n">is_superuser</span><span class="p">,</span>
<span class="n">last_login</span><span class="o">=</span><span class="n">now</span><span class="p">,</span>
<span class="n">date_joined</span><span class="o">=</span><span class="n">now</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">password</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># the password may be None for &#39;fake&#39; accounts, like bots</span>
<span class="n">valid</span><span class="p">,</span> <span class="n">error</span> <span class="o">=</span> <span class="n">new_account</span><span class="o">.</span><span class="n">validate_password</span><span class="p">(</span><span class="n">password</span><span class="p">,</span> <span class="n">new_account</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">valid</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">error</span>
<span class="n">new_account</span><span class="o">.</span><span class="n">set_password</span><span class="p">(</span><span class="n">password</span><span class="p">)</span>
<span class="n">new_account</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span> <span class="n">permissions</span><span class="o">=</span><span class="n">permissions</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span> <span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span>
<span class="p">)</span>
<span class="c1"># saving will trigger the signal that calls the</span>
<span class="c1"># at_first_save hook on the typeclass, where the _createdict</span>
<span class="c1"># can be used.</span>
<span class="n">new_account</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="c1"># note that we don&#39;t send a signal here, that is sent from the Account.create helper method</span>
<span class="c1"># instead.</span>
<span class="k">return</span> <span class="n">new_account</span></div>
<span class="c1"># back-compatibility alias</span>
<span class="n">account_search</span> <span class="o">=</span> <span class="n">search_account</span></div>

View file

@ -65,6 +65,7 @@
<span class="n">interactive</span><span class="p">,</span>
<span class="n">list_to_string</span><span class="p">,</span>
<span class="n">display_len</span><span class="p">,</span>
<span class="n">format_grid</span><span class="p">,</span>
<span class="p">)</span>
<span class="kn">from</span> <span class="nn">evennia.utils.eveditor</span> <span class="kn">import</span> <span class="n">EvEditor</span>
<span class="kn">from</span> <span class="nn">evennia.utils.evmore</span> <span class="kn">import</span> <span class="n">EvMore</span>
@ -75,6 +76,7 @@
<span class="n">COMMAND_DEFAULT_CLASS</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">)</span>
<span class="n">_FUNCPARSER</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_ATTRFUNCPARSER</span> <span class="o">=</span> <span class="kc">None</span>
<span class="c1"># limit symbol import for API</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span>
@ -1636,11 +1638,20 @@
<span class="sd"> char: Setting an attribute on a character (global search)</span>
<span class="sd"> character: Alias for char, as above.</span>
<span class="sd"> Example:</span>
<span class="sd"> set self/foo = &quot;bar&quot;</span>
<span class="sd"> set/delete self/foo</span>
<span class="sd"> set self/foo = $dbref(#53)</span>
<span class="sd"> Sets attributes on objects. The second example form above clears a</span>
<span class="sd"> previously set attribute while the third form inspects the current value of</span>
<span class="sd"> the attribute (if any). The last one (with the star) is a shortcut for</span>
<span class="sd"> operating on a player Account rather than an Object.</span>
<span class="sd"> If you want &lt;value&gt; to be an object, use $dbef(#dbref) or</span>
<span class="sd"> $search(key) to assign it. You need control or edit access to</span>
<span class="sd"> the object you are adding.</span>
<span class="sd"> The most common data to save with this command are strings and</span>
<span class="sd"> numbers. You can however also set Python primitives such as lists,</span>
<span class="sd"> dictionaries and tuples on objects (this might be important for</span>
@ -1965,13 +1976,33 @@
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rm_attr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">category</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># setting attribute(s). Make sure to convert to real Python type before saving.</span>
<span class="c1"># add support for $dbref() and $search() in set argument</span>
<span class="k">global</span> <span class="n">_ATTRFUNCPARSER</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_ATTRFUNCPARSER</span><span class="p">:</span>
<span class="n">_ATTRFUNCPARSER</span> <span class="o">=</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">FuncParser</span><span class="p">(</span>
<span class="p">{</span><span class="s2">&quot;dbref&quot;</span><span class="p">:</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">funcparser_callable_search</span><span class="p">,</span>
<span class="s2">&quot;search&quot;</span><span class="p">:</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">funcparser_callable_search</span><span class="p">}</span>
<span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;control&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;edit&quot;</span><span class="p">)):</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You don&#39;t have permission to edit </span><span class="si">%s</span><span class="s2">.&quot;</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_attr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">category</span><span class="p">):</span>
<span class="k">continue</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">_convert_from_string</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="c1"># from evennia import set_trace;set_trace()</span>
<span class="n">parsed_value</span> <span class="o">=</span> <span class="n">_ATTRFUNCPARSER</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">return_str</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">parsed_value</span><span class="p">,</span> <span class="s2">&quot;access&quot;</span><span class="p">):</span>
<span class="c1"># if this is an object we must have the right to read it, if so,</span>
<span class="c1"># we will not convert it to a string</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">parsed_value</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;control&quot;</span><span class="p">)</span>
<span class="ow">or</span> <span class="n">parsed_value</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;edit&quot;</span><span class="p">)):</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You don&#39;t have permission to set &quot;</span>
<span class="sa">f</span><span class="s2">&quot;object with identifier &#39;</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
<span class="k">continue</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">parsed_value</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">_convert_from_string</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="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">set_attr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">category</span><span class="p">))</span>
<span class="c1"># send feedback</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">))</span></div></div>
@ -2459,6 +2490,8 @@
<span class="sd"> Switch:</span>
<span class="sd"> account - examine an Account (same as adding *)</span>
<span class="sd"> object - examine an Object (useful when OOC)</span>
<span class="sd"> script - examine a Script</span>
<span class="sd"> channel - examine a Channel</span>
<span class="sd"> The examine command shows detailed game info about an</span>
<span class="sd"> object and optionally a specific attribute on it.</span>
@ -2473,8 +2506,10 @@
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:perm(examine) or perm(Builder)&quot;</span>
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">&quot;Building&quot;</span>
<span class="n">arg_regex</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;(/\w+?(\s|$))|\s|$&quot;</span>
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;account&quot;</span><span class="p">,</span> <span class="s2">&quot;object&quot;</span><span class="p">,</span> <span class="s2">&quot;script&quot;</span><span class="p">,</span> <span class="s2">&quot;channel&quot;</span><span class="p">]</span>
<span class="n">object_type</span> <span class="o">=</span> <span class="s2">&quot;object&quot;</span>
<span class="n">account_mode</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">detail_color</span> <span class="o">=</span> <span class="s2">&quot;|c&quot;</span>
<span class="n">header_color</span> <span class="o">=</span> <span class="s2">&quot;|w&quot;</span>
<span class="n">quell_color</span> <span class="o">=</span> <span class="s2">&quot;|r&quot;</span>
@ -2499,7 +2534,7 @@
<span class="k">return</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">utils</span><span class="o">.</span><span class="n">make_iter</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">aliases</span><span class="p">)))</span></div>
<div class="viewcode-block" id="CmdExamine.format_typeclass"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_typeclass">[docs]</a> <span class="k">def</span> <span class="nf">format_typeclass</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="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;typeclass&quot;</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">&quot;typeclass_path&quot;</span><span class="p">):</span>
<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">typename</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">typeclass_path</span><span class="si">}</span><span class="s2">)&quot;</span></div>
<div class="viewcode-block" id="CmdExamine.format_sessions"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_sessions">[docs]</a> <span class="k">def</span> <span class="nf">format_sessions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
@ -2598,7 +2633,7 @@
<span class="k">for</span> <span class="n">cmdset</span> <span class="ow">in</span> <span class="n">stored_cmdsets</span><span class="p">:</span>
<span class="k">if</span> <span class="n">cmdset</span><span class="o">.</span><span class="n">key</span> <span class="o">!=</span> <span class="s2">&quot;_EMPTY_CMDSET&quot;</span><span class="p">:</span>
<span class="n">stored_cmdset_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_single_cmdset</span><span class="p">(</span><span class="n">cmdset</span><span class="p">))</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">stored_cmdset_strings</span><span class="p">)</span></div>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">stored_cmdset_strings</span><span class="p">)</span></div>
<div class="viewcode-block" id="CmdExamine.format_merged_cmdsets"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_merged_cmdsets">[docs]</a> <span class="k">def</span> <span class="nf">format_merged_cmdsets</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="n">current_cmdset</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">obj</span><span class="p">,</span> <span class="s2">&quot;cmdset&quot;</span><span class="p">):</span>
@ -2632,7 +2667,7 @@
<span class="k">for</span> <span class="n">cmdset</span> <span class="ow">in</span> <span class="n">all_cmdsets</span><span class="p">:</span>
<span class="k">if</span> <span class="n">cmdset</span><span class="o">.</span><span class="n">key</span> <span class="o">!=</span> <span class="s2">&quot;_EMPTY_CMDSET&quot;</span><span class="p">:</span>
<span class="n">merged_cmdset_strings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_single_cmdset</span><span class="p">(</span><span class="n">cmdset</span><span class="p">))</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">merged_cmdset_strings</span><span class="p">)</span></div>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">merged_cmdset_strings</span><span class="p">)</span></div>
<div class="viewcode-block" id="CmdExamine.format_current_cmds"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_current_cmds">[docs]</a> <span class="k">def</span> <span class="nf">format_current_cmds</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="n">current_cmdset</span><span class="p">):</span>
<span class="n">current_commands</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">([</span><span class="n">cmd</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">current_cmdset</span> <span class="k">if</span> <span class="n">cmd</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;cmd&quot;</span><span class="p">)])</span>
@ -2687,10 +2722,13 @@
<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">header_color</span><span class="si">}{</span><span class="n">key</span><span class="si">}</span><span class="s2">|n=</span><span class="si">{</span><span class="n">value</span><span class="si">}{</span><span class="n">typ</span><span class="si">}</span><span class="s2">&quot;</span></div>
<div class="viewcode-block" id="CmdExamine.format_attributes"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_attributes">[docs]</a> <span class="k">def</span> <span class="nf">format_attributes</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="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
<span class="n">output</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
<span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_single_attribute</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
<span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_attributes</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
<span class="p">)</span></div>
<span class="p">)</span>
<span class="k">if</span> <span class="n">output</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
<span class="c1"># we don&#39;t want just an empty line</span>
<span class="k">return</span> <span class="n">output</span></div>
<div class="viewcode-block" id="CmdExamine.format_nattributes"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_nattributes">[docs]</a> <span class="k">def</span> <span class="nf">format_nattributes</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="k">try</span><span class="p">:</span>
@ -2721,6 +2759,51 @@
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">destination</span><span class="p">)</span>
<span class="k">return</span> <span class="n">things</span> <span class="k">if</span> <span class="n">things</span> <span class="k">else</span> <span class="kc">None</span></div>
<div class="viewcode-block" id="CmdExamine.format_script_desc"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_script_desc">[docs]</a> <span class="k">def</span> <span class="nf">format_script_desc</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="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;db_desc&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_desc</span><span class="p">:</span>
<span class="k">return</span> <span class="n">crop</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">db_desc</span><span class="p">,</span> <span class="mi">20</span><span class="p">)</span></div>
<div class="viewcode-block" id="CmdExamine.format_script_is_persistent"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_script_is_persistent">[docs]</a> <span class="k">def</span> <span class="nf">format_script_is_persistent</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="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;db_persistent&quot;</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;T&quot;</span> <span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_persistent</span> <span class="k">else</span> <span class="s2">&quot;F&quot;</span></div>
<div class="viewcode-block" id="CmdExamine.format_script_timer_data"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_script_timer_data">[docs]</a> <span class="k">def</span> <span class="nf">format_script_timer_data</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="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;db_interval&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_interval</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">start_delay</span> <span class="o">=</span> <span class="s2">&quot;T&quot;</span> <span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_start_delay</span> <span class="k">else</span> <span class="s2">&quot;F&quot;</span>
<span class="n">next_repeat</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">time_until_next_repeat</span><span class="p">()</span>
<span class="n">active</span> <span class="o">=</span> <span class="s2">&quot;|grunning|n&quot;</span> <span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_is_active</span> <span class="ow">and</span> <span class="n">next_repeat</span> <span class="k">else</span> <span class="s2">&quot;|rinactive|n&quot;</span>
<span class="n">interval</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_interval</span>
<span class="n">next_repeat</span> <span class="o">=</span> <span class="s2">&quot;N/A&quot;</span> <span class="k">if</span> <span class="n">next_repeat</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">next_repeat</span><span class="si">}</span><span class="s2">s&quot;</span>
<span class="n">repeats</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_repeats</span><span class="p">:</span>
<span class="n">remaining_repeats</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">remaining_repeats</span><span class="p">()</span>
<span class="n">remaining_repeats</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">if</span> <span class="n">remaining_repeats</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">remaining_repeats</span>
<span class="n">repeats</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; - </span><span class="si">{</span><span class="n">remaining_repeats</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">db_repeats</span><span class="si">}</span><span class="s2"> remain&quot;</span>
<span class="k">return</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">active</span><span class="si">}</span><span class="s2"> - interval: </span><span class="si">{</span><span class="n">interval</span><span class="si">}</span><span class="s2">s &quot;</span>
<span class="sa">f</span><span class="s2">&quot;(next: </span><span class="si">{</span><span class="n">next_repeat</span><span class="si">}{</span><span class="n">repeats</span><span class="si">}</span><span class="s2">, start_delay: </span><span class="si">{</span><span class="n">start_delay</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="CmdExamine.format_channel_sub_totals"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_channel_sub_totals">[docs]</a> <span class="k">def</span> <span class="nf">format_channel_sub_totals</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="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;db_account_subscriptions&quot;</span><span class="p">):</span>
<span class="n">account_subs</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="n">object_subs</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="n">online</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">subscriptions</span><span class="o">.</span><span class="n">online</span><span class="p">())</span>
<span class="n">ntotal</span> <span class="o">=</span> <span class="n">account_subs</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> <span class="o">+</span> <span class="n">object_subs</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">ntotal</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">online</span><span class="si">}</span><span class="s2"> online)&quot;</span></div>
<div class="viewcode-block" id="CmdExamine.format_channel_account_subs"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_channel_account_subs">[docs]</a> <span class="k">def</span> <span class="nf">format_channel_account_subs</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="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;db_account_subscriptions&quot;</span><span class="p">):</span>
<span class="n">account_subs</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="n">account_subs</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
<span class="n">format_grid</span><span class="p">([</span><span class="n">sub</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">sub</span> <span class="ow">in</span> <span class="n">account_subs</span><span class="p">],</span> <span class="n">sep</span><span class="o">=</span><span class="s1">&#39; &#39;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">_DEFAULT_WIDTH</span><span class="p">))</span></div>
<div class="viewcode-block" id="CmdExamine.format_channel_object_subs"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_channel_object_subs">[docs]</a> <span class="k">def</span> <span class="nf">format_channel_object_subs</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="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;db_object_subscriptions&quot;</span><span class="p">):</span>
<span class="n">object_subs</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="n">object_subs</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
<span class="n">format_grid</span><span class="p">([</span><span class="n">sub</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">sub</span> <span class="ow">in</span> <span class="n">object_subs</span><span class="p">],</span> <span class="n">sep</span><span class="o">=</span><span class="s1">&#39; &#39;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">_DEFAULT_WIDTH</span><span class="p">))</span></div>
<div class="viewcode-block" id="CmdExamine.get_formatted_obj_data"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.get_formatted_obj_data">[docs]</a> <span class="k">def</span> <span class="nf">get_formatted_obj_data</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="n">current_cmdset</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Calls all other `format_*` methods.</span>
@ -2748,6 +2831,10 @@
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Merged Cmdset(s)&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_merged_cmdsets</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="sa">f</span><span class="s2">&quot;Commands vailable to </span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> (result of Merged Cmdset(s))&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">format_current_cmds</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">))</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="o">==</span> <span class="s2">&quot;script&quot;</span><span class="p">:</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Description&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_script_desc</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Persistent&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_script_is_persistent</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Script Repeat&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_script_timer_data</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Scripts&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_scripts</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Tags&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_tags</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Persistent Attributes&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_attributes</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
@ -2755,6 +2842,11 @@
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Exits&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_exits</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Characters&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_chars</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Content&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_things</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="o">==</span> <span class="s2">&quot;channel&quot;</span><span class="p">:</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Subscription Totals&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_channel_sub_totals</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Account Subscriptions&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_channel_account_subs</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Object Subscriptions&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_channel_object_subs</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="k">return</span> <span class="n">objdata</span></div>
<div class="viewcode-block" id="CmdExamine.format_output"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_output">[docs]</a> <span class="k">def</span> <span class="nf">format_output</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="n">current_cmdset</span><span class="p">):</span>
@ -2779,6 +2871,46 @@
<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}</span><span class="se">\n</span><span class="si">{</span><span class="n">main_str</span><span class="si">}</span><span class="se">\n</span><span class="si">{</span><span class="n">sep</span><span class="si">}</span><span class="s2">&quot;</span></div>
<span class="k">def</span> <span class="nf">_search_by_object_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj_name</span><span class="p">,</span> <span class="n">objtype</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Route to different search functions depending on the object type being</span>
<span class="sd"> examined. This also handles error reporting for multimatches/no matches.</span>
<span class="sd"> Args:</span>
<span class="sd"> obj_name (str): The search query.</span>
<span class="sd"> objtype (str): One of &#39;object&#39;, &#39;account&#39;, &#39;script&#39; or &#39;channel&#39;.</span>
<span class="sd"> Returns:</span>
<span class="sd"> any: `None` if no match or multimatch, otherwise a single result.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">objtype</span> <span class="o">==</span> <span class="s2">&quot;object&quot;</span><span class="p">:</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">obj_name</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">objtype</span> <span class="o">==</span> <span class="s2">&quot;account&quot;</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search_account</span><span class="p">(</span><span class="n">obj_name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="c1"># this means we are calling examine from an account object</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span>
<span class="n">obj_name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">),</span> <span class="n">search_object</span><span class="o">=</span><span class="s2">&quot;object&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">obj</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;search_</span><span class="si">{</span><span class="n">objtype</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)(</span><span class="n">obj_name</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No </span><span class="si">{</span><span class="n">objtype</span><span class="si">}</span><span class="s2"> found with key </span><span class="si">{</span><span class="n">obj_name</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">err</span> <span class="o">=</span> <span class="s2">&quot;Multiple </span><span class="si">{objtype}</span><span class="s2"> found with key </span><span class="si">{obj_name}</span><span class="s2">:</span><span class="se">\n</span><span class="si">{matches}</span><span class="s2">&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">obj_name</span><span class="o">=</span><span class="n">obj_name</span><span class="p">,</span>
<span class="n">matches</span><span class="o">=</span><span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">ob</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">(#</span><span class="si">{</span><span class="n">ob</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">for</span> <span class="n">ob</span> <span class="ow">in</span> <span class="n">obj</span><span class="p">)</span>
<span class="p">))</span>
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">return</span> <span class="n">obj</span>
<div class="viewcode-block" id="CmdExamine.parse"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.parse">[docs]</a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">parse</span><span class="p">()</span>
@ -2793,42 +2925,32 @@
<span class="k">raise</span> <span class="n">InterruptCommand</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">for</span> <span class="n">objdef</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objattr</span><span class="p">:</span>
<span class="c1"># note that we check the objtype for every repeat; this will always</span>
<span class="c1"># be the same result, but it makes for a cleaner code and multi-examine</span>
<span class="c1"># is not so common anyway.</span>
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">obj_name</span> <span class="o">=</span> <span class="n">objdef</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="c1"># name</span>
<span class="n">obj_attrs</span> <span class="o">=</span> <span class="n">objdef</span><span class="p">[</span><span class="s2">&quot;attrs&quot;</span><span class="p">]</span> <span class="c1"># /attrs</span>
<span class="bp">self</span><span class="o">.</span><span class="n">account_mode</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">utils</span><span class="o">.</span><span class="n">inherits_from</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;evennia.accounts.accounts.DefaultAccount&quot;</span><span class="p">)</span>
<span class="ow">or</span> <span class="s2">&quot;account&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
<span class="ow">or</span> <span class="n">obj_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">account_mode</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search_account</span><span class="p">(</span><span class="n">obj_name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="c1"># this means we are calling examine from an account object</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span>
<span class="n">obj_name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">),</span> <span class="n">search_object</span><span class="o">=</span><span class="s2">&quot;object&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">obj_name</span><span class="p">)</span>
<span class="c1"># identify object type, in prio account - script - channel</span>
<span class="n">object_type</span> <span class="o">=</span> <span class="s2">&quot;object&quot;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">utils</span><span class="o">.</span><span class="n">inherits_from</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;evennia.accounts.accounts.DefaultAccount&quot;</span><span class="p">)</span>
<span class="ow">or</span> <span class="s2">&quot;account&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">or</span> <span class="n">obj_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)):</span>
<span class="n">object_type</span> <span class="o">=</span> <span class="s2">&quot;account&quot;</span>
<span class="k">elif</span> <span class="s2">&quot;script&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
<span class="n">object_type</span> <span class="o">=</span> <span class="s2">&quot;script&quot;</span>
<span class="k">elif</span> <span class="s2">&quot;channel&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
<span class="n">object_type</span> <span class="o">=</span> <span class="s2">&quot;channel&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="o">=</span> <span class="n">object_type</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_search_by_object_type</span><span class="p">(</span><span class="n">obj_name</span><span class="p">,</span> <span class="n">object_type</span><span class="p">)</span>
<span class="k">if</span> <span class="n">obj</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">examine_objs</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="n">obj_attrs</span><span class="p">))</span></div>
<div class="viewcode-block" id="CmdExamine.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Process command&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">get_cmdset_callback</span><span class="p">(</span><span class="n">current_cmdset</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> We make use of the cmdhandler.get_and_merge_cmdsets below. This</span>
<span class="sd"> is an asynchronous function, returning a Twisted deferred.</span>
<span class="sd"> So in order to properly use this we need use this callback;</span>
<span class="sd"> it is called with the result of get_and_merge_cmdsets, whenever</span>
<span class="sd"> that function finishes. Taking the resulting cmdset, we continue</span>
<span class="sd"> to format and output the result.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_output</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
<span class="k">for</span> <span class="n">obj</span><span class="p">,</span> <span class="n">obj_attrs</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">examine_objs</span><span class="p">:</span>
<span class="c1"># these are parsed out in .parse already</span>
@ -2856,31 +2978,42 @@
<span class="c1"># examine the obj itself</span>
<span class="c1"># get the cmdset status</span>
<span class="n">session</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">count</span><span class="p">():</span>
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">&quot;session&quot;</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">get</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">account_mode</span><span class="p">:</span>
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">&quot;account&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">&quot;object&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;object&quot;</span><span class="p">,</span> <span class="s2">&quot;account&quot;</span><span class="p">):</span>
<span class="c1"># for objects and accounts we need to set up an asynchronous</span>
<span class="c1"># fetch of the cmdset and not proceed with the examine display</span>
<span class="c1"># until the fetch is complete</span>
<span class="n">session</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">count</span><span class="p">():</span>
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">&quot;session&quot;</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">get</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="o">==</span> <span class="s2">&quot;account&quot;</span><span class="p">:</span>
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">&quot;account&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">&quot;object&quot;</span>
<span class="n">account</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">objct</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">account_mode</span><span class="p">:</span>
<span class="n">account</span> <span class="o">=</span> <span class="n">obj</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">account</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span>
<span class="n">objct</span> <span class="o">=</span> <span class="n">obj</span>
<span class="n">account</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">objct</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="o">==</span> <span class="s2">&quot;account&quot;</span><span class="p">:</span>
<span class="n">account</span> <span class="o">=</span> <span class="n">obj</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">account</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span>
<span class="n">objct</span> <span class="o">=</span> <span class="n">obj</span>
<span class="c1"># this is usually handled when a command runs, but when we examine</span>
<span class="c1"># we may have leftover inherited cmdsets directly after a move etc.</span>
<span class="n">obj</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
<span class="c1"># using callback to print results whenever function returns.</span>
<span class="n">get_and_merge_cmdsets</span><span class="p">(</span>
<span class="n">obj</span><span class="p">,</span> <span class="n">session</span><span class="p">,</span> <span class="n">account</span><span class="p">,</span> <span class="n">objct</span><span class="p">,</span> <span class="n">mergemode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw_string</span>
<span class="p">)</span><span class="o">.</span><span class="n">addCallback</span><span class="p">(</span><span class="n">get_cmdset_callback</span><span class="p">)</span></div></div>
<span class="c1"># this is usually handled when a command runs, but when we examine</span>
<span class="c1"># we may have leftover inherited cmdsets directly after a move etc.</span>
<span class="n">obj</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
<span class="c1"># using callback to print results whenever function returns.</span>
<span class="k">def</span> <span class="nf">_get_cmdset_callback</span><span class="p">(</span><span class="n">current_cmdset</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_output</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
<span class="n">get_and_merge_cmdsets</span><span class="p">(</span>
<span class="n">obj</span><span class="p">,</span> <span class="n">session</span><span class="p">,</span> <span class="n">account</span><span class="p">,</span> <span class="n">objct</span><span class="p">,</span> <span class="n">mergemode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw_string</span>
<span class="p">)</span><span class="o">.</span><span class="n">addCallback</span><span class="p">(</span><span class="n">_get_cmdset_callback</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># for objects without cmdsets we can proceed to examine immediately</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_output</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span></div></div>
<div class="viewcode-block" id="CmdFind"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdFind">[docs]</a><span class="k">class</span> <span class="nc">CmdFind</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
@ -3173,6 +3306,7 @@
<span class="sd"> script/stop myobj = scriptname - stop script on object</span>
<span class="sd"> script/pause foo.Bar.Script - pause global script</span>
<span class="sd"> script/delete myobj - delete ALL scripts on object</span>
<span class="sd"> script/delete #dbref[-#dbref] - delete script or range by dbref</span>
<span class="sd"> When given with an `&lt;obj&gt;` as left-hand-side, this creates and</span>
<span class="sd"> assigns a new script to that object. Without an `&lt;obj&gt;`, this</span>
@ -3214,6 +3348,13 @@
<span class="n">scripts</span> <span class="o">=</span> <span class="n">ScriptDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_typeclass_path__iendswith</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
<span class="k">if</span> <span class="n">scripts</span><span class="p">:</span>
<span class="k">return</span> <span class="n">scripts</span>
<span class="k">if</span> <span class="s2">&quot;-&quot;</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
<span class="c1"># may be a dbref-range</span>
<span class="n">val1</span><span class="p">,</span> <span class="n">val2</span> <span class="o">=</span> <span class="p">(</span><span class="n">dbref</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;-&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
<span class="k">if</span> <span class="n">val1</span> <span class="ow">and</span> <span class="n">val2</span><span class="p">:</span>
<span class="n">scripts</span> <span class="o">=</span> <span class="n">ScriptDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">id__in</span><span class="o">=</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="n">val1</span><span class="p">,</span> <span class="n">val2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)))</span>
<span class="k">if</span> <span class="n">scripts</span><span class="p">:</span>
<span class="k">return</span> <span class="n">scripts</span>
<div class="viewcode-block" id="CmdScripts.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdScripts.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;implement method&quot;&quot;&quot;</span>

View file

@ -781,6 +781,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">comtable</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">styled_table</span><span class="p">(</span>
<span class="s2">&quot;id&quot;</span><span class="p">,</span>
<span class="s2">&quot;channel&quot;</span><span class="p">,</span>
<span class="s2">&quot;my aliases&quot;</span><span class="p">,</span>
<span class="s2">&quot;locks&quot;</span><span class="p">,</span>
@ -791,17 +792,24 @@
<span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">subscribed</span><span class="p">:</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;-&quot;</span>
<span class="n">chanid</span> <span class="o">=</span> <span class="s2">&quot;-&quot;</span>
<span class="k">if</span> <span class="n">chan</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;control&quot;</span><span class="p">):</span>
<span class="n">locks</span> <span class="o">=</span> <span class="n">chan</span><span class="o">.</span><span class="n">locks</span>
<span class="n">chanid</span> <span class="o">=</span> <span class="n">chan</span><span class="o">.</span><span class="n">id</span>
<span class="n">my_aliases</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_channel_aliases</span><span class="p">(</span><span class="n">chan</span><span class="p">))</span>
<span class="n">comtable</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span>
<span class="o">*</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{}{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">chan</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
<span class="s2">&quot;(</span><span class="si">{}</span><span class="s2">)&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">()))</span> <span class="k">if</span> <span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">()</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">),</span>
<span class="o">*</span><span class="p">(</span>
<span class="n">chanid</span><span class="p">,</span>
<span class="s2">&quot;</span><span class="si">{key}{aliases}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="n">chan</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="s2">&quot;;&quot;</span><span class="o">+</span> <span class="s2">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">())</span> <span class="k">if</span> <span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">()</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="p">),</span>
<span class="n">my_aliases</span><span class="p">,</span>
<span class="n">locks</span><span class="p">,</span>
<span class="n">chan</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span><span class="p">))</span>
<span class="n">chan</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">comtable</span></div>
<div class="viewcode-block" id="CmdChannel.display_all_channels"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannel.display_all_channels">[docs]</a> <span class="k">def</span> <span class="nf">display_all_channels</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">subscribed</span><span class="p">,</span> <span class="n">available</span><span class="p">):</span>

View file

@ -84,7 +84,7 @@
<span class="kn">from</span> <span class="nn">evennia.commands.command</span> <span class="kn">import</span> <span class="n">Command</span><span class="p">,</span> <span class="n">InterruptCommand</span>
<span class="kn">from</span> <span class="nn">evennia.commands</span> <span class="kn">import</span> <span class="n">cmdparser</span>
<span class="kn">from</span> <span class="nn">evennia.commands.cmdset</span> <span class="kn">import</span> <span class="n">CmdSet</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">ansi</span><span class="p">,</span> <span class="n">utils</span><span class="p">,</span> <span class="n">gametime</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">ansi</span><span class="p">,</span> <span class="n">utils</span><span class="p">,</span> <span class="n">gametime</span><span class="p">,</span> <span class="n">create</span>
<span class="kn">from</span> <span class="nn">evennia.server.sessionhandler</span> <span class="kn">import</span> <span class="n">SESSIONS</span>
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">search_object</span>
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">DefaultObject</span><span class="p">,</span> <span class="n">DefaultCharacter</span>
@ -1772,6 +1772,23 @@
<span class="s2">&quot;Global Script Deleted -&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_script_multi_delete"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_script_multi_delete">[docs]</a> <span class="k">def</span> <span class="nf">test_script_multi_delete</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">script1</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_script</span><span class="p">()</span>
<span class="n">script2</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_script</span><span class="p">()</span>
<span class="n">script3</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_script</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdScripts</span><span class="p">(),</span>
<span class="s2">&quot;/delete #</span><span class="si">{}</span><span class="s2">-#</span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">script1</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">script3</span><span class="o">.</span><span class="n">id</span><span class="p">),</span>
<span class="s2">&quot;Global Script Deleted - #2 (evennia.scripts.scripts.DefaultScript)|&quot;</span>
<span class="s2">&quot;Global Script Deleted - #3 (evennia.scripts.scripts.DefaultScript)|&quot;</span>
<span class="s2">&quot;Global Script Deleted - #4 (evennia.scripts.scripts.DefaultScript)&quot;</span><span class="p">,</span>
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;y&quot;</span><span class="p">]</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="n">script1</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">assertFalse</span><span class="p">(</span><span class="n">script2</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">assertFalse</span><span class="p">(</span><span class="n">script3</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuilding.test_teleport"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_teleport">[docs]</a> <span class="k">def</span> <span class="nf">test_teleport</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">oid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj1</span><span class="o">.</span><span class="n">id</span>

View file

@ -49,10 +49,12 @@
<span class="sd">&quot;&quot;&quot;</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.db.models</span> <span class="kn">import</span> <span class="n">Q</span>
<span class="kn">from</span> <span class="nn">evennia.typeclasses.managers</span> <span class="kn">import</span> <span class="n">TypedObjectManager</span><span class="p">,</span> <span class="n">TypeclassManager</span>
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">dbref</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">dbref</span><span class="p">,</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">class_from_module</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">_AccountDB</span> <span class="o">=</span> <span class="kc">None</span>
@ -279,7 +281,7 @@
<span class="sd"> always gives only one match.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Queryset: Message matches.</span>
<span class="sd"> Queryset: Iterable with 0, 1 or more matches.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># unique msg id</span>
@ -329,8 +331,57 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">sender_restrict</span> <span class="o">&amp;</span> <span class="n">receiver_restrict</span> <span class="o">&amp;</span> <span class="n">fulltext_restrict</span><span class="p">)</span></div>
<span class="c1"># back-compatibility alias</span>
<span class="n">message_search</span> <span class="o">=</span> <span class="n">search_message</span></div>
<span class="n">message_search</span> <span class="o">=</span> <span class="n">search_message</span>
<div class="viewcode-block" id="MsgManager.create_message"><a class="viewcode-back" href="../../../api/evennia.comms.managers.html#evennia.comms.comms.MsgManager.create_message">[docs]</a> <span class="k">def</span> <span class="nf">create_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">senderobj</span><span class="p">,</span> <span class="n">message</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">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">header</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a new communication Msg. Msgs represent a unit of</span>
<span class="sd"> database-persistent communication between entites.</span>
<span class="sd"> Args:</span>
<span class="sd"> senderobj (Object, Account, Script, str or list): The entity (or</span>
<span class="sd"> entities) sending the Msg. If a `str`, this is the id-string</span>
<span class="sd"> for an external sender type.</span>
<span class="sd"> message (str): Text with the message. Eventual headers, titles</span>
<span class="sd"> etc should all be included in this text string. Formatting</span>
<span class="sd"> will be retained.</span>
<span class="sd"> receivers (Object, Account, Script, str or list): An Account/Object to send</span>
<span class="sd"> to, or a list of them. If a string, it&#39;s an identifier for an external</span>
<span class="sd"> receiver.</span>
<span class="sd"> locks (str): Lock definition string.</span>
<span class="sd"> tags (list): A list of tags or tuples `(tag, category)`.</span>
<span class="sd"> header (str): Mime-type or other optional information for the message</span>
<span class="sd"> Notes:</span>
<span class="sd"> The Comm system is created to be very open-ended, so it&#39;s fully</span>
<span class="sd"> possible to let a message both go several receivers at the same time,</span>
<span class="sd"> it&#39;s up to the command definitions to limit this as desired.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="s1">&#39;channels&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span>
<span class="s2">&quot;create_message() does not accept &#39;channel&#39; kwarg anymore &quot;</span>
<span class="s2">&quot;- channels no longer accept Msg objects.&quot;</span>
<span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">message</span><span class="p">:</span>
<span class="c1"># we don&#39;t allow empty messages.</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">new_message</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">(</span><span class="n">db_message</span><span class="o">=</span><span class="n">message</span><span class="p">)</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">save</span><span class="p">()</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">senderobj</span><span class="p">):</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">senders</span> <span class="o">=</span> <span class="n">sender</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="n">header</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="n">new_message</span><span class="o">.</span><span class="n">receivers</span> <span class="o">=</span> <span class="n">receiver</span>
<span class="k">if</span> <span class="n">locks</span><span class="p">:</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span>
<span class="k">if</span> <span class="n">tags</span><span class="p">:</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">batch_add</span><span class="p">(</span><span class="o">*</span><span class="n">tags</span><span class="p">)</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="k">return</span> <span class="n">new_message</span></div></div>
<span class="c1">#</span>
<span class="c1"># Channel manager</span>
@ -413,13 +464,16 @@
<span class="sd"> exact (bool, optional): Require an exact (but not</span>
<span class="sd"> case sensitive) match.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Queryset: Iterable with 0, 1 or more matches.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">dbref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">ostring</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dbref</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">dbref</span><span class="p">)</span>
<span class="k">except</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
<span class="k">pass</span>
<span class="n">dbref_match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">search_dbref</span><span class="p">(</span><span class="n">dbref</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dbref_match</span><span class="p">:</span>
<span class="k">return</span> <span class="n">dbref_match</span>
<span class="k">if</span> <span class="n">exact</span><span class="p">:</span>
<span class="n">channels</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
<span class="n">Q</span><span class="p">(</span><span class="n">db_key__iexact</span><span class="o">=</span><span class="n">ostring</span><span class="p">)</span>
@ -432,6 +486,56 @@
<span class="p">)</span><span class="o">.</span><span class="n">distinct</span><span class="p">()</span>
<span class="k">return</span> <span class="n">channels</span></div>
<div class="viewcode-block" id="ChannelDBManager.create_channel"><a class="viewcode-back" href="../../../api/evennia.comms.managers.html#evennia.comms.comms.ChannelDBManager.create_channel">[docs]</a> <span class="k">def</span> <span class="nf">create_channel</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">keep_log</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create A communication Channel. A Channel serves as a central hub</span>
<span class="sd"> for distributing Msgs to groups of people without specifying the</span>
<span class="sd"> receivers explicitly. Instead accounts may &#39;connect&#39; to the channel</span>
<span class="sd"> and follow the flow of messages. By default the channel allows</span>
<span class="sd"> access to all old messages, but this can be turned off with the</span>
<span class="sd"> keep_log switch.</span>
<span class="sd"> Args:</span>
<span class="sd"> key (str): This must be unique.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> aliases (list of str): List of alternative (likely shorter) keynames.</span>
<span class="sd"> desc (str): A description of the channel, for use in listings.</span>
<span class="sd"> locks (str): Lockstring.</span>
<span class="sd"> keep_log (bool): Log channel throughput.</span>
<span class="sd"> typeclass (str or class): The typeclass of the Channel (not</span>
<span class="sd"> often used).</span>
<span class="sd"> tags (list): A list of tags or tuples `(tag, category)`.</span>
<span class="sd"> Returns:</span>
<span class="sd"> channel (Channel): A newly created channel.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_CHANNEL_TYPECLASS</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="c1"># a path is given. Load the actual typeclass</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
<span class="c1"># create new instance</span>
<span class="n">new_channel</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span><span class="n">db_key</span><span class="o">=</span><span class="n">key</span><span class="p">)</span>
<span class="c1"># store call signature for the signal</span>
<span class="n">new_channel</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span> <span class="n">keep_log</span><span class="o">=</span><span class="n">keep_log</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="n">tags</span>
<span class="p">)</span>
<span class="c1"># this will trigger the save signal which in turn calls the</span>
<span class="c1"># at_first_save hook on the typeclass, where the _createdict can be</span>
<span class="c1"># used.</span>
<span class="n">new_channel</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_CHANNEL_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_channel</span><span class="p">)</span>
<span class="k">return</span> <span class="n">new_channel</span></div>
<span class="c1"># back-compatibility alias</span>
<span class="n">channel_search</span> <span class="o">=</span> <span class="n">search_channel</span></div>

View file

@ -457,7 +457,7 @@
<span class="c1"># ------------------------------------------------------------</span>
<div class="viewcode-block" id="TempMsg"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.models.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>
<div class="viewcode-block" id="TempMsg"><a class="viewcode-back" href="../../../api/evennia.comms.models.html#evennia.comms.models.TempMsg">[docs]</a><span class="k">class</span> <span class="nc">TempMsg</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This is a non-persistent object for sending temporary messages that will not be stored. It</span>
<span class="sd"> mimics the &quot;real&quot; Msg object, but doesn&#39;t require sender to be given.</span>

View file

@ -71,8 +71,7 @@
<span class="p">)</span> <span class="c1"># note that this creates a new Session!</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">SESSIONS</span><span class="o">.</span><span class="n">session_from_sessid</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># the real session</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">login</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="n">session</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;session&quot;</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">)</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="n">session</span></div>
<div class="viewcode-block" id="AuditingTest.test_mask"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.auditing.tests.html#evennia.contrib.utils.auditing.tests.AuditingTest.test_mask">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.utils.auditing.server.AUDIT_CALLBACK&quot;</span><span class="p">,</span>
<span class="s2">&quot;evennia.contrib.utils.auditing.outputs.to_syslog&quot;</span><span class="p">)</span>

View file

@ -45,8 +45,11 @@
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Custom manager for HelpEntry objects.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">django.db</span> <span class="kn">import</span> <span class="n">IntegrityError</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span><span class="p">,</span> <span class="n">utils</span>
<span class="kn">from</span> <span class="nn">evennia.typeclasses.managers</span> <span class="kn">import</span> <span class="n">TypedObjectManager</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">make_iter</span>
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;HelpEntryManager&quot;</span><span class="p">,)</span>
@ -187,12 +190,58 @@
<span class="sd"> ostring (str): The help topic to look for.</span>
<span class="sd"> category (str): Limit the search to a particular help topic</span>
<span class="sd"> Returns:</span>
<span class="sd"> Queryset: An iterable with 0, 1 or more matches.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">ostring</span> <span class="o">=</span> <span class="n">ostring</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">if</span> <span class="n">help_category</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_key__iexact</span><span class="o">=</span><span class="n">ostring</span><span class="p">,</span> <span class="n">db_help_category__iexact</span><span class="o">=</span><span class="n">help_category</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_key__iexact</span><span class="o">=</span><span class="n">ostring</span><span class="p">)</span></div></div>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_key__iexact</span><span class="o">=</span><span class="n">ostring</span><span class="p">)</span></div>
<div class="viewcode-block" id="HelpEntryManager.create_help"><a class="viewcode-back" href="../../../api/evennia.help.manager.html#evennia.help.manager.HelpEntryManager.create_help">[docs]</a> <span class="k">def</span> <span class="nf">create_help</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">entrytext</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">&quot;General&quot;</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a static help entry in the help database. Note that Command</span>
<span class="sd"> help entries are dynamic and directly taken from the __doc__</span>
<span class="sd"> entries of the command. The database-stored help entries are</span>
<span class="sd"> intended for more general help on the game, more extensive info,</span>
<span class="sd"> in-game setting information and so on.</span>
<span class="sd"> Args:</span>
<span class="sd"> key (str): The name of the help entry.</span>
<span class="sd"> entrytext (str): The body of te help entry</span>
<span class="sd"> category (str, optional): The help category of the entry.</span>
<span class="sd"> locks (str, optional): A lockstring to restrict access.</span>
<span class="sd"> aliases (list of str, optional): List of alternative (likely shorter) keynames.</span>
<span class="sd"> tags (lst, optional): List of tags or tuples `(tag, category)`.</span>
<span class="sd"> Returns:</span>
<span class="sd"> help (HelpEntry): A newly created help entry.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">new_help</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">()</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">key</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">entrytext</span> <span class="o">=</span> <span class="n">entrytext</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">help_category</span> <span class="o">=</span> <span class="n">category</span>
<span class="k">if</span> <span class="n">locks</span><span class="p">:</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span>
<span class="k">if</span> <span class="n">aliases</span><span class="p">:</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">make_iter</span><span class="p">(</span><span class="n">aliases</span><span class="p">))</span>
<span class="k">if</span> <span class="n">tags</span><span class="p">:</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">batch_add</span><span class="p">(</span><span class="o">*</span><span class="n">tags</span><span class="p">)</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="k">return</span> <span class="n">new_help</span>
<span class="k">except</span> <span class="n">IntegrityError</span><span class="p">:</span>
<span class="n">string</span> <span class="o">=</span> <span class="s2">&quot;Could not add help entry: key &#39;</span><span class="si">%s</span><span class="s2">&#39; already exists.&quot;</span> <span class="o">%</span> <span class="n">key</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_HELPENTRY_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_help</span><span class="p">)</span></div></div>
</pre></div>
<div class="clearer"></div>

View file

@ -51,6 +51,9 @@
<span class="kn">from</span> <span class="nn">django.db.models.fields</span> <span class="kn">import</span> <span class="n">exceptions</span>
<span class="kn">from</span> <span class="nn">evennia.typeclasses.managers</span> <span class="kn">import</span> <span class="n">TypedObjectManager</span><span class="p">,</span> <span class="n">TypeclassManager</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">is_iter</span><span class="p">,</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">string_partial_matching</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">dbid_to_obj</span>
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;ObjectManager&quot;</span><span class="p">,</span> <span class="s2">&quot;ObjectDBManager&quot;</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>
@ -73,7 +76,7 @@
<span class="sd"> Querysets or database objects).</span>
<span class="sd"> dbref (converter)</span>
<span class="sd"> get_id (alias: dbref_search)</span>
<span class="sd"> dbref_search</span>
<span class="sd"> get_dbref_range</span>
<span class="sd"> object_totals</span>
<span class="sd"> typeclass_search</span>
@ -203,8 +206,8 @@
<span class="sd"> typeclasses (list, optional): Python pats to restrict matches with.</span>
<span class="sd"> Returns:</span>
<span class="sd"> matches (query): Objects fullfilling both the `attribute_name` and</span>
<span class="sd"> `attribute_value` criterions.</span>
<span class="sd"> Queryset: Iterable with 0, 1 or more matches fullfilling both the `attribute_name` and</span>
<span class="sd"> `attribute_value` criterions.</span>
<span class="sd"> Notes:</span>
<span class="sd"> This uses the Attribute&#39;s PickledField to transparently search the database by matching</span>
@ -263,6 +266,9 @@
<span class="sd"> candidates (list, optional): List of objects to limit search to.</span>
<span class="sd"> typeclasses (list, optional): List of typeclass-path strings to restrict matches with</span>
<span class="sd"> Returns:</span>
<span class="sd"> Queryset: Iterable with 0, 1 or more matches.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">property_name</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">property_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;db_&quot;</span><span class="p">):</span>
@ -275,11 +281,10 @@
<span class="p">)</span>
<span class="n">type_restriction</span> <span class="o">=</span> <span class="n">typeclasses</span> <span class="ow">and</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_typeclass_path__in</span><span class="o">=</span><span class="n">make_iter</span><span class="p">(</span><span class="n">typeclasses</span><span class="p">))</span> <span class="ow">or</span> <span class="n">Q</span><span class="p">()</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">cand_restriction</span> <span class="o">&amp;</span> <span class="n">type_restriction</span> <span class="o">&amp;</span> <span class="n">Q</span><span class="p">(</span><span class="o">**</span><span class="n">querykwargs</span><span class="p">))</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">&quot;id&quot;</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
<span class="n">cand_restriction</span> <span class="o">&amp;</span> <span class="n">type_restriction</span> <span class="o">&amp;</span> <span class="n">Q</span><span class="p">(</span><span class="o">**</span><span class="n">querykwargs</span><span class="p">))</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">&quot;id&quot;</span><span class="p">)</span>
<span class="k">except</span> <span class="n">exceptions</span><span class="o">.</span><span class="n">FieldError</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[]</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>
@ -287,7 +292,7 @@
<span class="s2">&quot;The property &#39;</span><span class="si">%s</span><span class="s2">&#39; does not support search criteria of the type </span><span class="si">%s</span><span class="s2">.&quot;</span>
<span class="o">%</span> <span class="p">(</span><span class="n">property_name</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">property_value</span><span class="p">))</span>
<span class="p">)</span>
<span class="k">return</span> <span class="p">[]</span></div>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span></div>
<div class="viewcode-block" id="ObjectDBManager.get_contents"><a class="viewcode-back" href="../../../api/evennia.objects.manager.html#evennia.objects.manager.ObjectDBManager.get_contents">[docs]</a> <span class="k">def</span> <span class="nf">get_contents</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">location</span><span class="p">,</span> <span class="n">excludeobj</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -299,7 +304,8 @@
<span class="sd"> to exclude from the match.</span>
<span class="sd"> Returns:</span>
<span class="sd"> contents (query): Matching contents, without excludeobj, if given.</span>
<span class="sd"> Queryset: Iterable with 0, 1 or more matches.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">exclude_restriction</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">Q</span><span class="p">(</span><span class="n">pk__in</span><span class="o">=</span><span class="p">[</span><span class="n">_GA</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;id&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">excludeobj</span><span class="p">)])</span> <span class="k">if</span> <span class="n">excludeobj</span> <span class="k">else</span> <span class="n">Q</span><span class="p">()</span>
@ -317,17 +323,18 @@
<span class="sd"> typeclasses (list): Only match objects with typeclasses having thess path strings.</span>
<span class="sd"> Returns:</span>
<span class="sd"> matches (query): A list of matches of length 0, 1 or more.</span>
<span class="sd"> Queryset: An iterable with 0, 1 or more matches.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ostring</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">ostring</span><span class="p">,</span> <span class="s2">&quot;key&quot;</span><span class="p">):</span>
<span class="n">ostring</span> <span class="o">=</span> <span class="n">ostring</span><span class="o">.</span><span class="n">key</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[]</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
<span class="k">if</span> <span class="n">is_iter</span><span class="p">(</span><span class="n">candidates</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="n">candidates</span><span class="p">):</span>
<span class="c1"># if candidates is an empty iterable there can be no matches</span>
<span class="c1"># Exit early.</span>
<span class="k">return</span> <span class="p">[]</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
<span class="c1"># build query objects</span>
<span class="n">candidates_id</span> <span class="o">=</span> <span class="p">[</span><span class="n">_GA</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;id&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">candidates</span><span class="p">)</span> <span class="k">if</span> <span class="n">obj</span><span class="p">]</span>
@ -368,10 +375,12 @@
<span class="c1"># fuzzy matching</span>
<span class="n">key_strings</span> <span class="o">=</span> <span class="n">search_candidates</span><span class="o">.</span><span class="n">values_list</span><span class="p">(</span><span class="s2">&quot;db_key&quot;</span><span class="p">,</span> <span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">&quot;id&quot;</span><span class="p">)</span>
<span class="n">match_ids</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">index_matches</span> <span class="o">=</span> <span class="n">string_partial_matching</span><span class="p">(</span><span class="n">key_strings</span><span class="p">,</span> <span class="n">ostring</span><span class="p">,</span> <span class="n">ret_index</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">if</span> <span class="n">index_matches</span><span class="p">:</span>
<span class="c1"># a match by key</span>
<span class="k">return</span> <span class="p">[</span><span class="n">obj</span> <span class="k">for</span> <span class="n">ind</span><span class="p">,</span> <span class="n">obj</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">search_candidates</span><span class="p">)</span> <span class="k">if</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">index_matches</span><span class="p">]</span>
<span class="n">match_ids</span> <span class="o">=</span> <span class="p">[</span><span class="n">obj</span><span class="o">.</span><span class="n">id</span> <span class="k">for</span> <span class="n">ind</span><span class="p">,</span> <span class="n">obj</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">search_candidates</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">index_matches</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># match by alias rather than by key</span>
<span class="n">search_candidates</span> <span class="o">=</span> <span class="n">search_candidates</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
@ -387,8 +396,10 @@
<span class="n">index_matches</span> <span class="o">=</span> <span class="n">string_partial_matching</span><span class="p">(</span><span class="n">alias_strings</span><span class="p">,</span> <span class="n">ostring</span><span class="p">,</span> <span class="n">ret_index</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">if</span> <span class="n">index_matches</span><span class="p">:</span>
<span class="c1"># it&#39;s possible to have multiple matches to the same Object, we must weed those out</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">({</span><span class="n">alias_candidates</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span> <span class="k">for</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">index_matches</span><span class="p">})</span>
<span class="k">return</span> <span class="p">[]</span></div>
<span class="n">match_ids</span> <span class="o">=</span> <span class="p">[</span><span class="n">alias_candidates</span><span class="p">[</span><span class="n">ind</span><span class="p">]</span><span class="o">.</span><span class="n">id</span> <span class="k">for</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">index_matches</span><span class="p">]</span>
<span class="c1"># TODO - not ideal to have to do a second lookup here, but we want to return a queryset</span>
<span class="c1"># rather than a list ... maybe the above queries can be improved.</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">id__in</span><span class="o">=</span><span class="n">match_ids</span><span class="p">)</span></div>
<span class="c1"># main search methods and helper functions</span>
@ -463,7 +474,7 @@
<span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">searchdata</span> <span class="ow">and</span> <span class="n">searchdata</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[]</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
<span class="k">if</span> <span class="n">typeclass</span><span class="p">:</span>
<span class="c1"># typeclass may also be a list</span>
@ -491,10 +502,11 @@
<span class="c1"># Easiest case - dbref matching (always exact)</span>
<span class="n">dbref_match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref_search</span><span class="p">(</span><span class="n">dbref</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dbref_match</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">candidates</span> <span class="ow">or</span> <span class="n">dbref_match</span> <span class="ow">in</span> <span class="n">candidates</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[</span><span class="n">dbref_match</span><span class="p">]</span>
<span class="n">dmatch</span> <span class="o">=</span> <span class="n">dbref_match</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">candidates</span> <span class="ow">or</span> <span class="n">dmatch</span> <span class="ow">in</span> <span class="n">candidates</span><span class="p">:</span>
<span class="k">return</span> <span class="n">dbref_match</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[]</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
<span class="c1"># Search through all possibilities.</span>
<span class="n">match_number</span> <span class="o">=</span> <span class="kc">None</span>
@ -519,15 +531,16 @@
<span class="c1"># this indicates trying to get a single match with a match-number</span>
<span class="c1"># targeting some higher-number match (like 2-box when there is only</span>
<span class="c1"># one box in the room). This leads to a no-match.</span>
<span class="n">matches</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">matches</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">match_number</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># multiple matches, but a number was given to separate them</span>
<span class="k">if</span> <span class="mi">0</span> <span class="o">&lt;=</span> <span class="n">match_number</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">matches</span><span class="p">):</span>
<span class="c1"># limit to one match</span>
<span class="n">matches</span> <span class="o">=</span> <span class="p">[</span><span class="n">matches</span><span class="p">[</span><span class="n">match_number</span><span class="p">]]</span>
<span class="c1"># limit to one match (we still want a queryset back)</span>
<span class="c1"># TODO: Can we do this some other way and avoid a second lookup?</span>
<span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">matches</span><span class="p">[</span><span class="n">match_number</span><span class="p">]</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># a number was given outside of range. This means a no-match.</span>
<span class="n">matches</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">matches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
<span class="c1"># return a list (possibly empty)</span>
<span class="k">return</span> <span class="n">matches</span></div>
@ -637,7 +650,118 @@
<span class="sd"> db_account field set.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_sessid__isnull</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">db_sessid</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></div></div>
<span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_sessid__isnull</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">db_sessid</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="ObjectDBManager.create_object"><a class="viewcode-back" href="../../../api/evennia.objects.manager.html#evennia.objects.manager.ObjectDBManager.create_object">[docs]</a> <span class="k">def</span> <span class="nf">create_object</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">location</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">home</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">destination</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">nohome</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">nattributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a new in-game object.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> typeclass (class or str): Class or python path to a typeclass.</span>
<span class="sd"> key (str): Name of the new object. If not set, a name of</span>
<span class="sd"> `#dbref` will be set.</span>
<span class="sd"> location (Object or str): Obj or #dbref to use as the location of the new object.</span>
<span class="sd"> home (Object or str): Obj or #dbref to use as the object&#39;s home location.</span>
<span class="sd"> permissions (list): A list of permission strings or tuples (permstring, category).</span>
<span class="sd"> locks (str): one or more lockstrings, separated by semicolons.</span>
<span class="sd"> aliases (list): A list of alternative keys or tuples (aliasstring, category).</span>
<span class="sd"> tags (list): List of tag keys or tuples (tagkey, category) or (tagkey, category, data).</span>
<span class="sd"> destination (Object or str): Obj or #dbref to use as an Exit&#39;s target.</span>
<span class="sd"> report_to (Object): The object to return error messages to.</span>
<span class="sd"> nohome (bool): This allows the creation of objects without a</span>
<span class="sd"> default home location; only used when creating the default</span>
<span class="sd"> location itself or during unittests.</span>
<span class="sd"> attributes (list): Tuples on the form (key, value) or (key, value, category),</span>
<span class="sd"> (key, value, lockstring) or (key, value, lockstring, default_access).</span>
<span class="sd"> to set as Attributes on the new object.</span>
<span class="sd"> nattributes (list): Non-persistent tuples on the form (key, value). Note that</span>
<span class="sd"> adding this rarely makes sense since this data will not survive a reload.</span>
<span class="sd"> Returns:</span>
<span class="sd"> object (Object): A newly created object of the given typeclass.</span>
<span class="sd"> Raises:</span>
<span class="sd"> ObjectDB.DoesNotExist: If trying to create an Object with</span>
<span class="sd"> `location` or `home` that can&#39;t be found.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_OBJECT_TYPECLASS</span>
<span class="c1"># convenience converters to avoid common usage mistake</span>
<span class="n">permissions</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">permissions</span><span class="p">)</span> <span class="k">if</span> <span class="n">permissions</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">locks</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span> <span class="k">if</span> <span class="n">locks</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span> <span class="k">if</span> <span class="n">aliases</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="c1"># a path is given. Load the actual typeclass</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
<span class="c1"># Setup input for the create command. We use ObjectDB as baseclass here</span>
<span class="c1"># to give us maximum freedom (the typeclasses will load</span>
<span class="c1"># correctly when each object is recovered).</span>
<span class="n">location</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">location</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
<span class="n">destination</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">destination</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
<span class="n">home</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">home</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">home</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">nohome</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">except</span> <span class="bp">self</span><span class="o">.</span><span class="n">model_ObjectDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
<span class="k">raise</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">(</span>
<span class="s2">&quot;settings.DEFAULT_HOME (= &#39;</span><span class="si">%s</span><span class="s2">&#39;) does not exist, or the setting is malformed.&quot;</span>
<span class="o">%</span> <span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span>
<span class="p">)</span>
<span class="c1"># create new instance</span>
<span class="n">new_object</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span>
<span class="n">db_key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<span class="n">db_location</span><span class="o">=</span><span class="n">location</span><span class="p">,</span>
<span class="n">db_destination</span><span class="o">=</span><span class="n">destination</span><span class="p">,</span>
<span class="n">db_home</span><span class="o">=</span><span class="n">home</span><span class="p">,</span>
<span class="n">db_typeclass_path</span><span class="o">=</span><span class="n">typeclass</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># store the call signature for the signal</span>
<span class="n">new_object</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<span class="n">location</span><span class="o">=</span><span class="n">location</span><span class="p">,</span>
<span class="n">destination</span><span class="o">=</span><span class="n">destination</span><span class="p">,</span>
<span class="n">home</span><span class="o">=</span><span class="n">home</span><span class="p">,</span>
<span class="n">typeclass</span><span class="o">=</span><span class="n">typeclass</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
<span class="n">permissions</span><span class="o">=</span><span class="n">permissions</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span>
<span class="n">nohome</span><span class="o">=</span><span class="n">nohome</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span><span class="p">,</span>
<span class="n">nattributes</span><span class="o">=</span><span class="n">nattributes</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># this will trigger the save signal which in turn calls the</span>
<span class="c1"># at_first_save hook on the typeclass, where the _createdict can be</span>
<span class="c1"># used.</span>
<span class="n">new_object</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_OBJECT_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_object</span><span class="p">)</span>
<span class="k">return</span> <span class="n">new_object</span></div></div>
<div class="viewcode-block" id="ObjectManager"><a class="viewcode-back" href="../../../api/evennia.objects.manager.html#evennia.objects.manager.ObjectManager">[docs]</a><span class="k">class</span> <span class="nc">ObjectManager</span><span class="p">(</span><span class="n">ObjectDBManager</span><span class="p">,</span> <span class="n">TypeclassManager</span><span class="p">):</span>

View file

@ -183,11 +183,11 @@
<span class="n">nattr</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
<span class="k">if</span> <span class="n">nattr</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="c1"># we assume a None-value</span>
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
<span class="k">elif</span> <span class="n">nattr</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">attr</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">attr</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="kc">None</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
<span class="k">elif</span> <span class="n">nattr</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">attr</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">attr</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">attr</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">attr</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">attr</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">homogenized_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attr</span><span class="p">[:</span><span class="mi">4</span><span class="p">])</span>

View file

@ -46,13 +46,19 @@
<span class="sd">The custom manager for Scripts.</span>
<span class="sd">&quot;&quot;&quot;</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.db.models</span> <span class="kn">import</span> <span class="n">Q</span>
<span class="kn">from</span> <span class="nn">evennia.typeclasses.managers</span> <span class="kn">import</span> <span class="n">TypedObjectManager</span><span class="p">,</span> <span class="n">TypeclassManager</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">make_iter</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">dbid_to_obj</span>
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;ScriptManager&quot;</span><span class="p">,</span> <span class="s2">&quot;ScriptDBManager&quot;</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">_ObjectDB</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_AccountDB</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">VALIDATE_ITERATION</span> <span class="o">=</span> <span class="mi">0</span>
@ -66,7 +72,7 @@
<span class="sd"> Querysets or database objects).</span>
<span class="sd"> dbref (converter)</span>
<span class="sd"> get_id (or dbref_search)</span>
<span class="sd"> dbref_search</span>
<span class="sd"> get_dbref_range</span>
<span class="sd"> object_totals</span>
<span class="sd"> typeclass_search</span>
@ -125,7 +131,6 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
<span class="n">script</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">dbref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dbref</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">dbref</span><span class="p">)</span>
@ -177,6 +182,9 @@
<span class="sd"> on a timer.</span>
<span class="sd"> typeclass (class or str): Typeclass or path to typeclass.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Queryset: An iterable with 0, 1 or more results.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">ostring</span> <span class="o">=</span> <span class="n">ostring</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
@ -185,10 +193,10 @@
<span class="k">if</span> <span class="n">dbref</span><span class="p">:</span>
<span class="c1"># this is a dbref, try to find the script directly</span>
<span class="n">dbref_match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref_search</span><span class="p">(</span><span class="n">dbref</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dbref_match</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span>
<span class="p">(</span><span class="n">obj</span> <span class="ow">and</span> <span class="n">obj</span> <span class="o">!=</span> <span class="n">dbref_match</span><span class="o">.</span><span class="n">obj</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">only_timed</span> <span class="ow">and</span> <span class="n">dbref_match</span><span class="o">.</span><span class="n">interval</span><span class="p">)</span>
<span class="p">):</span>
<span class="k">return</span> <span class="p">[</span><span class="n">dbref_match</span><span class="p">]</span>
<span class="k">if</span> <span class="n">dbref_match</span><span class="p">:</span>
<span class="n">dmatch</span> <span class="o">=</span> <span class="n">dbref_match</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span> <span class="ow">and</span> <span class="n">obj</span> <span class="o">!=</span> <span class="n">dmatch</span><span class="o">.</span><span class="n">obj</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">only_timed</span> <span class="ow">and</span> <span class="n">dmatch</span><span class="o">.</span><span class="n">interval</span><span class="p">):</span>
<span class="k">return</span> <span class="n">dbref_match</span>
<span class="k">if</span> <span class="n">typeclass</span><span class="p">:</span>
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">typeclass</span><span class="p">):</span>
@ -233,6 +241,129 @@
<span class="n">new_script</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_script</span><span class="p">(</span>
<span class="n">typeclass</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">new_key</span><span class="p">,</span> <span class="n">obj</span><span class="o">=</span><span class="n">new_obj</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="n">new_locks</span><span class="p">,</span> <span class="n">autostart</span><span class="o">=</span><span class="kc">True</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">new_script</span></div>
<div class="viewcode-block" id="ScriptDBManager.create_script"><a class="viewcode-back" href="../../../api/evennia.scripts.manager.html#evennia.scripts.manager.ScriptDBManager.create_script">[docs]</a> <span class="k">def</span> <span class="nf">create_script</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">obj</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">account</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">interval</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">start_delay</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">repeats</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">persistent</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">autostart</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a new script. All scripts are a combination of a database</span>
<span class="sd"> object that communicates with the database, and an typeclass that</span>
<span class="sd"> &#39;decorates&#39; the database object into being different types of</span>
<span class="sd"> scripts. It&#39;s behaviour is similar to the game objects except</span>
<span class="sd"> scripts has a time component and are more limited in scope.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> typeclass (class or str): Class or python path to a typeclass.</span>
<span class="sd"> key (str): Name of the new object. If not set, a name of</span>
<span class="sd"> #dbref will be set.</span>
<span class="sd"> obj (Object): The entity on which this Script sits. If this</span>
<span class="sd"> is `None`, we are creating a &quot;global&quot; script.</span>
<span class="sd"> account (Account): The account on which this Script sits. It is</span>
<span class="sd"> exclusiv to `obj`.</span>
<span class="sd"> locks (str): one or more lockstrings, separated by semicolons.</span>
<span class="sd"> interval (int): The triggering interval for this Script, in</span>
<span class="sd"> seconds. If unset, the Script will not have a timing</span>
<span class="sd"> component.</span>
<span class="sd"> start_delay (bool): If `True`, will wait `interval` seconds</span>
<span class="sd"> before triggering the first time.</span>
<span class="sd"> repeats (int): The number of times to trigger before stopping.</span>
<span class="sd"> If unset, will repeat indefinitely.</span>
<span class="sd"> persistent (bool): If this Script survives a server shutdown</span>
<span class="sd"> or not (all Scripts will survive a reload).</span>
<span class="sd"> autostart (bool): If this Script will start immediately when</span>
<span class="sd"> created or if the `start` method must be called explicitly.</span>
<span class="sd"> report_to (Object): The object to return error messages to.</span>
<span class="sd"> desc (str): Optional description of script</span>
<span class="sd"> tags (list): List of tags or tuples (tag, category).</span>
<span class="sd"> attributes (list): List if tuples (key, value) or (key, value, category)</span>
<span class="sd"> (key, value, lockstring) or (key, value, lockstring, default_access).</span>
<span class="sd"> Returns:</span>
<span class="sd"> script (obj): An instance of the script created</span>
<span class="sd"> See evennia.scripts.manager for methods to manipulate existing</span>
<span class="sd"> scripts in the database.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">global</span> <span class="n">_ObjectDB</span><span class="p">,</span> <span class="n">_AccountDB</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_ObjectDB</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.objects.models</span> <span class="kn">import</span> <span class="n">ObjectDB</span> <span class="k">as</span> <span class="n">_ObjectDB</span>
<span class="kn">from</span> <span class="nn">evennia.accounts.models</span> <span class="kn">import</span> <span class="n">AccountDB</span> <span class="k">as</span> <span class="n">_AccountDB</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_SCRIPT_TYPECLASS</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="c1"># a path is given. Load the actual typeclass</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
<span class="c1"># validate input</span>
<span class="n">kwarg</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_key&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">key</span>
<span class="k">if</span> <span class="n">account</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_account&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">account</span><span class="p">,</span> <span class="n">_AccountDB</span><span class="p">)</span>
<span class="k">if</span> <span class="n">obj</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_obj&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span>
<span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_interval&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">interval</span><span class="p">)</span>
<span class="k">if</span> <span class="n">start_delay</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_start_delay&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">start_delay</span>
<span class="k">if</span> <span class="n">repeats</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_repeats&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">repeats</span><span class="p">)</span>
<span class="k">if</span> <span class="n">persistent</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_persistent&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">persistent</span>
<span class="k">if</span> <span class="n">desc</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_desc&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">desc</span>
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="c1"># create new instance</span>
<span class="n">new_script</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span><span class="o">**</span><span class="n">kwarg</span><span class="p">)</span>
<span class="c1"># store the call signature for the signal</span>
<span class="n">new_script</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<span class="n">obj</span><span class="o">=</span><span class="n">obj</span><span class="p">,</span>
<span class="n">account</span><span class="o">=</span><span class="n">account</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span>
<span class="n">interval</span><span class="o">=</span><span class="n">interval</span><span class="p">,</span>
<span class="n">start_delay</span><span class="o">=</span><span class="n">start_delay</span><span class="p">,</span>
<span class="n">repeats</span><span class="o">=</span><span class="n">repeats</span><span class="p">,</span>
<span class="n">persistent</span><span class="o">=</span><span class="n">persistent</span><span class="p">,</span>
<span class="n">autostart</span><span class="o">=</span><span class="n">autostart</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span>
<span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># this will trigger the save signal which in turn calls the</span>
<span class="c1"># at_first_save hook on the typeclass, where the _createdict</span>
<span class="c1"># can be used.</span>
<span class="n">new_script</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">new_script</span><span class="o">.</span><span class="n">id</span><span class="p">:</span>
<span class="c1"># this happens in the case of having a repeating script with `repeats=1` and</span>
<span class="c1"># `start_delay=False` - the script will run once and immediately stop before</span>
<span class="c1"># save is over.</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_SCRIPT_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_script</span><span class="p">)</span>
<span class="k">return</span> <span class="n">new_script</span></div></div>

View file

@ -137,11 +137,25 @@
<span class="c1"># make sure to clean data from database</span>
<span class="n">ServerConfig</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">conf</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">savekey</span><span class="p">,</span> <span class="n">delete</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">_attr_category_fieldname</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">category</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Modify the saved fieldname to make sure to differentiate between Attributes</span>
<span class="sd"> with different categories.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">fieldname</span><span class="si">}</span><span class="s2">[</span><span class="si">{</span><span class="n">category</span><span class="si">}</span><span class="s2">]&quot;</span> <span class="k">if</span> <span class="n">category</span> <span class="k">else</span> <span class="n">fieldname</span>
<div class="viewcode-block" id="MonitorHandler.at_update"><a class="viewcode-back" href="../../../api/evennia.scripts.monitorhandler.html#evennia.scripts.monitorhandler.MonitorHandler.at_update">[docs]</a> <span class="k">def</span> <span class="nf">at_update</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="n">fieldname</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Called by the field/attribute as it saves.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># if this an Attribute with a category we should differentiate</span>
<span class="n">fieldname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_category_fieldname</span><span class="p">(</span>
<span class="n">fieldname</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_category</span>
<span class="k">if</span> <span class="n">fieldname</span> <span class="o">==</span> <span class="s2">&quot;db_value&quot;</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;db_category&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
<span class="p">)</span>
<span class="n">to_delete</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="n">obj</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitors</span> <span class="ow">and</span> <span class="n">fieldname</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitors</span><span class="p">[</span><span class="n">obj</span><span class="p">]:</span>
<span class="k">for</span> <span class="n">idstring</span><span class="p">,</span> <span class="p">(</span><span class="n">callback</span><span class="p">,</span> <span class="n">persistent</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitors</span><span class="p">[</span><span class="n">obj</span><span class="p">][</span><span class="n">fieldname</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
@ -154,7 +168,8 @@
<span class="k">for</span> <span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">idstring</span><span class="p">)</span> <span class="ow">in</span> <span class="n">to_delete</span><span class="p">:</span>
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitors</span><span class="p">[</span><span class="n">obj</span><span class="p">][</span><span class="n">fieldname</span><span class="p">][</span><span class="n">idstring</span><span class="p">]</span></div>
<div class="viewcode-block" id="MonitorHandler.add"><a class="viewcode-back" href="../../../api/evennia.scripts.monitorhandler.html#evennia.scripts.monitorhandler.MonitorHandler.add">[docs]</a> <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">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">idstring</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">persistent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<div class="viewcode-block" id="MonitorHandler.add"><a class="viewcode-back" href="../../../api/evennia.scripts.monitorhandler.html#evennia.scripts.monitorhandler.MonitorHandler.add">[docs]</a> <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">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">idstring</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">persistent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Add monitoring to a given field or Attribute. A field must</span>
<span class="sd"> be specified with the full db_* name or it will be assumed</span>
@ -170,6 +185,9 @@
<span class="sd"> of the same field and object.</span>
<span class="sd"> persistent (bool, optional): If False, the monitor will survive</span>
<span class="sd"> a server reload but not a cold restart. This is default.</span>
<span class="sd"> category (str, optional): This is only used if `fieldname` refers to</span>
<span class="sd"> an Attribute (i.e. it does not start with `db_`). You must specify this</span>
<span class="sd"> if you want to target an Attribute with a category.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> session (Session): If this keyword is given, the monitorhandler will</span>
@ -184,7 +202,7 @@
<span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">fieldname</span><span class="p">,</span> <span class="n">return_obj</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
<span class="k">return</span>
<span class="n">fieldname</span> <span class="o">=</span> <span class="s2">&quot;db_value&quot;</span>
<span class="n">fieldname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_category_fieldname</span><span class="p">(</span><span class="s2">&quot;db_value&quot;</span><span class="p">,</span> <span class="n">category</span><span class="p">)</span>
<span class="c1"># we try to serialize this data to test it&#39;s valid. Otherwise we won&#39;t accept it.</span>
<span class="k">try</span><span class="p">:</span>
@ -204,7 +222,7 @@
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">monitors</span><span class="p">[</span><span class="n">obj</span><span class="p">][</span><span class="n">fieldname</span><span class="p">][</span><span class="n">idstring</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">callback</span><span class="p">,</span> <span class="n">persistent</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span></div>
<div class="viewcode-block" id="MonitorHandler.remove"><a class="viewcode-back" href="../../../api/evennia.scripts.monitorhandler.html#evennia.scripts.monitorhandler.MonitorHandler.remove">[docs]</a> <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">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">idstring</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
<div class="viewcode-block" id="MonitorHandler.remove"><a class="viewcode-back" href="../../../api/evennia.scripts.monitorhandler.html#evennia.scripts.monitorhandler.MonitorHandler.remove">[docs]</a> <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">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">idstring</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Remove a monitor.</span>
<span class="sd"> &quot;&quot;&quot;</span>
@ -212,7 +230,7 @@
<span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">fieldname</span><span class="p">,</span> <span class="n">return_obj</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
<span class="k">return</span>
<span class="n">fieldname</span> <span class="o">=</span> <span class="s2">&quot;db_value&quot;</span>
<span class="n">fieldname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_category_fieldname</span><span class="p">(</span><span class="s2">&quot;db_value&quot;</span><span class="p">,</span> <span class="n">category</span><span class="p">)</span>
<span class="n">idstring_dict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitors</span><span class="p">[</span><span class="n">obj</span><span class="p">][</span><span class="n">fieldname</span><span class="p">]</span>
<span class="k">if</span> <span class="n">idstring</span> <span class="ow">in</span> <span class="n">idstring_dict</span><span class="p">:</span>

View file

@ -508,10 +508,13 @@
<span class="sd"> dbref (str or int): The id to search for.</span>
<span class="sd"> Returns:</span>
<span class="sd"> object (TypedObject): The matched object.</span>
<span class="sd"> Queryset: Queryset with 0 or 1 match.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_id</span><span class="p">(</span><span class="n">dbref</span><span class="p">)</span></div>
<span class="n">dbref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">dbref</span><span class="p">,</span> <span class="n">reqhash</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dbref</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">dbref</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span></div>
<div class="viewcode-block" id="TypedObjectManager.get_dbref_range"><a class="viewcode-back" href="../../../api/evennia.typeclasses.managers.html#evennia.typeclasses.managers.TypedObjectManager.get_dbref_range">[docs]</a> <span class="k">def</span> <span class="nf">get_dbref_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">min_dbref</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">max_dbref</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>

View file

@ -1,693 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>evennia.utils.create &#8212; 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>
<script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({"tex2jax": {"processClass": "tex2jax_process|mathjax_process|math|output_area"}})</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> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.utils.create</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.utils.create</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">This module gathers all the essential database-creation functions for the game</span>
<span class="sd">engine&#39;s various object types.</span>
<span class="sd">Only objects created &#39;stand-alone&#39; are in here. E.g. object Attributes are</span>
<span class="sd">always created through their respective objects handlers.</span>
<span class="sd">Each `creation_*` function also has an alias named for the entity being created,</span>
<span class="sd">such as create_object() and object(). This is for consistency with the</span>
<span class="sd">utils.search module and allows you to do the shorter `create.object()`.</span>
<span class="sd">The respective object managers hold more methods for manipulating and searching</span>
<span class="sd">objects already existing in the database.</span>
<span class="sd">&quot;&quot;&quot;</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.db</span> <span class="kn">import</span> <span class="n">IntegrityError</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">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">dbid_to_obj</span>
<span class="c1"># delayed imports</span>
<span class="n">_User</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_ObjectDB</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_Object</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_Script</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_ScriptDB</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_HelpEntry</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_Msg</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_Account</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_AccountDB</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_to_object</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_ChannelDB</span> <span class="o">=</span> <span class="kc">None</span>
<span class="c1"># limit symbol import from API</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;create_object&quot;</span><span class="p">,</span>
<span class="s2">&quot;create_script&quot;</span><span class="p">,</span>
<span class="s2">&quot;create_help_entry&quot;</span><span class="p">,</span>
<span class="s2">&quot;create_message&quot;</span><span class="p">,</span>
<span class="s2">&quot;create_channel&quot;</span><span class="p">,</span>
<span class="s2">&quot;create_account&quot;</span><span class="p">,</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="c1">#</span>
<span class="c1"># Game Object creation</span>
<div class="viewcode-block" id="create_object"><a class="viewcode-back" href="../../../api/evennia.utils.create.html#evennia.utils.create.create_object">[docs]</a><span class="k">def</span> <span class="nf">create_object</span><span class="p">(</span>
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">location</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">home</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">destination</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">nohome</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">nattributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a new in-game object.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> typeclass (class or str): Class or python path to a typeclass.</span>
<span class="sd"> key (str): Name of the new object. If not set, a name of</span>
<span class="sd"> `#dbref` will be set.</span>
<span class="sd"> location (Object or str): Obj or #dbref to use as the location of the new object.</span>
<span class="sd"> home (Object or str): Obj or #dbref to use as the object&#39;s home location.</span>
<span class="sd"> permissions (list): A list of permission strings or tuples (permstring, category).</span>
<span class="sd"> locks (str): one or more lockstrings, separated by semicolons.</span>
<span class="sd"> aliases (list): A list of alternative keys or tuples (aliasstring, category).</span>
<span class="sd"> tags (list): List of tag keys or tuples (tagkey, category) or (tagkey, category, data).</span>
<span class="sd"> destination (Object or str): Obj or #dbref to use as an Exit&#39;s target.</span>
<span class="sd"> report_to (Object): The object to return error messages to.</span>
<span class="sd"> nohome (bool): This allows the creation of objects without a</span>
<span class="sd"> default home location; only used when creating the default</span>
<span class="sd"> location itself or during unittests.</span>
<span class="sd"> attributes (list): Tuples on the form (key, value) or (key, value, category),</span>
<span class="sd"> (key, value, lockstring) or (key, value, lockstring, default_access).</span>
<span class="sd"> to set as Attributes on the new object.</span>
<span class="sd"> nattributes (list): Non-persistent tuples on the form (key, value). Note that</span>
<span class="sd"> adding this rarely makes sense since this data will not survive a reload.</span>
<span class="sd"> Returns:</span>
<span class="sd"> object (Object): A newly created object of the given typeclass.</span>
<span class="sd"> Raises:</span>
<span class="sd"> ObjectDB.DoesNotExist: If trying to create an Object with</span>
<span class="sd"> `location` or `home` that can&#39;t be found.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">global</span> <span class="n">_ObjectDB</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_ObjectDB</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.objects.models</span> <span class="kn">import</span> <span class="n">ObjectDB</span> <span class="k">as</span> <span class="n">_ObjectDB</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_OBJECT_TYPECLASS</span>
<span class="c1"># convenience converters to avoid common usage mistake</span>
<span class="n">permissions</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">permissions</span><span class="p">)</span> <span class="k">if</span> <span class="n">permissions</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">locks</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span> <span class="k">if</span> <span class="n">locks</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span> <span class="k">if</span> <span class="n">aliases</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="c1"># a path is given. Load the actual typeclass</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
<span class="c1"># Setup input for the create command. We use ObjectDB as baseclass here</span>
<span class="c1"># to give us maximum freedom (the typeclasses will load</span>
<span class="c1"># correctly when each object is recovered).</span>
<span class="n">location</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">location</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span>
<span class="n">destination</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">destination</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span>
<span class="n">home</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">home</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">home</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">home</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">nohome</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">except</span> <span class="n">_ObjectDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">_ObjectDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">(</span>
<span class="s2">&quot;settings.DEFAULT_HOME (= &#39;</span><span class="si">%s</span><span class="s2">&#39;) does not exist, or the setting is malformed.&quot;</span>
<span class="o">%</span> <span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span>
<span class="p">)</span>
<span class="c1"># create new instance</span>
<span class="n">new_object</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span>
<span class="n">db_key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<span class="n">db_location</span><span class="o">=</span><span class="n">location</span><span class="p">,</span>
<span class="n">db_destination</span><span class="o">=</span><span class="n">destination</span><span class="p">,</span>
<span class="n">db_home</span><span class="o">=</span><span class="n">home</span><span class="p">,</span>
<span class="n">db_typeclass_path</span><span class="o">=</span><span class="n">typeclass</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># store the call signature for the signal</span>
<span class="n">new_object</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<span class="n">location</span><span class="o">=</span><span class="n">location</span><span class="p">,</span>
<span class="n">destination</span><span class="o">=</span><span class="n">destination</span><span class="p">,</span>
<span class="n">home</span><span class="o">=</span><span class="n">home</span><span class="p">,</span>
<span class="n">typeclass</span><span class="o">=</span><span class="n">typeclass</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
<span class="n">permissions</span><span class="o">=</span><span class="n">permissions</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span>
<span class="n">nohome</span><span class="o">=</span><span class="n">nohome</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span><span class="p">,</span>
<span class="n">nattributes</span><span class="o">=</span><span class="n">nattributes</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># this will trigger the save signal which in turn calls the</span>
<span class="c1"># at_first_save hook on the typeclass, where the _createdict can be</span>
<span class="c1"># used.</span>
<span class="n">new_object</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_OBJECT_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_object</span><span class="p">)</span>
<span class="k">return</span> <span class="n">new_object</span></div>
<span class="c1"># alias for create_object</span>
<span class="nb">object</span> <span class="o">=</span> <span class="n">create_object</span>
<span class="c1">#</span>
<span class="c1"># Script creation</span>
<div class="viewcode-block" id="create_script"><a class="viewcode-back" href="../../../api/evennia.utils.create.html#evennia.utils.create.create_script">[docs]</a><span class="k">def</span> <span class="nf">create_script</span><span class="p">(</span>
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">obj</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">account</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">interval</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">start_delay</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">repeats</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">persistent</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">autostart</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a new script. All scripts are a combination of a database</span>
<span class="sd"> object that communicates with the database, and an typeclass that</span>
<span class="sd"> &#39;decorates&#39; the database object into being different types of</span>
<span class="sd"> scripts. It&#39;s behaviour is similar to the game objects except</span>
<span class="sd"> scripts has a time component and are more limited in scope.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> typeclass (class or str): Class or python path to a typeclass.</span>
<span class="sd"> key (str): Name of the new object. If not set, a name of</span>
<span class="sd"> #dbref will be set.</span>
<span class="sd"> obj (Object): The entity on which this Script sits. If this</span>
<span class="sd"> is `None`, we are creating a &quot;global&quot; script.</span>
<span class="sd"> account (Account): The account on which this Script sits. It is</span>
<span class="sd"> exclusiv to `obj`.</span>
<span class="sd"> locks (str): one or more lockstrings, separated by semicolons.</span>
<span class="sd"> interval (int): The triggering interval for this Script, in</span>
<span class="sd"> seconds. If unset, the Script will not have a timing</span>
<span class="sd"> component.</span>
<span class="sd"> start_delay (bool): If `True`, will wait `interval` seconds</span>
<span class="sd"> before triggering the first time.</span>
<span class="sd"> repeats (int): The number of times to trigger before stopping.</span>
<span class="sd"> If unset, will repeat indefinitely.</span>
<span class="sd"> persistent (bool): If this Script survives a server shutdown</span>
<span class="sd"> or not (all Scripts will survive a reload).</span>
<span class="sd"> autostart (bool): If this Script will start immediately when</span>
<span class="sd"> created or if the `start` method must be called explicitly.</span>
<span class="sd"> report_to (Object): The object to return error messages to.</span>
<span class="sd"> desc (str): Optional description of script</span>
<span class="sd"> tags (list): List of tags or tuples (tag, category).</span>
<span class="sd"> attributes (list): List if tuples (key, value) or (key, value, category)</span>
<span class="sd"> (key, value, lockstring) or (key, value, lockstring, default_access).</span>
<span class="sd"> Returns:</span>
<span class="sd"> script (obj): An instance of the script created</span>
<span class="sd"> See evennia.scripts.manager for methods to manipulate existing</span>
<span class="sd"> scripts in the database.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">global</span> <span class="n">_ScriptDB</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_ScriptDB</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.scripts.models</span> <span class="kn">import</span> <span class="n">ScriptDB</span> <span class="k">as</span> <span class="n">_ScriptDB</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_SCRIPT_TYPECLASS</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="c1"># a path is given. Load the actual typeclass</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
<span class="c1"># validate input</span>
<span class="n">kwarg</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_key&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">key</span>
<span class="k">if</span> <span class="n">account</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_account&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">account</span><span class="p">,</span> <span class="n">_AccountDB</span><span class="p">)</span>
<span class="k">if</span> <span class="n">obj</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_obj&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span>
<span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_interval&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">interval</span><span class="p">)</span>
<span class="k">if</span> <span class="n">start_delay</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_start_delay&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">start_delay</span>
<span class="k">if</span> <span class="n">repeats</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_repeats&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">repeats</span><span class="p">)</span>
<span class="k">if</span> <span class="n">persistent</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_persistent&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">persistent</span>
<span class="k">if</span> <span class="n">desc</span><span class="p">:</span>
<span class="n">kwarg</span><span class="p">[</span><span class="s2">&quot;db_desc&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">desc</span>
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="c1"># create new instance</span>
<span class="n">new_script</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span><span class="o">**</span><span class="n">kwarg</span><span class="p">)</span>
<span class="c1"># store the call signature for the signal</span>
<span class="n">new_script</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<span class="n">obj</span><span class="o">=</span><span class="n">obj</span><span class="p">,</span>
<span class="n">account</span><span class="o">=</span><span class="n">account</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span>
<span class="n">interval</span><span class="o">=</span><span class="n">interval</span><span class="p">,</span>
<span class="n">start_delay</span><span class="o">=</span><span class="n">start_delay</span><span class="p">,</span>
<span class="n">repeats</span><span class="o">=</span><span class="n">repeats</span><span class="p">,</span>
<span class="n">persistent</span><span class="o">=</span><span class="n">persistent</span><span class="p">,</span>
<span class="n">autostart</span><span class="o">=</span><span class="n">autostart</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span>
<span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># this will trigger the save signal which in turn calls the</span>
<span class="c1"># at_first_save hook on the typeclass, where the _createdict</span>
<span class="c1"># can be used.</span>
<span class="n">new_script</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">new_script</span><span class="o">.</span><span class="n">id</span><span class="p">:</span>
<span class="c1"># this happens in the case of having a repeating script with `repeats=1` and</span>
<span class="c1"># `start_delay=False` - the script will run once and immediately stop before save is over.</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_SCRIPT_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_script</span><span class="p">)</span>
<span class="k">return</span> <span class="n">new_script</span></div>
<span class="c1"># alias</span>
<span class="n">script</span> <span class="o">=</span> <span class="n">create_script</span>
<span class="c1">#</span>
<span class="c1"># Help entry creation</span>
<span class="c1">#</span>
<div class="viewcode-block" id="create_help_entry"><a class="viewcode-back" href="../../../api/evennia.utils.create.html#evennia.utils.create.create_help_entry">[docs]</a><span class="k">def</span> <span class="nf">create_help_entry</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">entrytext</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">&quot;General&quot;</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a static help entry in the help database. Note that Command</span>
<span class="sd"> help entries are dynamic and directly taken from the __doc__</span>
<span class="sd"> entries of the command. The database-stored help entries are</span>
<span class="sd"> intended for more general help on the game, more extensive info,</span>
<span class="sd"> in-game setting information and so on.</span>
<span class="sd"> Args:</span>
<span class="sd"> key (str): The name of the help entry.</span>
<span class="sd"> entrytext (str): The body of te help entry</span>
<span class="sd"> category (str, optional): The help category of the entry.</span>
<span class="sd"> locks (str, optional): A lockstring to restrict access.</span>
<span class="sd"> aliases (list of str, optional): List of alternative (likely shorter) keynames.</span>
<span class="sd"> tags (lst, optional): List of tags or tuples `(tag, category)`.</span>
<span class="sd"> Returns:</span>
<span class="sd"> help (HelpEntry): A newly created help entry.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">global</span> <span class="n">_HelpEntry</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_HelpEntry</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.help.models</span> <span class="kn">import</span> <span class="n">HelpEntry</span> <span class="k">as</span> <span class="n">_HelpEntry</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">new_help</span> <span class="o">=</span> <span class="n">_HelpEntry</span><span class="p">()</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">key</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">entrytext</span> <span class="o">=</span> <span class="n">entrytext</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">help_category</span> <span class="o">=</span> <span class="n">category</span>
<span class="k">if</span> <span class="n">locks</span><span class="p">:</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span>
<span class="k">if</span> <span class="n">aliases</span><span class="p">:</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">make_iter</span><span class="p">(</span><span class="n">aliases</span><span class="p">))</span>
<span class="k">if</span> <span class="n">tags</span><span class="p">:</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">batch_add</span><span class="p">(</span><span class="o">*</span><span class="n">tags</span><span class="p">)</span>
<span class="n">new_help</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="k">return</span> <span class="n">new_help</span>
<span class="k">except</span> <span class="n">IntegrityError</span><span class="p">:</span>
<span class="n">string</span> <span class="o">=</span> <span class="s2">&quot;Could not add help entry: key &#39;</span><span class="si">%s</span><span class="s2">&#39; already exists.&quot;</span> <span class="o">%</span> <span class="n">key</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_HELPENTRY_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_help</span><span class="p">)</span></div>
<span class="c1"># alias</span>
<span class="n">help_entry</span> <span class="o">=</span> <span class="n">create_help_entry</span>
<span class="c1">#</span>
<span class="c1"># Comm system methods</span>
<div class="viewcode-block" id="create_message"><a class="viewcode-back" href="../../../api/evennia.utils.create.html#evennia.utils.create.create_message">[docs]</a><span class="k">def</span> <span class="nf">create_message</span><span class="p">(</span>
<span class="n">senderobj</span><span class="p">,</span> <span class="n">message</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">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">header</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a new communication Msg. Msgs represent a unit of</span>
<span class="sd"> database-persistent communication between entites.</span>
<span class="sd"> Args:</span>
<span class="sd"> senderobj (Object, Account, Script, str or list): The entity (or</span>
<span class="sd"> entities) sending the Msg. If a `str`, this is the id-string</span>
<span class="sd"> for an external sender type.</span>
<span class="sd"> message (str): Text with the message. Eventual headers, titles</span>
<span class="sd"> etc should all be included in this text string. Formatting</span>
<span class="sd"> will be retained.</span>
<span class="sd"> receivers (Object, Account, Script, str or list): An Account/Object to send</span>
<span class="sd"> to, or a list of them. If a string, it&#39;s an identifier for an external</span>
<span class="sd"> receiver.</span>
<span class="sd"> locks (str): Lock definition string.</span>
<span class="sd"> tags (list): A list of tags or tuples `(tag, category)`.</span>
<span class="sd"> header (str): Mime-type or other optional information for the message</span>
<span class="sd"> Notes:</span>
<span class="sd"> The Comm system is created to be very open-ended, so it&#39;s fully</span>
<span class="sd"> possible to let a message both go several receivers at the same time,</span>
<span class="sd"> it&#39;s up to the command definitions to limit this as desired.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="s1">&#39;channels&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span>
<span class="s2">&quot;create_message() does not accept &#39;channel&#39; kwarg anymore &quot;</span>
<span class="s2">&quot;- channels no longer accept Msg objects.&quot;</span>
<span class="p">)</span>
<span class="k">global</span> <span class="n">_Msg</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_Msg</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.comms.models</span> <span class="kn">import</span> <span class="n">Msg</span> <span class="k">as</span> <span class="n">_Msg</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">message</span><span class="p">:</span>
<span class="c1"># we don&#39;t allow empty messages.</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">new_message</span> <span class="o">=</span> <span class="n">_Msg</span><span class="p">(</span><span class="n">db_message</span><span class="o">=</span><span class="n">message</span><span class="p">)</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">save</span><span class="p">()</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">senderobj</span><span class="p">):</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">senders</span> <span class="o">=</span> <span class="n">sender</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="n">header</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="n">new_message</span><span class="o">.</span><span class="n">receivers</span> <span class="o">=</span> <span class="n">receiver</span>
<span class="k">if</span> <span class="n">locks</span><span class="p">:</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span>
<span class="k">if</span> <span class="n">tags</span><span class="p">:</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">batch_add</span><span class="p">(</span><span class="o">*</span><span class="n">tags</span><span class="p">)</span>
<span class="n">new_message</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="k">return</span> <span class="n">new_message</span></div>
<span class="n">message</span> <span class="o">=</span> <span class="n">create_message</span>
<span class="n">create_msg</span> <span class="o">=</span> <span class="n">create_message</span>
<div class="viewcode-block" id="create_channel"><a class="viewcode-back" href="../../../api/evennia.utils.create.html#evennia.utils.create.create_channel">[docs]</a><span class="k">def</span> <span class="nf">create_channel</span><span class="p">(</span>
<span class="n">key</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">keep_log</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create A communication Channel. A Channel serves as a central hub</span>
<span class="sd"> for distributing Msgs to groups of people without specifying the</span>
<span class="sd"> receivers explicitly. Instead accounts may &#39;connect&#39; to the channel</span>
<span class="sd"> and follow the flow of messages. By default the channel allows</span>
<span class="sd"> access to all old messages, but this can be turned off with the</span>
<span class="sd"> keep_log switch.</span>
<span class="sd"> Args:</span>
<span class="sd"> key (str): This must be unique.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> aliases (list of str): List of alternative (likely shorter) keynames.</span>
<span class="sd"> desc (str): A description of the channel, for use in listings.</span>
<span class="sd"> locks (str): Lockstring.</span>
<span class="sd"> keep_log (bool): Log channel throughput.</span>
<span class="sd"> typeclass (str or class): The typeclass of the Channel (not</span>
<span class="sd"> often used).</span>
<span class="sd"> tags (list): A list of tags or tuples `(tag, category)`.</span>
<span class="sd"> Returns:</span>
<span class="sd"> channel (Channel): A newly created channel.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_CHANNEL_TYPECLASS</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="c1"># a path is given. Load the actual typeclass</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
<span class="c1"># create new instance</span>
<span class="n">new_channel</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span><span class="n">db_key</span><span class="o">=</span><span class="n">key</span><span class="p">)</span>
<span class="c1"># store call signature for the signal</span>
<span class="n">new_channel</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span> <span class="n">keep_log</span><span class="o">=</span><span class="n">keep_log</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="n">tags</span>
<span class="p">)</span>
<span class="c1"># this will trigger the save signal which in turn calls the</span>
<span class="c1"># at_first_save hook on the typeclass, where the _createdict can be</span>
<span class="c1"># used.</span>
<span class="n">new_channel</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_CHANNEL_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_channel</span><span class="p">)</span>
<span class="k">return</span> <span class="n">new_channel</span></div>
<span class="n">channel</span> <span class="o">=</span> <span class="n">create_channel</span>
<span class="c1">#</span>
<span class="c1"># Account creation methods</span>
<span class="c1">#</span>
<div class="viewcode-block" id="create_account"><a class="viewcode-back" href="../../../api/evennia.utils.create.html#evennia.utils.create.create_account">[docs]</a><span class="k">def</span> <span class="nf">create_account</span><span class="p">(</span>
<span class="n">key</span><span class="p">,</span>
<span class="n">email</span><span class="p">,</span>
<span class="n">password</span><span class="p">,</span>
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">is_superuser</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">permissions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This creates a new account.</span>
<span class="sd"> Args:</span>
<span class="sd"> key (str): The account&#39;s name. This should be unique.</span>
<span class="sd"> email (str or None): Email on valid addr@addr.domain form. If</span>
<span class="sd"> the empty string, will be set to None.</span>
<span class="sd"> password (str): Password in cleartext.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> typeclass (str): The typeclass to use for the account.</span>
<span class="sd"> is_superuser (bool): Wether or not this account is to be a superuser</span>
<span class="sd"> locks (str): Lockstring.</span>
<span class="sd"> permission (list): List of permission strings.</span>
<span class="sd"> tags (list): List of Tags on form `(key, category[, data])`</span>
<span class="sd"> attributes (list): List of Attributes on form</span>
<span class="sd"> `(key, value [, category, [,lockstring [, default_pass]]])`</span>
<span class="sd"> report_to (Object): An object with a msg() method to report</span>
<span class="sd"> errors to. If not given, errors will be logged.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Account: The newly created Account.</span>
<span class="sd"> Raises:</span>
<span class="sd"> ValueError: If `key` already exists in database.</span>
<span class="sd"> Notes:</span>
<span class="sd"> Usually only the server admin should need to be superuser, all</span>
<span class="sd"> other access levels can be handled with more fine-grained</span>
<span class="sd"> permissions or groups. A superuser bypasses all lock checking</span>
<span class="sd"> operations and is thus not suitable for play-testing the game.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">global</span> <span class="n">_AccountDB</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_AccountDB</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.accounts.models</span> <span class="kn">import</span> <span class="n">AccountDB</span> <span class="k">as</span> <span class="n">_AccountDB</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_ACCOUNT_TYPECLASS</span>
<span class="n">locks</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span> <span class="k">if</span> <span class="n">locks</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">permissions</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">permissions</span><span class="p">)</span> <span class="k">if</span> <span class="n">permissions</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="c1"># a path is given. Load the actual typeclass.</span>
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
<span class="c1"># setup input for the create command. We use AccountDB as baseclass</span>
<span class="c1"># here to give us maximum freedom (the typeclasses will load</span>
<span class="c1"># correctly when each object is recovered).</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">email</span><span class="p">:</span>
<span class="n">email</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">_AccountDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">username__iexact</span><span class="o">=</span><span class="n">key</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;An Account with the name &#39;</span><span class="si">%s</span><span class="s2">&#39; already exists.&quot;</span> <span class="o">%</span> <span class="n">key</span><span class="p">)</span>
<span class="c1"># this handles a given dbref-relocate to an account.</span>
<span class="n">report_to</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">report_to</span><span class="p">,</span> <span class="n">_AccountDB</span><span class="p">)</span>
<span class="c1"># create the correct account entity, using the setup from</span>
<span class="c1"># base django auth.</span>
<span class="n">now</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
<span class="n">email</span> <span class="o">=</span> <span class="n">typeclass</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">normalize_email</span><span class="p">(</span><span class="n">email</span><span class="p">)</span>
<span class="n">new_account</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span>
<span class="n">username</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<span class="n">email</span><span class="o">=</span><span class="n">email</span><span class="p">,</span>
<span class="n">is_staff</span><span class="o">=</span><span class="n">is_superuser</span><span class="p">,</span>
<span class="n">is_superuser</span><span class="o">=</span><span class="n">is_superuser</span><span class="p">,</span>
<span class="n">last_login</span><span class="o">=</span><span class="n">now</span><span class="p">,</span>
<span class="n">date_joined</span><span class="o">=</span><span class="n">now</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">password</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># the password may be None for &#39;fake&#39; accounts, like bots</span>
<span class="n">valid</span><span class="p">,</span> <span class="n">error</span> <span class="o">=</span> <span class="n">new_account</span><span class="o">.</span><span class="n">validate_password</span><span class="p">(</span><span class="n">password</span><span class="p">,</span> <span class="n">new_account</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">valid</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">error</span>
<span class="n">new_account</span><span class="o">.</span><span class="n">set_password</span><span class="p">(</span><span class="n">password</span><span class="p">)</span>
<span class="n">new_account</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span> <span class="n">permissions</span><span class="o">=</span><span class="n">permissions</span><span class="p">,</span> <span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span> <span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span>
<span class="p">)</span>
<span class="c1"># saving will trigger the signal that calls the</span>
<span class="c1"># at_first_save hook on the typeclass, where the _createdict</span>
<span class="c1"># can be used.</span>
<span class="n">new_account</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="c1"># note that we don&#39;t send a signal here, that is sent from the Account.create helper method</span>
<span class="c1"># instead.</span>
<span class="k">return</span> <span class="n">new_account</span></div>
<span class="c1"># alias</span>
<span class="n">account</span> <span class="o">=</span> <span class="n">create_account</span>
</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>Links</h3>
<ul>
<li><a href="https://www.evennia.com">Home page</a> </li>
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li>
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
<a href="https://evennia.blogspot.com/">Blog</a>
</li>
</ul>
<h3>Versions</h3>
<ul>
<li><a href="create.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> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.utils.create</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2020, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>

View file

@ -154,7 +154,7 @@
<span class="c1"># candidates=None,</span>
<span class="c1"># attribute_name=None):</span>
<span class="c1">#</span>
<span class="n">search_object</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">object_search</span>
<span class="n">search_object</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">search_object</span>
<span class="n">search_objects</span> <span class="o">=</span> <span class="n">search_object</span>
<span class="n">object_search</span> <span class="o">=</span> <span class="n">search_object</span>
<span class="n">objects</span> <span class="o">=</span> <span class="n">search_objects</span>
@ -170,7 +170,7 @@
<span class="c1"># ostring = a string or database id.</span>
<span class="c1">#</span>
<span class="n">search_account</span> <span class="o">=</span> <span class="n">AccountDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">account_search</span>
<span class="n">search_account</span> <span class="o">=</span> <span class="n">AccountDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">search_account</span>
<span class="n">search_accounts</span> <span class="o">=</span> <span class="n">search_account</span>
<span class="n">account_search</span> <span class="o">=</span> <span class="n">search_account</span>
<span class="n">accounts</span> <span class="o">=</span> <span class="n">search_accounts</span>
@ -188,7 +188,7 @@
<span class="c1"># on a timer.</span>
<span class="c1">#</span>
<span class="n">search_script</span> <span class="o">=</span> <span class="n">ScriptDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">script_search</span>
<span class="n">search_script</span> <span class="o">=</span> <span class="n">ScriptDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">search_script</span>
<span class="n">search_scripts</span> <span class="o">=</span> <span class="n">search_script</span>
<span class="n">script_search</span> <span class="o">=</span> <span class="n">search_script</span>
<span class="n">scripts</span> <span class="o">=</span> <span class="n">search_scripts</span>
@ -209,7 +209,7 @@
<span class="c1"># one of the other arguments to limit the search.</span>
<span class="c1">#</span>
<span class="n">search_message</span> <span class="o">=</span> <span class="n">Msg</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">message_search</span>
<span class="n">search_message</span> <span class="o">=</span> <span class="n">Msg</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">search_message</span>
<span class="n">search_messages</span> <span class="o">=</span> <span class="n">search_message</span>
<span class="n">message_search</span> <span class="o">=</span> <span class="n">search_message</span>
<span class="n">messages</span> <span class="o">=</span> <span class="n">search_messages</span>
@ -225,7 +225,7 @@
<span class="c1"># exact - requires an exact ostring match (not case sensitive)</span>
<span class="c1">#</span>
<span class="n">search_channel</span> <span class="o">=</span> <span class="n">ChannelDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">channel_search</span>
<span class="n">search_channel</span> <span class="o">=</span> <span class="n">ChannelDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">search_channel</span>
<span class="n">search_channels</span> <span class="o">=</span> <span class="n">search_channel</span>
<span class="n">channel_search</span> <span class="o">=</span> <span class="n">search_channel</span>
<span class="n">channels</span> <span class="o">=</span> <span class="n">search_channels</span>

View file

@ -175,26 +175,6 @@
<span class="n">room_typeclass</span> <span class="o">=</span> <span class="n">DefaultRoom</span>
<span class="n">script_typeclass</span> <span class="o">=</span> <span class="n">DefaultScript</span>
<div class="viewcode-block" id="EvenniaTestMixin.save_backups"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.save_backups">[docs]</a> <span class="k">def</span> <span class="nf">save_backups</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">backups</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">data_out</span><span class="p">,</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">disconnect</span><span class="p">,</span>
<span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="p">,</span>
<span class="n">settings</span><span class="o">.</span><span class="n">PROTOTYPE_MODULES</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="EvenniaTestMixin.restore_backups"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.restore_backups">[docs]</a> <span class="k">def</span> <span class="nf">restore_backups</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">flush_cache</span><span class="p">()</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">data_out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">disconnect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
<span class="n">settings</span><span class="o">.</span><span class="n">PROTOTYPE_MODULES</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span></div>
<div class="viewcode-block" id="EvenniaTestMixin.mock_sessions"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.mock_sessions">[docs]</a> <span class="k">def</span> <span class="nf">mock_sessions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">data_out</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">disconnect</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mocked_SESSIONS</span> <span class="o">=</span> <span class="n">SESSIONS</span></div>
<div class="viewcode-block" id="EvenniaTestMixin.create_accounts"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.create_accounts">[docs]</a> <span class="k">def</span> <span class="nf">create_accounts</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">account</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_account</span><span class="p">(</span>
<span class="s2">&quot;TestAccount&quot;</span><span class="p">,</span>
@ -211,8 +191,10 @@
<span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;Developer&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="EvenniaTestMixin.teardown_accounts"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.teardown_accounts">[docs]</a> <span class="k">def</span> <span class="nf">teardown_accounts</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">account</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">account2</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span></div>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;account&quot;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;account2&quot;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">account2</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span></div>
<div class="viewcode-block" id="EvenniaTestMixin.create_rooms"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.create_rooms">[docs]</a> <span class="k">def</span> <span class="nf">create_rooms</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">room1</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">room_typeclass</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;Room&quot;</span><span class="p">,</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
@ -262,15 +244,23 @@
<span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="n">session</span></div>
<div class="viewcode-block" id="EvenniaTestMixin.teardown_session"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.teardown_session">[docs]</a> <span class="k">def</span> <span class="nf">teardown_session</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">del</span> <span class="n">SESSIONS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">sessid</span><span class="p">]</span></div>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;sessions&quot;</span><span class="p">):</span>
<span class="k">del</span> <span class="n">SESSIONS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">sessid</span><span class="p">]</span></div>
<div class="viewcode-block" id="EvenniaTestMixin.setUp"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.setUp">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.scripts.taskhandler.deferLater&quot;</span><span class="p">,</span> <span class="n">_mock_deferlater</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets up testing environment</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">save_backups</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mock_sessions</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">backups</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">data_out</span><span class="p">,</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">disconnect</span><span class="p">,</span>
<span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="p">,</span>
<span class="n">settings</span><span class="o">.</span><span class="n">PROTOTYPE_MODULES</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">data_out</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">disconnect</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create_accounts</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create_rooms</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create_objs</span><span class="p">()</span>
@ -279,8 +269,17 @@
<span class="bp">self</span><span class="o">.</span><span class="n">setup_session</span><span class="p">()</span></div>
<div class="viewcode-block" id="EvenniaTestMixin.tearDown"><a class="viewcode-back" href="../../../api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.tearDown">[docs]</a> <span class="k">def</span> <span class="nf">tearDown</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">restore_backups</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">teardown_session</span><span class="p">()</span>
<span class="n">flush_cache</span><span class="p">()</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">data_out</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">disconnect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
<span class="n">settings</span><span class="o">.</span><span class="n">PROTOTYPE_MODULES</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">backups</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
<span class="k">except</span> <span class="ne">AttributeError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">: Teardown error. If you overrode the `setUp()` method &quot;</span>
<span class="s2">&quot;in your test, make sure you also added `super().setUp()`!&quot;</span><span class="p">)</span>
<span class="k">del</span> <span class="n">SESSIONS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">sessid</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">teardown_accounts</span><span class="p">()</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">tearDown</span><span class="p">()</span></div></div>

View file

@ -240,7 +240,6 @@
<li><a href="evennia/utils/ansi.html">evennia.utils.ansi</a></li>
<li><a href="evennia/utils/batchprocessors.html">evennia.utils.batchprocessors</a></li>
<li><a href="evennia/utils/containers.html">evennia.utils.containers</a></li>
<li><a href="evennia/utils/create.html">evennia.utils.create</a></li>
<li><a href="evennia/utils/dbserialize.html">evennia.utils.dbserialize</a></li>
<li><a href="evennia/utils/eveditor.html">evennia.utils.eveditor</a></li>
<li><a href="evennia/utils/evform.html">evennia.utils.evform</a></li>

View file

@ -177,7 +177,7 @@ dropping a few coins in the cup.
[patron]: https://www.patreon.com/griatch
[donate]: https://www.paypal.com/donate?token=zbU72YdRqPgsbpTw3M_4vR-5QJ7XvUhL9W6JlnPJw70M9LOqY1xD7xKGx0V1jLFSthY3xAztQpSsqW9n
[forking]: https://github.com/evennia/evennia/wiki/Version-Control#wiki-forking-from-evennia
[forking]: Coding/Version-Control#forking-evennia
[pullrequest]: https://github.com/evennia/evennia/pulls
[issues]: https://github.com/evennia/evennia/issues
[patch]: https://secure.wikimedia.org/wikipedia/en/wiki/Patch_%28computing%29

View file

@ -191,9 +191,52 @@ otherwise also match also keys containing the <strong>ostring</strong>
accounts of this typeclass.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> A queryset (an iterable) with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.accounts.manager.AccountDBManager.create_account">
<code class="sig-name descname">create_account</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">email</span></em>, <em class="sig-param"><span class="n">password</span></em>, <em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">is_superuser</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">permissions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">report_to</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/accounts/manager.html#AccountDBManager.create_account"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.accounts.manager.AccountDBManager.create_account" title="Permalink to this definition"></a></dt>
<dd><p>This creates a new account.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>key</strong> (<em>str</em>) The accounts name. This should be unique.</p></li>
<li><p><strong>email</strong> (<em>str</em><em> or </em><em>None</em>) Email on valid <a class="reference external" href="mailto:addr&#37;&#52;&#48;addr&#46;domain">addr<span>&#64;</span>addr<span>&#46;</span>domain</a> form. If
the empty string, will be set to None.</p></li>
<li><p><strong>password</strong> (<em>str</em>) Password in cleartext.</p></li>
</ul>
</dd>
<dt class="field-even">Keyword Arguments</dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>typeclass</strong> (<em>str</em>) The typeclass to use for the account.</p></li>
<li><p><strong>is_superuser</strong> (<em>bool</em>) Wether or not this account is to be a superuser</p></li>
<li><p><strong>locks</strong> (<em>str</em>) Lockstring.</p></li>
<li><p><strong>permission</strong> (<a class="reference internal" href="evennia.contrib.game_systems.barter.barter.html#evennia.contrib.game_systems.barter.barter.TradeHandler.list" title="evennia.contrib.game_systems.barter.barter.TradeHandler.list"><em>list</em></a>) List of permission strings.</p></li>
<li><p><strong>tags</strong> (<a class="reference internal" href="evennia.contrib.game_systems.barter.barter.html#evennia.contrib.game_systems.barter.barter.TradeHandler.list" title="evennia.contrib.game_systems.barter.barter.TradeHandler.list"><em>list</em></a>) List of Tags on form <strong>(key, category[, data])</strong></p></li>
<li><p><strong>attributes</strong> (<a class="reference internal" href="evennia.contrib.game_systems.barter.barter.html#evennia.contrib.game_systems.barter.barter.TradeHandler.list" title="evennia.contrib.game_systems.barter.barter.TradeHandler.list"><em>list</em></a>) List of Attributes on form
<strong>(key, value [, category, [,lockstring [, default_pass]]])</strong></p></li>
<li><p><strong>report_to</strong> (<em>Object</em>) An object with a msg() method to report
errors to. If not given, errors will be logged.</p></li>
</ul>
</dd>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><em>Account</em> The newly created Account.</p>
</dd>
<dt class="field-even">Raises</dt>
<dd class="field-even"><p><strong>ValueError</strong> If <strong>key</strong> already exists in database.</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>Usually only the server admin should need to be superuser, all
other access levels can be handled with more fine-grained
permissions or groups. A superuser bypasses all lock checking
operations and is thus not suitable for play-testing the game.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.accounts.manager.AccountDBManager.account_search">
<code class="sig-name descname">account_search</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ostring</span></em>, <em class="sig-param"><span class="n">exact</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.accounts.manager.AccountDBManager.account_search" title="Permalink to this definition"></a></dt>
@ -211,6 +254,9 @@ otherwise also match also keys containing the <strong>ostring</strong>
accounts of this typeclass.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> A queryset (an iterable) with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>

View file

@ -73,7 +73,7 @@ method. Otherwise all text will be returned to all connected sessions.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.account.CmdOOCLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -104,7 +104,7 @@ method. Otherwise all text will be returned to all connected sessions.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.account.CmdOOCLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}</em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}</em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -78,7 +78,7 @@ skipping, reloading etc.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.batchprocess.CmdBatchCommands.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['batchcommand', 'batchcmd']</em><a class="headerlink" href="#evennia.commands.default.batchprocess.CmdBatchCommands.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['batchcmd', 'batchcommand']</em><a class="headerlink" href="#evennia.commands.default.batchprocess.CmdBatchCommands.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -109,7 +109,7 @@ skipping, reloading etc.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.batchprocess.CmdBatchCommands.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'batchcommand batchcmd', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcommand batchcmd', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] &lt;python.path.to.file&gt;\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}</em><a class="headerlink" href="#evennia.commands.default.batchprocess.CmdBatchCommands.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'batchcmd batchcommand', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcmd batchcommand', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] &lt;python.path.to.file&gt;\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}</em><a class="headerlink" href="#evennia.commands.default.batchprocess.CmdBatchCommands.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -532,7 +532,7 @@ You can specify the /force switch to bypass this confirmation.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdDestroy.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;delete', '&#64;del']</em><a class="headerlink" href="#evennia.commands.default.building.CmdDestroy.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;del', '&#64;delete']</em><a class="headerlink" href="#evennia.commands.default.building.CmdDestroy.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -573,7 +573,7 @@ You can specify the /force switch to bypass this confirmation.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdDestroy.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;delete &#64;del', 'category': 'building', 'key': '&#64;destroy', 'no_prefix': 'destroy delete del', 'tags': '', 'text': '\n permanently delete objects\n\n Usage:\n destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]\n\n Switches:\n override - The destroy command will usually avoid accidentally\n destroying account objects. This switch overrides this safety.\n force - destroy without confirmation.\n Examples:\n destroy house, roof, door, 44-78\n destroy 5-10, flower, 45\n destroy/force north\n\n Destroys one or many objects. If dbrefs are used, a range to delete can be\n given, e.g. 4-10. Also the end points will be deleted. This command\n displays a confirmation before destroying, to make sure of your choice.\n You can specify the /force switch to bypass this confirmation.\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdDestroy.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;del &#64;delete', 'category': 'building', 'key': '&#64;destroy', 'no_prefix': 'destroy del delete', 'tags': '', 'text': '\n permanently delete objects\n\n Usage:\n destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]\n\n Switches:\n override - The destroy command will usually avoid accidentally\n destroying account objects. This switch overrides this safety.\n force - destroy without confirmation.\n Examples:\n destroy house, roof, door, 44-78\n destroy 5-10, flower, 45\n destroy/force north\n\n Destroys one or many objects. If dbrefs are used, a range to delete can be\n given, e.g. 4-10. Also the end points will be deleted. This command\n displays a confirmation before destroying, to make sure of your choice.\n You can specify the /force switch to bypass this confirmation.\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdDestroy.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -1087,10 +1087,17 @@ char: Setting an attribute on a character (global search)
character: Alias for char, as above.</p>
</dd>
</dl>
<p class="rubric">Example</p>
<p>set self/foo = “bar”
set/delete self/foo
set self/foo = $dbref(#53)</p>
<p>Sets attributes on objects. The second example form above clears a
previously set attribute while the third form inspects the current value of
the attribute (if any). The last one (with the star) is a shortcut for
operating on a player Account rather than an Object.</p>
<p>If you want &lt;value&gt; to be an object, use $dbef(#dbref) or
$search(key) to assign it. You need control or edit access to
the object you are adding.</p>
<p>The most common data to save with this command are strings and
numbers. You can however also set Python primitives such as lists,
dictionaries and tuples on objects (this might be important for
@ -1220,7 +1227,7 @@ with older attrs that might have been named with <strong>[]</strong>s.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdSetAttribute.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '', 'category': 'building', 'key': '&#64;set', 'no_prefix': 'set ', 'tags': '', 'text': '\n set attribute on an object or account\n\n Usage:\n set[/switch] &lt;obj&gt;/&lt;attr&gt;[:category] = &lt;value&gt;\n set[/switch] &lt;obj&gt;/&lt;attr&gt;[:category] = # delete attribute\n set[/switch] &lt;obj&gt;/&lt;attr&gt;[:category] # view attribute\n set[/switch] *&lt;account&gt;/&lt;attr&gt;[:category] = &lt;value&gt;\n\n Switch:\n edit: Open the line editor (string values only)\n script: If we\'re trying to set an attribute on a script\n channel: If we\'re trying to set an attribute on a channel\n account: If we\'re trying to set an attribute on an account\n room: Setting an attribute on a room (global search)\n exit: Setting an attribute on an exit (global search)\n char: Setting an attribute on a character (global search)\n character: Alias for char, as above.\n\n Sets attributes on objects. The second example form above clears a\n previously set attribute while the third form inspects the current value of\n the attribute (if any). The last one (with the star) is a shortcut for\n operating on a player Account rather than an Object.\n\n The most common data to save with this command are strings and\n numbers. You can however also set Python primitives such as lists,\n dictionaries and tuples on objects (this might be important for\n the functionality of certain custom objects). This is indicated\n by you starting your value with one of |c\'|n, |c&quot;|n, |c(|n, |c[|n\n or |c{ |n.\n\n Once you have stored a Python primitive as noted above, you can include\n |c[&lt;key&gt;]|n in &lt;attr&gt; to reference nested values in e.g. a list or dict.\n\n Remember that if you use Python primitives like this, you must\n write proper Python syntax too - notably you must include quotes\n around your strings or you will get an error.\n\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdSetAttribute.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '', 'category': 'building', 'key': '&#64;set', 'no_prefix': 'set ', 'tags': '', 'text': '\n set attribute on an object or account\n\n Usage:\n set[/switch] &lt;obj&gt;/&lt;attr&gt;[:category] = &lt;value&gt;\n set[/switch] &lt;obj&gt;/&lt;attr&gt;[:category] = # delete attribute\n set[/switch] &lt;obj&gt;/&lt;attr&gt;[:category] # view attribute\n set[/switch] *&lt;account&gt;/&lt;attr&gt;[:category] = &lt;value&gt;\n\n Switch:\n edit: Open the line editor (string values only)\n script: If we\'re trying to set an attribute on a script\n channel: If we\'re trying to set an attribute on a channel\n account: If we\'re trying to set an attribute on an account\n room: Setting an attribute on a room (global search)\n exit: Setting an attribute on an exit (global search)\n char: Setting an attribute on a character (global search)\n character: Alias for char, as above.\n\n Example:\n set self/foo = &quot;bar&quot;\n set/delete self/foo\n set self/foo = $dbref(#53)\n\n Sets attributes on objects. The second example form above clears a\n previously set attribute while the third form inspects the current value of\n the attribute (if any). The last one (with the star) is a shortcut for\n operating on a player Account rather than an Object.\n\n If you want &lt;value&gt; to be an object, use $dbef(#dbref) or\n $search(key) to assign it. You need control or edit access to\n the object you are adding.\n\n The most common data to save with this command are strings and\n numbers. You can however also set Python primitives such as lists,\n dictionaries and tuples on objects (this might be important for\n the functionality of certain custom objects). This is indicated\n by you starting your value with one of |c\'|n, |c&quot;|n, |c(|n, |c[|n\n or |c{ |n.\n\n Once you have stored a Python primitive as noted above, you can include\n |c[&lt;key&gt;]|n in &lt;attr&gt; to reference nested values in e.g. a list or dict.\n\n Remember that if you use Python primitives like this, you must\n write proper Python syntax too - notably you must include quotes\n around your strings or you will get an error.\n\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdSetAttribute.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -1278,7 +1285,7 @@ server settings.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdTypeclass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;update', '&#64;typeclasses', '&#64;type', '&#64;parent', '&#64;swap']</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;typeclasses', '&#64;type', '&#64;swap', '&#64;update', '&#64;parent']</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -1309,7 +1316,7 @@ server settings.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdTypeclass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;update &#64;typeclasses &#64;type &#64;parent &#64;swap', 'category': 'building', 'key': '&#64;typeclass', 'no_prefix': 'typeclass update typeclasses type parent swap', 'tags': '', 'text': &quot;\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] &lt;object&gt; [= typeclass.path]\n typeclass/prototype &lt;object&gt; = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;typeclasses &#64;type &#64;swap &#64;update &#64;parent', 'category': 'building', 'key': '&#64;typeclass', 'no_prefix': 'typeclass typeclasses type swap update parent', 'tags': '', 'text': &quot;\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] &lt;object&gt; [= typeclass.path]\n typeclass/prototype &lt;object&gt; = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -1448,7 +1455,9 @@ them by ;, i.e:</p>
examine [<a href="#id39"><span class="problematic" id="id40">*</span></a>&lt;account&gt;[/attrname]]</p>
</dd>
<dt>Switch:</dt><dd><p>account - examine an Account (same as adding <a href="#id41"><span class="problematic" id="id42">*</span></a>)
object - examine an Object (useful when OOC)</p>
object - examine an Object (useful when OOC)
script - examine a Script
channel - examine a Channel</p>
</dd>
</dl>
<p>The examine command shows detailed game info about an
@ -1462,7 +1471,7 @@ If object is not specified, the current location is examined.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdExamine.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;ex', '&#64;exam']</em><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;exam', '&#64;ex']</em><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -1481,8 +1490,13 @@ If object is not specified, the current location is examined.</p>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdExamine.account_mode">
<code class="sig-name descname">account_mode</code><em class="property"> = False</em><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.account_mode" title="Permalink to this definition"></a></dt>
<dt id="evennia.commands.default.building.CmdExamine.switch_options">
<code class="sig-name descname">switch_options</code><em class="property"> = ['account', 'object', 'script', 'channel']</em><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.switch_options" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdExamine.object_type">
<code class="sig-name descname">object_type</code><em class="property"> = 'object'</em><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.object_type" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -1663,6 +1677,36 @@ the message as examine for eventual custom markup in the client.</p>
<code class="sig-name descname">format_things</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdExamine.format_things"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.format_things" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdExamine.format_script_desc">
<code class="sig-name descname">format_script_desc</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdExamine.format_script_desc"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.format_script_desc" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdExamine.format_script_is_persistent">
<code class="sig-name descname">format_script_is_persistent</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdExamine.format_script_is_persistent"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.format_script_is_persistent" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdExamine.format_script_timer_data">
<code class="sig-name descname">format_script_timer_data</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdExamine.format_script_timer_data"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.format_script_timer_data" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdExamine.format_channel_sub_totals">
<code class="sig-name descname">format_channel_sub_totals</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdExamine.format_channel_sub_totals"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.format_channel_sub_totals" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdExamine.format_channel_account_subs">
<code class="sig-name descname">format_channel_account_subs</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdExamine.format_channel_account_subs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.format_channel_account_subs" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdExamine.format_channel_object_subs">
<code class="sig-name descname">format_channel_object_subs</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdExamine.format_channel_object_subs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.format_channel_object_subs" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdExamine.get_formatted_obj_data">
<code class="sig-name descname">get_formatted_obj_data</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em>, <em class="sig-param"><span class="n">current_cmdset</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdExamine.get_formatted_obj_data"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.get_formatted_obj_data" title="Permalink to this definition"></a></dt>
@ -1695,7 +1739,7 @@ the cases, see the module doc.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdExamine.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;ex &#64;exam', 'category': 'building', 'key': '&#64;examine', 'no_prefix': 'examine ex exam', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [&lt;object&gt;[/attrname]]\n examine [*&lt;account&gt;[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;exam &#64;ex', 'category': 'building', 'key': '&#64;examine', 'no_prefix': 'examine exam ex', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [&lt;object&gt;[/attrname]]\n examine [*&lt;account&gt;[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n script - examine a Script\n channel - examine a Channel\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -1729,7 +1773,7 @@ one is given.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdFind.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;search', '&#64;locate']</em><a class="headerlink" href="#evennia.commands.default.building.CmdFind.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;locate', '&#64;search']</em><a class="headerlink" href="#evennia.commands.default.building.CmdFind.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -1760,7 +1804,7 @@ one is given.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdFind.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;search &#64;locate', 'category': 'building', 'key': '&#64;find', 'no_prefix': 'find search locate', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] &lt;name or dbref or *account&gt; [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdFind.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;locate &#64;search', 'category': 'building', 'key': '&#64;find', 'no_prefix': 'find locate search', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] &lt;name or dbref or *account&gt; [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdFind.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -1878,7 +1922,8 @@ script scriptname - examine named existing global script
script myobj = foo.bar.Script - create and assign script to object
script/stop myobj = scriptname - stop script on object
script/pause foo.Bar.Script - pause global script
script/delete myobj - delete ALL scripts on object</p>
script/delete myobj - delete ALL scripts on object
script/delete #dbref[-#dbref] - delete script or range by dbref</p>
<p>When given with an <strong>&lt;obj&gt;</strong> as left-hand-side, this creates and
assigns a new script to that object. Without an <strong>&lt;obj&gt;</strong>, this
manages and inspects global scripts</p>
@ -1937,7 +1982,7 @@ objects.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdScripts.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;script', 'category': 'system', 'key': '&#64;scripts', 'no_prefix': 'scripts script', 'tags': '', 'text': &quot;\n List and manage all running scripts. Allows for creating new global\n scripts.\n\n Usage:\n script[/switches] [script-#dbref, key, script.path or &lt;obj&gt;]\n script[/start||stop] &lt;obj&gt; = &lt;script.path or script-key&gt;\n\n Switches:\n start - start/unpause an existing script's timer.\n stop - stops an existing script's timer\n pause - pause a script's timer\n delete - deletes script. This will also stop the timer as needed\n\n Examples:\n script - list scripts\n script myobj - list all scripts on object\n script foo.bar.Script - create a new global Script\n script scriptname - examine named existing global script\n script myobj = foo.bar.Script - create and assign script to object\n script/stop myobj = scriptname - stop script on object\n script/pause foo.Bar.Script - pause global script\n script/delete myobj - delete ALL scripts on object\n\n When given with an `&lt;obj&gt;` as left-hand-side, this creates and\n assigns a new script to that object. Without an `&lt;obj&gt;`, this\n manages and inspects global scripts\n\n If no switches are given, this command just views all active\n scripts. The argument can be either an object, at which point it\n will be searched for all scripts defined on it, or a script name\n or #dbref. For using the /stop switch, a unique script #dbref is\n required since whole classes of scripts often have the same name.\n\n Use the `script` build-level command for managing scripts attached to\n objects.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.building.CmdScripts.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;script', 'category': 'system', 'key': '&#64;scripts', 'no_prefix': 'scripts script', 'tags': '', 'text': &quot;\n List and manage all running scripts. Allows for creating new global\n scripts.\n\n Usage:\n script[/switches] [script-#dbref, key, script.path or &lt;obj&gt;]\n script[/start||stop] &lt;obj&gt; = &lt;script.path or script-key&gt;\n\n Switches:\n start - start/unpause an existing script's timer.\n stop - stops an existing script's timer\n pause - pause a script's timer\n delete - deletes script. This will also stop the timer as needed\n\n Examples:\n script - list scripts\n script myobj - list all scripts on object\n script foo.bar.Script - create a new global Script\n script scriptname - examine named existing global script\n script myobj = foo.bar.Script - create and assign script to object\n script/stop myobj = scriptname - stop script on object\n script/pause foo.Bar.Script - pause global script\n script/delete myobj - delete ALL scripts on object\n script/delete #dbref[-#dbref] - delete script or range by dbref\n\n When given with an `&lt;obj&gt;` as left-hand-side, this creates and\n assigns a new script to that object. Without an `&lt;obj&gt;`, this\n manages and inspects global scripts\n\n If no switches are given, this command just views all active\n scripts. The argument can be either an object, at which point it\n will be searched for all scripts defined on it, or a script name\n or #dbref. For using the /stop switch, a unique script #dbref is\n required since whole classes of scripts often have the same name.\n\n Use the `script` build-level command for managing scripts attached to\n objects.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.building.CmdScripts.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

File diff suppressed because one or more lines are too long

View file

@ -115,7 +115,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.commands.default.general.CmdLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.commands.default.general.CmdLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -146,7 +146,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look &lt;obj&gt;\n look *&lt;account&gt;\n\n Observes your location or objects in your vicinity.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look &lt;obj&gt;\n look *&lt;account&gt;\n\n Observes your location or objects in your vicinity.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -263,7 +263,7 @@ inv</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdInventory.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['i', 'inv']</em><a class="headerlink" href="#evennia.commands.default.general.CmdInventory.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['inv', 'i']</em><a class="headerlink" href="#evennia.commands.default.general.CmdInventory.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -294,7 +294,7 @@ inv</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdInventory.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdInventory.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdInventory.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -538,7 +538,7 @@ placing it in their inventory.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdSay.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = [&quot;'&quot;, '&quot;']</em><a class="headerlink" href="#evennia.commands.default.general.CmdSay.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['&quot;', &quot;'&quot;]</em><a class="headerlink" href="#evennia.commands.default.general.CmdSay.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -569,7 +569,7 @@ placing it in their inventory.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdSay.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '\' &quot;', 'category': 'general', 'key': 'say', 'no_prefix': ' \' &quot;', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say &lt;message&gt;\n\n Talk to those in your current location.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdSay.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&quot; \'', 'category': 'general', 'key': 'say', 'no_prefix': ' &quot; \'', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say &lt;message&gt;\n\n Talk to those in your current location.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdSay.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -623,7 +623,7 @@ See <a href="#id11"><span class="problematic" id="id12">|</span></a>luhttps://ww
<dl class="py attribute">
<dt id="evennia.commands.default.system.CmdTasks.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;delays', '&#64;task']</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;task', '&#64;delays']</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -669,7 +669,7 @@ to all the variables defined therein.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.system.CmdTasks.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;delays &#64;task', 'category': 'system', 'key': '&#64;tasks', 'no_prefix': 'tasks delays task', 'tags': '', 'text': &quot;\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;task &#64;delays', 'category': 'system', 'key': '&#64;tasks', 'no_prefix': 'tasks task delays', 'tags': '', 'text': &quot;\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -711,6 +711,11 @@ classes and settings in mygame.</p>
<code class="sig-name descname">test_script</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestBuilding.test_script"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestBuilding.test_script" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.tests.TestBuilding.test_script_multi_delete">
<code class="sig-name descname">test_script_multi_delete</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestBuilding.test_script_multi_delete"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestBuilding.test_script_multi_delete" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.tests.TestBuilding.test_teleport">
<code class="sig-name descname">test_teleport</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestBuilding.test_teleport"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestBuilding.test_teleport" title="Permalink to this definition"></a></dt>

View file

@ -62,7 +62,7 @@ connect “account name” “pass word”</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['con', 'co', 'conn']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['con', 'conn', 'co']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -97,7 +97,7 @@ there is no object yet before the account has logged in)</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'con co conn', 'category': 'general', 'key': 'connect', 'no_prefix': ' con co conn', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect &quot;account name&quot; &quot;pass word&quot;\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'con conn co', 'category': 'general', 'key': 'connect', 'no_prefix': ' con conn co', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect &quot;account name&quot; &quot;pass word&quot;\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -176,7 +176,7 @@ version is a bit more complicated.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedQuit.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['qu', 'q']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedQuit.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['q', 'qu']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedQuit.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -202,7 +202,7 @@ version is a bit more complicated.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedQuit.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'qu q', 'category': 'general', 'key': 'quit', 'no_prefix': ' qu q', 'tags': '', 'text': '\n quit when in unlogged-in state\n\n Usage:\n quit\n\n We maintain a different version of the quit command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedQuit.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', 'no_prefix': ' q qu', 'tags': '', 'text': '\n quit when in unlogged-in state\n\n Usage:\n quit\n\n We maintain a different version of the quit command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedQuit.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -226,7 +226,7 @@ All it does is display the connect screen.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'look']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['look', 'l']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -252,7 +252,7 @@ All it does is display the connect screen.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' l look', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' look l', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -191,7 +191,7 @@ always gives only one match.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> Message matches.</p>
<dd class="field-even"><p><em>Queryset</em> Iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
@ -216,11 +216,40 @@ always gives only one match.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> Message matches.</p>
<dd class="field-even"><p><em>Queryset</em> Iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.comms.managers.MsgManager.create_message">
<code class="sig-name descname">create_message</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">senderobj</span></em>, <em class="sig-param"><span class="n">message</span></em>, <em class="sig-param"><span class="n">receivers</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">header</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/comms/managers.html#MsgManager.create_message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.comms.managers.MsgManager.create_message" title="Permalink to this definition"></a></dt>
<dd><p>Create a new communication Msg. Msgs represent a unit of
database-persistent communication between entites.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>senderobj</strong> (<em>Object</em><em>, </em><em>Account</em><em>, </em><em>Script</em><em>, </em><em>str</em><em> or </em><em>list</em>) The entity (or
entities) sending the Msg. If a <strong>str</strong>, this is the id-string
for an external sender type.</p></li>
<li><p><strong>message</strong> (<em>str</em>) Text with the message. Eventual headers, titles
etc should all be included in this text string. Formatting
will be retained.</p></li>
<li><p><strong>receivers</strong> (<em>Object</em><em>, </em><em>Account</em><em>, </em><em>Script</em><em>, </em><em>str</em><em> or </em><em>list</em>) An Account/Object to send
to, or a list of them. If a string, its an identifier for an external
receiver.</p></li>
<li><p><strong>locks</strong> (<em>str</em>) Lock definition string.</p></li>
<li><p><strong>tags</strong> (<em>list</em>) A list of tags or tuples <strong>(tag, category)</strong>.</p></li>
<li><p><strong>header</strong> (<em>str</em>) Mime-type or other optional information for the message</p></li>
</ul>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>The Comm system is created to be very open-ended, so its fully
possible to let a message both go several receivers at the same time,
its up to the command definitions to limit this as desired.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
@ -287,6 +316,39 @@ Also searches its aliases.</p>
case sensitive) match.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> Iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.comms.managers.ChannelDBManager.create_channel">
<code class="sig-name descname">create_channel</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">aliases</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">desc</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">keep_log</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/comms/managers.html#ChannelDBManager.create_channel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.comms.managers.ChannelDBManager.create_channel" title="Permalink to this definition"></a></dt>
<dd><p>Create A communication Channel. A Channel serves as a central hub
for distributing Msgs to groups of people without specifying the
receivers explicitly. Instead accounts may connect to the channel
and follow the flow of messages. By default the channel allows
access to all old messages, but this can be turned off with the
keep_log switch.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>key</strong> (<em>str</em>) This must be unique.</p>
</dd>
<dt class="field-even">Keyword Arguments</dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>aliases</strong> (<em>list of str</em>) List of alternative (likely shorter) keynames.</p></li>
<li><p><strong>desc</strong> (<em>str</em>) A description of the channel, for use in listings.</p></li>
<li><p><strong>locks</strong> (<em>str</em>) Lockstring.</p></li>
<li><p><strong>keep_log</strong> (<em>bool</em>) Log channel throughput.</p></li>
<li><p><strong>typeclass</strong> (<em>str</em><em> or </em><em>class</em>) The typeclass of the Channel (not
often used).</p></li>
<li><p><strong>tags</strong> (<a class="reference internal" href="evennia.contrib.game_systems.barter.barter.html#evennia.contrib.game_systems.barter.barter.TradeHandler.list" title="evennia.contrib.game_systems.barter.barter.TradeHandler.list"><em>list</em></a>) A list of tags or tuples <strong>(tag, category)</strong>.</p></li>
</ul>
</dd>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><em>channel (Channel)</em> A newly created channel.</p>
</dd>
</dl>
</dd></dl>
@ -302,6 +364,9 @@ case sensitive) match.</p></li>
case sensitive) match.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> Iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>

View file

@ -78,7 +78,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['con', 'co', 'conn']</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['con', 'conn', 'co']</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -108,7 +108,7 @@ there is no object yet before the account has logged in)</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'con co conn', 'category': 'general', 'key': 'connect', 'no_prefix': ' con co conn', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect &lt;email&gt; &lt;password&gt;\n\n Use the create command to first create an account before logging in.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'con conn co', 'category': 'general', 'key': 'connect', 'no_prefix': ' con conn co', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect &lt;email&gt; &lt;password&gt;\n\n Use the create command to first create an account before logging in.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -185,7 +185,7 @@ version is a bit more complicated.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedQuit.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['qu', 'q']</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedQuit.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['q', 'qu']</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedQuit.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -211,7 +211,7 @@ version is a bit more complicated.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedQuit.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'qu q', 'category': 'general', 'key': 'quit', 'no_prefix': ' qu q', 'tags': '', 'text': '\n We maintain a different version of the `quit` command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedQuit.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', 'no_prefix': ' q qu', 'tags': '', 'text': '\n We maintain a different version of the `quit` command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedQuit.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -230,7 +230,7 @@ All it does is display the connect screen.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'look']</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['look', 'l']</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -256,7 +256,7 @@ All it does is display the connect screen.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' l look', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' look l', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -99,7 +99,7 @@ aliases to an already joined channel.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdAddCom.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['aliaschan', 'chanalias']</em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdAddCom.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['chanalias', 'aliaschan']</em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdAddCom.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -130,7 +130,7 @@ aliases to an already joined channel.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdAddCom.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'aliaschan chanalias', 'category': 'comms', 'key': 'addcom', 'no_prefix': ' aliaschan chanalias', 'tags': '', 'text': '\n Add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] &lt;channel&gt;\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdAddCom.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'chanalias aliaschan', 'category': 'comms', 'key': 'addcom', 'no_prefix': ' chanalias aliaschan', 'tags': '', 'text': '\n Add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] &lt;channel&gt;\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdAddCom.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -156,7 +156,7 @@ for that channel.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['delaliaschan', 'delchanalias']</em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['delchanalias', 'delaliaschan']</em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -187,7 +187,7 @@ for that channel.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'delaliaschan delchanalias', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delaliaschan delchanalias', 'tags': '', 'text': &quot;\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom &lt;alias or channel&gt;\n delcom/all &lt;channel&gt;\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n &quot;}</em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'delchanalias delaliaschan', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delchanalias delaliaschan', 'tags': '', 'text': &quot;\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom &lt;alias or channel&gt;\n delcom/all &lt;channel&gt;\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n &quot;}</em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -150,7 +150,7 @@ the operation will be general or on the room.</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['chicken out', 'q', 'quit', 'abort']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['quit', 'q', 'abort', 'chicken out']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
@ -174,7 +174,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'chicken out q quit abort', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' chicken out q quit abort', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'quit q abort chicken out', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' quit q abort chicken out', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -195,7 +195,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -229,7 +229,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'evscaperoom', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'evscaperoom', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -310,7 +310,7 @@ shout</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['shout', 'whisper', ';']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['shout', ';', 'whisper']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -339,7 +339,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'shout whisper ;', 'category': 'general', 'key': 'say', 'no_prefix': ' shout whisper ;', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say &lt;text&gt;\n whisper\n shout\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'shout ; whisper', 'category': 'general', 'key': 'say', 'no_prefix': ' shout ; whisper', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say &lt;text&gt;\n whisper\n shout\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -367,7 +367,7 @@ emote /me points to /box and /lever.</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdEmote.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['pose', ':']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdEmote.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = [':', 'pose']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdEmote.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -406,7 +406,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdEmote.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'pose :', 'category': 'general', 'key': 'emote', 'no_prefix': ' pose :', 'tags': '', 'text': '\n Perform a free-form emote. Use /me to\n include yourself in the emote and /name\n to include other objects or characters.\n Use &quot;...&quot; to enact speech.\n\n Usage:\n emote &lt;emote&gt;\n :&lt;emote\n\n Example:\n emote /me smiles at /peter\n emote /me points to /box and /lever.\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdEmote.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': ': pose', 'category': 'general', 'key': 'emote', 'no_prefix': ' : pose', 'tags': '', 'text': '\n Perform a free-form emote. Use /me to\n include yourself in the emote and /name\n to include other objects or characters.\n Use &quot;...&quot; to enact speech.\n\n Usage:\n emote &lt;emote&gt;\n :&lt;emote\n\n Example:\n emote /me smiles at /peter\n emote /me points to /box and /lever.\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdEmote.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -429,7 +429,7 @@ looks and what actions is available.</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['ex', 'examine', 'e', 'unfocus']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['e', 'examine', 'ex', 'unfocus']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -458,7 +458,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ex examine e unfocus', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' ex examine e unfocus', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus &lt;obj&gt;\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'e examine ex unfocus', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' e examine ex unfocus', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus &lt;obj&gt;\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -520,7 +520,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdGet.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['i', 'give', 'inventory', 'inv']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGet.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['inventory', 'inv', 'give', 'i']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGet.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
@ -544,7 +544,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdGet.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'i give inventory inv', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' i give inventory inv', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGet.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'inventory inv give i', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' inventory inv give i', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGet.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -684,7 +684,7 @@ try to influence the other part in the deal.</p>
<dl class="py attribute">
<dt id="evennia.contrib.game_systems.barter.barter.CmdStatus.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['offers', 'deal']</em><a class="headerlink" href="#evennia.contrib.game_systems.barter.barter.CmdStatus.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['deal', 'offers']</em><a class="headerlink" href="#evennia.contrib.game_systems.barter.barter.CmdStatus.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -710,7 +710,7 @@ try to influence the other part in the deal.</p>
<dl class="py attribute">
<dt id="evennia.contrib.game_systems.barter.barter.CmdStatus.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'offers deal', 'category': 'trading', 'key': 'status', 'no_prefix': ' offers deal', 'tags': '', 'text': &quot;\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n &quot;}</em><a class="headerlink" href="#evennia.contrib.game_systems.barter.barter.CmdStatus.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'deal offers', 'category': 'trading', 'key': 'status', 'no_prefix': ' deal offers', 'tags': '', 'text': &quot;\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n &quot;}</em><a class="headerlink" href="#evennia.contrib.game_systems.barter.barter.CmdStatus.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -631,7 +631,7 @@ inv</p>
<dl class="py attribute">
<dt id="evennia.contrib.game_systems.clothing.clothing.CmdInventory.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['i', 'inv']</em><a class="headerlink" href="#evennia.contrib.game_systems.clothing.clothing.CmdInventory.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['inv', 'i']</em><a class="headerlink" href="#evennia.contrib.game_systems.clothing.clothing.CmdInventory.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -662,7 +662,7 @@ inv</p>
<dl class="py attribute">
<dt id="evennia.contrib.game_systems.clothing.clothing.CmdInventory.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}</em><a class="headerlink" href="#evennia.contrib.game_systems.clothing.clothing.CmdInventory.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}</em><a class="headerlink" href="#evennia.contrib.game_systems.clothing.clothing.CmdInventory.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -573,7 +573,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.game_systems.turnbattle.tb_basic.CmdPass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['hold', 'wait']</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_basic.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['wait', 'hold']</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_basic.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -594,7 +594,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.game_systems.turnbattle.tb_basic.CmdPass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_basic.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_basic.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -690,7 +690,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.game_systems.turnbattle.tb_equip.CmdPass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['hold', 'wait']</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_equip.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['wait', 'hold']</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_equip.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -711,7 +711,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.game_systems.turnbattle.tb_equip.CmdPass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_equip.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_equip.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -724,7 +724,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.game_systems.turnbattle.tb_items.CmdPass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['hold', 'wait']</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_items.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['wait', 'hold']</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_items.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -745,7 +745,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.game_systems.turnbattle.tb_items.CmdPass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_items.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_items.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -596,7 +596,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.game_systems.turnbattle.tb_magic.CmdPass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['hold', 'wait']</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_magic.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['wait', 'hold']</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_magic.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -617,7 +617,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.game_systems.turnbattle.tb_magic.CmdPass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_magic.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_magic.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -1023,7 +1023,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.game_systems.turnbattle.tb_range.CmdPass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['hold', 'wait']</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_range.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['wait', 'hold']</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_range.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -1044,7 +1044,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.game_systems.turnbattle.tb_range.CmdPass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_range.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.game_systems.turnbattle.tb_range.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -279,7 +279,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt id="evennia.contrib.grid.extended_room.extended_room.CmdExtendedRoomLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.contrib.grid.extended_room.extended_room.CmdExtendedRoomLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.contrib.grid.extended_room.extended_room.CmdExtendedRoomLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -299,7 +299,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt id="evennia.contrib.grid.extended_room.extended_room.CmdExtendedRoomLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look &lt;obj&gt;\n look &lt;room detail&gt;\n look *&lt;account&gt;\n\n Observes your location, details at your location or objects in your vicinity.\n '}</em><a class="headerlink" href="#evennia.contrib.grid.extended_room.extended_room.CmdExtendedRoomLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look &lt;obj&gt;\n look &lt;room detail&gt;\n look *&lt;account&gt;\n\n Observes your location, details at your location or objects in your vicinity.\n '}</em><a class="headerlink" href="#evennia.contrib.grid.extended_room.extended_room.CmdExtendedRoomLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -700,7 +700,7 @@ a different language.</p>
<dl class="py attribute">
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.CmdSay.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = [&quot;'&quot;, '&quot;']</em><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.CmdSay.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['&quot;', &quot;'&quot;]</em><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.CmdSay.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -731,7 +731,7 @@ a different language.</p>
<dl class="py attribute">
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.CmdSay.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '\' &quot;', 'category': 'general', 'key': 'say', 'no_prefix': ' \' &quot;', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say &lt;message&gt;\n\n Talk to those in your current location.\n '}</em><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.CmdSay.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&quot; \'', 'category': 'general', 'key': 'say', 'no_prefix': ' &quot; \'', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say &lt;message&gt;\n\n Talk to those in your current location.\n '}</em><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.CmdSay.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -84,7 +84,7 @@ such as when closing the lid and un-blinding a character.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['push', 'press button', 'press']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['press', 'press button', 'push']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -113,7 +113,7 @@ check if the lid is open or closed.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push press button press', 'category': 'general', 'key': 'push button', 'no_prefix': ' push press button press', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'press press button push', 'category': 'general', 'key': 'push button', 'no_prefix': ' press press button push', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -183,7 +183,7 @@ check if the lid is open or closed.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['smash lid', 'break lid', 'smash']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['smash lid', 'smash', 'break lid']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -210,7 +210,7 @@ break.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'smash lid break lid smash', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' smash lid break lid smash', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'smash lid smash break lid', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' smash lid smash break lid', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -310,7 +310,7 @@ be mutually exclusive.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['push', 'press button', 'press']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['press', 'press button', 'push']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -339,7 +339,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push press button press', 'category': 'general', 'key': 'push button', 'no_prefix': ' push press button press', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'press press button push', 'category': 'general', 'key': 'push button', 'no_prefix': ' press press button push', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -437,7 +437,7 @@ be mutually exclusive.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['examine', 'get', 'l', 'ex', 'listen', 'feel']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['feel', 'ex', 'listen', 'l', 'get', 'examine']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -463,7 +463,7 @@ be mutually exclusive.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'examine get l ex listen feel', 'category': 'general', 'key': 'look', 'no_prefix': ' examine get l ex listen feel', 'tags': '', 'text': &quot;\n Looking around in darkness\n\n Usage:\n look &lt;obj&gt;\n\n ... not that there's much to see in the dark.\n\n &quot;}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'feel ex listen l get examine', 'category': 'general', 'key': 'look', 'no_prefix': ' feel ex listen l get examine', 'tags': '', 'text': &quot;\n Looking around in darkness\n\n Usage:\n look &lt;obj&gt;\n\n ... not that there's much to see in the dark.\n\n &quot;}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -364,7 +364,7 @@ of the object. We overload it with our own version.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdLight.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['burn', 'light']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdLight.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['light', 'burn']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdLight.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -391,7 +391,7 @@ to sit on a “lightable” object, we operate only on self.obj.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdLight.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'burn light', 'category': 'tutorialworld', 'key': 'on', 'no_prefix': ' burn light', 'tags': '', 'text': '\n Creates light where there was none. Something to burn.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdLight.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'light burn', 'category': 'tutorialworld', 'key': 'on', 'no_prefix': ' light burn', 'tags': '', 'text': '\n Creates light where there was none. Something to burn.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdLight.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -495,7 +495,7 @@ shift green root up/down</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['push', 'shiftroot', 'move', 'pull']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['pull', 'move', 'push', 'shiftroot']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -531,7 +531,7 @@ yellow/green - horizontal roots</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push shiftroot move pull', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' push shiftroot move pull', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'pull move push shiftroot', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' pull move push shiftroot', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -548,7 +548,7 @@ yellow/green - horizontal roots</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdPressButton.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['push button', 'press button', 'button']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdPressButton.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['button', 'press button', 'push button']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdPressButton.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -574,7 +574,7 @@ yellow/green - horizontal roots</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdPressButton.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push button press button button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' push button press button button', 'tags': '', 'text': '\n Presses a button.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdPressButton.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'button press button push button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' button press button push button', 'tags': '', 'text': '\n Presses a button.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdPressButton.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -718,7 +718,7 @@ parry - forgoes your attack but will make you harder to hit on next</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['bash', 'hit', 'defend', 'fight', 'thrust', 'stab', 'slash', 'kill', 'chop', 'parry', 'pierce']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['bash', 'kill', 'slash', 'parry', 'stab', 'defend', 'pierce', 'thrust', 'chop', 'hit', 'fight']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -744,7 +744,7 @@ parry - forgoes your attack but will make you harder to hit on next</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'bash hit defend fight thrust stab slash kill chop parry pierce', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' bash hit defend fight thrust stab slash kill chop parry pierce', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab &lt;enemy&gt;\n slash &lt;enemy&gt;\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'bash kill slash parry stab defend pierce thrust chop hit fight', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' bash kill slash parry stab defend pierce thrust chop hit fight', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab &lt;enemy&gt;\n slash &lt;enemy&gt;\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -187,7 +187,7 @@ code except for adding in the details.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -202,7 +202,7 @@ code except for adding in the details.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look &lt;obj&gt;\n look &lt;room detail&gt;\n look *&lt;account&gt;\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at &quot;details&quot; in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look &lt;obj&gt;\n look &lt;room detail&gt;\n look *&lt;account&gt;\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at &quot;details&quot; in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -868,7 +868,7 @@ to find something.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.rooms.CmdLookDark.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'search', 'fiddle', 'feel', 'feel around']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdLookDark.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['feel', 'l', 'feel around', 'fiddle', 'search']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdLookDark.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -896,7 +896,7 @@ random chance of eventually finding a light source.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.rooms.CmdLookDark.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l search fiddle feel feel around', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' l search fiddle feel feel around', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdLookDark.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'feel l feel around fiddle search', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' feel l feel around fiddle search', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdLookDark.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -175,6 +175,34 @@ up in one easily separated category.</p>
<li><p><strong>category</strong> (<em>str</em>) Limit the search to a particular help topic</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> An iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.help.manager.HelpEntryManager.create_help">
<code class="sig-name descname">create_help</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">entrytext</span></em>, <em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">'General'</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">aliases</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/help/manager.html#HelpEntryManager.create_help"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.help.manager.HelpEntryManager.create_help" title="Permalink to this definition"></a></dt>
<dd><p>Create a static help entry in the help database. Note that Command
help entries are dynamic and directly taken from the __doc__
entries of the command. The database-stored help entries are
intended for more general help on the game, more extensive info,
in-game setting information and so on.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>key</strong> (<em>str</em>) The name of the help entry.</p></li>
<li><p><strong>entrytext</strong> (<em>str</em>) The body of te help entry</p></li>
<li><p><strong>category</strong> (<em>str</em><em>, </em><em>optional</em>) The help category of the entry.</p></li>
<li><p><strong>locks</strong> (<em>str</em><em>, </em><em>optional</em>) A lockstring to restrict access.</p></li>
<li><p><strong>aliases</strong> (<em>list of str</em><em>, </em><em>optional</em>) List of alternative (likely shorter) keynames.</p></li>
<li><p><strong>tags</strong> (<em>lst</em><em>, </em><em>optional</em>) List of tags or tuples <strong>(tag, category)</strong>.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>help (HelpEntry)</em> A newly created help entry.</p>
</dd>
</dl>
</dd></dl>

View file

@ -59,7 +59,7 @@ and manipulating Objects directly from the database.</p>
lists of Typeclasses, whereas Django-general methods will return
Querysets or database objects).</p>
<p>dbref (converter)
get_id (alias: dbref_search)
dbref_search
get_dbref_range
object_totals
typeclass_search
@ -149,8 +149,12 @@ objects.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>matches (query)</em> Objects fullfilling both the <strong>attribute_name</strong> and
<strong>attribute_value</strong> criterions.</p>
<dd class="field-even"><p><p><em>Queryset</em> </p>
<dl class="simple">
<dt>Iterable with 0, 1 or more matches fullfilling both the <strong>attribute_name</strong> and</dt><dd><p><strong>attribute_value</strong> criterions.</p>
</dd>
</dl>
</p>
</dd>
</dl>
<p class="rubric">Notes</p>
@ -189,6 +193,9 @@ cannot be indexed, searching by Attribute key is to be preferred whenever possib
<li><p><strong>typeclasses</strong> (<em>list</em><em>, </em><em>optional</em>) List of typeclass-path strings to restrict matches with</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> Iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
@ -205,7 +212,7 @@ to exclude from the match.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>contents (query)</em> Matching contents, without excludeobj, if given.</p>
<dd class="field-even"><p><em>Queryset</em> Iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
@ -225,7 +232,7 @@ using <strong>evennia.utils.utils.string_partial_matching</strong> algorithm.</p
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>matches (query)</em> A list of matches of length 0, 1 or more.</p>
<dd class="field-even"><p><em>Queryset</em> An iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
@ -403,6 +410,44 @@ arguments. <strong>None</strong> if an error was encountered.</p>
db_account field set.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.objects.manager.ObjectDBManager.create_object">
<code class="sig-name descname">create_object</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">key</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">location</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">home</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">permissions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">aliases</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">destination</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">report_to</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nohome</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nattributes</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/objects/manager.html#ObjectDBManager.create_object"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.objects.manager.ObjectDBManager.create_object" title="Permalink to this definition"></a></dt>
<dd><p>Create a new in-game object.</p>
<dl class="field-list simple">
<dt class="field-odd">Keyword Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>typeclass</strong> (<em>class</em><em> or </em><em>str</em>) Class or python path to a typeclass.</p></li>
<li><p><strong>key</strong> (<em>str</em>) Name of the new object. If not set, a name of
<strong>#dbref</strong> will be set.</p></li>
<li><p><strong>location</strong> (<em>Object</em><em> or </em><em>str</em>) Obj or #dbref to use as the location of the new object.</p></li>
<li><p><strong>home</strong> (<em>Object</em><em> or </em><em>str</em>) Obj or #dbref to use as the objects home location.</p></li>
<li><p><strong>permissions</strong> (<a class="reference internal" href="evennia.contrib.game_systems.barter.barter.html#evennia.contrib.game_systems.barter.barter.TradeHandler.list" title="evennia.contrib.game_systems.barter.barter.TradeHandler.list"><em>list</em></a>) A list of permission strings or tuples (permstring, category).</p></li>
<li><p><strong>locks</strong> (<em>str</em>) one or more lockstrings, separated by semicolons.</p></li>
<li><p><strong>aliases</strong> (<a class="reference internal" href="evennia.contrib.game_systems.barter.barter.html#evennia.contrib.game_systems.barter.barter.TradeHandler.list" title="evennia.contrib.game_systems.barter.barter.TradeHandler.list"><em>list</em></a>) A list of alternative keys or tuples (aliasstring, category).</p></li>
<li><p><strong>tags</strong> (<a class="reference internal" href="evennia.contrib.game_systems.barter.barter.html#evennia.contrib.game_systems.barter.barter.TradeHandler.list" title="evennia.contrib.game_systems.barter.barter.TradeHandler.list"><em>list</em></a>) List of tag keys or tuples (tagkey, category) or (tagkey, category, data).</p></li>
<li><p><strong>destination</strong> (<em>Object</em><em> or </em><em>str</em>) Obj or #dbref to use as an Exits target.</p></li>
<li><p><strong>report_to</strong> (<em>Object</em>) The object to return error messages to.</p></li>
<li><p><strong>nohome</strong> (<em>bool</em>) This allows the creation of objects without a
default home location; only used when creating the default
location itself or during unittests.</p></li>
<li><p><strong>attributes</strong> (<a class="reference internal" href="evennia.contrib.game_systems.barter.barter.html#evennia.contrib.game_systems.barter.barter.TradeHandler.list" title="evennia.contrib.game_systems.barter.barter.TradeHandler.list"><em>list</em></a>) Tuples on the form (key, value) or (key, value, category),
(key, value, lockstring) or (key, value, lockstring, default_access).
to set as Attributes on the new object.</p></li>
<li><p><strong>nattributes</strong> (<a class="reference internal" href="evennia.contrib.game_systems.barter.barter.html#evennia.contrib.game_systems.barter.barter.TradeHandler.list" title="evennia.contrib.game_systems.barter.barter.TradeHandler.list"><em>list</em></a>) Non-persistent tuples on the form (key, value). Note that
adding this rarely makes sense since this data will not survive a reload.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>object (Object)</em> A newly created object of the given typeclass.</p>
</dd>
<dt class="field-odd">Raises</dt>
<dd class="field-odd"><p><a class="reference internal" href="evennia.objects.models.html#evennia.objects.models.ObjectDB.DoesNotExist" title="evennia.objects.models.ObjectDB.DoesNotExist"><strong>ObjectDB.DoesNotExist</strong></a> If trying to create an Object with
<strong>location</strong> or <strong>home</strong> that cant be found.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</section>

View file

@ -59,7 +59,7 @@ and manipulating Scripts directly from the database.</p>
lists of Typeclasses, whereas Django-general methods will return
Querysets or database objects).</p>
<p>dbref (converter)
get_id (or dbref_search)
dbref_search
get_dbref_range
object_totals
typeclass_search
@ -140,6 +140,9 @@ on a timer.</p></li>
<li><p><strong>typeclass</strong> (<em>class</em><em> or </em><em>str</em>) Typeclass or path to typeclass.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> An iterable with 0, 1 or more results.</p>
</dd>
</dl>
</dd></dl>
@ -158,6 +161,9 @@ on a timer.</p></li>
<li><p><strong>typeclass</strong> (<em>class</em><em> or </em><em>str</em>) Typeclass or path to typeclass.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> An iterable with 0, 1 or more results.</p>
</dd>
</dl>
</dd></dl>
@ -186,6 +192,51 @@ the original.</p></li>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.scripts.manager.ScriptDBManager.create_script">
<code class="sig-name descname">create_script</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">key</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">obj</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">account</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">interval</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">start_delay</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">repeats</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">persistent</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">autostart</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">report_to</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">desc</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/manager.html#ScriptDBManager.create_script"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.manager.ScriptDBManager.create_script" title="Permalink to this definition"></a></dt>
<dd><p>Create a new script. All scripts are a combination of a database
object that communicates with the database, and an typeclass that
decorates the database object into being different types of
scripts. Its behaviour is similar to the game objects except
scripts has a time component and are more limited in scope.</p>
<dl class="field-list simple">
<dt class="field-odd">Keyword Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>typeclass</strong> (<em>class</em><em> or </em><em>str</em>) Class or python path to a typeclass.</p></li>
<li><p><strong>key</strong> (<em>str</em>) Name of the new object. If not set, a name of
#dbref will be set.</p></li>
<li><p><strong>obj</strong> (<em>Object</em>) The entity on which this Script sits. If this
is <strong>None</strong>, we are creating a “global” script.</p></li>
<li><p><strong>account</strong> (<em>Account</em>) The account on which this Script sits. It is
exclusiv to <strong>obj</strong>.</p></li>
<li><p><strong>locks</strong> (<em>str</em>) one or more lockstrings, separated by semicolons.</p></li>
<li><p><strong>interval</strong> (<em>int</em>) The triggering interval for this Script, in
seconds. If unset, the Script will not have a timing
component.</p></li>
<li><p><strong>start_delay</strong> (<em>bool</em>) If <strong>True</strong>, will wait <strong>interval</strong> seconds
before triggering the first time.</p></li>
<li><p><strong>repeats</strong> (<em>int</em>) The number of times to trigger before stopping.
If unset, will repeat indefinitely.</p></li>
<li><p><strong>persistent</strong> (<em>bool</em>) If this Script survives a server shutdown
or not (all Scripts will survive a reload).</p></li>
<li><p><strong>autostart</strong> (<em>bool</em>) If this Script will start immediately when
created or if the <strong>start</strong> method must be called explicitly.</p></li>
<li><p><strong>report_to</strong> (<em>Object</em>) The object to return error messages to.</p></li>
<li><p><strong>desc</strong> (<em>str</em>) Optional description of script</p></li>
<li><p><strong>tags</strong> (<a class="reference internal" href="evennia.contrib.game_systems.barter.barter.html#evennia.contrib.game_systems.barter.barter.TradeHandler.list" title="evennia.contrib.game_systems.barter.barter.TradeHandler.list"><em>list</em></a>) List of tags or tuples (tag, category).</p></li>
<li><p><strong>attributes</strong> (<a class="reference internal" href="evennia.contrib.game_systems.barter.barter.html#evennia.contrib.game_systems.barter.barter.TradeHandler.list" title="evennia.contrib.game_systems.barter.barter.TradeHandler.list"><em>list</em></a>) List if tuples (key, value) or (key, value, category)
(key, value, lockstring) or (key, value, lockstring, default_access).</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>script (obj)</em> An instance of the script created</p>
</dd>
</dl>
<p>See evennia.scripts.manager for methods to manipulate existing
scripts in the database.</p>
</dd></dl>
</dd></dl>
</section>

View file

@ -100,7 +100,7 @@ non-persistent tickers must be killed.</p>
<dl class="py method">
<dt id="evennia.scripts.monitorhandler.MonitorHandler.add">
<code class="sig-name descname">add</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em>, <em class="sig-param"><span class="n">fieldname</span></em>, <em class="sig-param"><span class="n">callback</span></em>, <em class="sig-param"><span class="n">idstring</span><span class="o">=</span><span class="default_value">''</span></em>, <em class="sig-param"><span class="n">persistent</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.add" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">add</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em>, <em class="sig-param"><span class="n">fieldname</span></em>, <em class="sig-param"><span class="n">callback</span></em>, <em class="sig-param"><span class="n">idstring</span><span class="o">=</span><span class="default_value">''</span></em>, <em class="sig-param"><span class="n">persistent</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.add" title="Permalink to this definition"></a></dt>
<dd><p>Add monitoring to a given field or Attribute. A field must
be specified with the full db_* name or it will be assumed
to be an Attribute (so <strong>db_key</strong>, not just <strong>key</strong>).</p>
@ -116,6 +116,9 @@ where kwargs holds keys fieldname and obj.</p></li>
of the same field and object.</p></li>
<li><p><strong>persistent</strong> (<em>bool</em><em>, </em><em>optional</em>) If False, the monitor will survive
a server reload but not a cold restart. This is default.</p></li>
<li><p><strong>category</strong> (<em>str</em><em>, </em><em>optional</em>) This is only used if <strong>fieldname</strong> refers to
an Attribute (i.e. it does not start with <strong>db_</strong>). You must specify this
if you want to target an Attribute with a category.</p></li>
</ul>
</dd>
<dt class="field-even">Keyword Arguments</dt>
@ -132,7 +135,7 @@ all kwargs must be possible to pickle!</p></li>
<dl class="py method">
<dt id="evennia.scripts.monitorhandler.MonitorHandler.remove">
<code class="sig-name descname">remove</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em>, <em class="sig-param"><span class="n">fieldname</span></em>, <em class="sig-param"><span class="n">idstring</span><span class="o">=</span><span class="default_value">''</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.remove" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">remove</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em>, <em class="sig-param"><span class="n">fieldname</span></em>, <em class="sig-param"><span class="n">idstring</span><span class="o">=</span><span class="default_value">''</span></em>, <em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/scripts/monitorhandler.html#MonitorHandler.remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.scripts.monitorhandler.MonitorHandler.remove" title="Permalink to this definition"></a></dt>
<dd><p>Remove a monitor.</p>
</dd></dl>

View file

@ -361,7 +361,7 @@ either a string #N or an integer N.</p>
<dd class="field-odd"><p><strong>dbref</strong> (<em>str</em><em> or </em><em>int</em>) The id to search for.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>object (TypedObject)</em> The matched object.</p>
<dd class="field-even"><p><em>Queryset</em> Queryset with 0 or 1 match.</p>
</dd>
</dl>
</dd></dl>

View file

@ -53,7 +53,7 @@ utils.search module and allows you to do the shorter <strong>create.object()</st
objects already existing in the database.</p>
<dl class="py function">
<dt id="evennia.utils.create.create_object">
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_object</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">key</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">location</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">home</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">permissions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">aliases</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">destination</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">report_to</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nohome</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nattributes</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/create.html#create_object"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.create.create_object" title="Permalink to this definition"></a></dt>
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_object</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">key</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">location</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">home</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">permissions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">aliases</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">destination</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">report_to</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nohome</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">nattributes</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.utils.create.create_object" title="Permalink to this definition"></a></dt>
<dd><p>Create a new in-game object.</p>
<dl class="field-list simple">
<dt class="field-odd">Keyword Arguments</dt>
@ -91,7 +91,7 @@ adding this rarely makes sense since this data will not survive a reload.</p></l
<dl class="py function">
<dt id="evennia.utils.create.create_script">
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_script</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">key</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">obj</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">account</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">interval</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">start_delay</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">repeats</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">persistent</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">autostart</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">report_to</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">desc</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/create.html#create_script"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.create.create_script" title="Permalink to this definition"></a></dt>
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_script</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">key</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">obj</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">account</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">interval</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">start_delay</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">repeats</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">persistent</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">autostart</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">report_to</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">desc</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.utils.create.create_script" title="Permalink to this definition"></a></dt>
<dd><p>Create a new script. All scripts are a combination of a database
object that communicates with the database, and an typeclass that
decorates the database object into being different types of
@ -136,7 +136,7 @@ scripts in the database.</p>
<dl class="py function">
<dt id="evennia.utils.create.create_help_entry">
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_help_entry</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">entrytext</span></em>, <em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">'General'</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">aliases</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/create.html#create_help_entry"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.create.create_help_entry" title="Permalink to this definition"></a></dt>
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_help_entry</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">entrytext</span></em>, <em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">'General'</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">aliases</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.utils.create.create_help_entry" title="Permalink to this definition"></a></dt>
<dd><p>Create a static help entry in the help database. Note that Command
help entries are dynamic and directly taken from the __doc__
entries of the command. The database-stored help entries are
@ -161,7 +161,7 @@ in-game setting information and so on.</p>
<dl class="py function">
<dt id="evennia.utils.create.create_message">
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_message</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">senderobj</span></em>, <em class="sig-param"><span class="n">message</span></em>, <em class="sig-param"><span class="n">receivers</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">header</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/create.html#create_message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.create.create_message" title="Permalink to this definition"></a></dt>
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_message</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">senderobj</span></em>, <em class="sig-param"><span class="n">message</span></em>, <em class="sig-param"><span class="n">receivers</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">header</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.utils.create.create_message" title="Permalink to this definition"></a></dt>
<dd><p>Create a new communication Msg. Msgs represent a unit of
database-persistent communication between entites.</p>
<dl class="field-list simple">
@ -190,7 +190,7 @@ its up to the command definitions to limit this as desired.</p>
<dl class="py function">
<dt id="evennia.utils.create.create_channel">
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_channel</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">aliases</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">desc</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">keep_log</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/create.html#create_channel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.create.create_channel" title="Permalink to this definition"></a></dt>
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_channel</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">aliases</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">desc</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">keep_log</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.utils.create.create_channel" title="Permalink to this definition"></a></dt>
<dd><p>Create A communication Channel. A Channel serves as a central hub
for distributing Msgs to groups of people without specifying the
receivers explicitly. Instead accounts may connect to the channel
@ -220,7 +220,7 @@ often used).</p></li>
<dl class="py function">
<dt id="evennia.utils.create.create_account">
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_account</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">email</span></em>, <em class="sig-param"><span class="n">password</span></em>, <em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">is_superuser</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">permissions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">report_to</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/create.html#create_account"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.create.create_account" title="Permalink to this definition"></a></dt>
<code class="sig-prename descclassname">evennia.utils.create.</code><code class="sig-name descname">create_account</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span></em>, <em class="sig-param"><span class="n">email</span></em>, <em class="sig-param"><span class="n">password</span></em>, <em class="sig-param"><span class="n">typeclass</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">is_superuser</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">locks</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">permissions</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">tags</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">attributes</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">report_to</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.utils.create.create_account" title="Permalink to this definition"></a></dt>
<dd><p>This creates a new account.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>

View file

@ -277,7 +277,7 @@ indentation.</p>
<dl class="py attribute">
<dt id="evennia.utils.eveditor.CmdEditorGroup.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = [':', ':&lt;', ':w', ':x', ':uu', ':!', ':wq', ':y', ':i', ':=', ':q', ':fd', ':dd', ':u', ':I', ':j', '::', ':UU', ':s', ':fi', ':dw', ':r', ':echo', ':q!', ':f', ':h', ':DD', ':p', ':A', ':S', ':&gt;', ':::']</em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = [':u', ':p', ':x', ':q', ':DD', ':fd', ':f', ':&lt;', ':S', ':j', ':A', ':s', ':fi', ':::', ':h', ':q!', ':=', ':echo', ':', '::', ':dd', ':dw', ':i', ':UU', ':!', ':uu', ':w', ':r', ':I', ':wq', ':&gt;', ':y']</em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -305,7 +305,7 @@ efficient presentation.</p>
<dl class="py attribute">
<dt id="evennia.utils.eveditor.CmdEditorGroup.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': ': :&lt; :w :x :uu :! :wq :y :i := :q :fd :dd :u :I :j :: :UU :s :fi :dw :r :echo :q! :f :h :DD :p :A :S :&gt; :::', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' : :&lt; :w :x :uu :! :wq :y :i := :q :fd :dd :u :I :j :: :UU :s :fi :dw :r :echo :q! :f :h :DD :p :A :S :&gt; :::', 'tags': '', 'text': '\n Commands for the editor\n '}</em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': ':u :p :x :q :DD :fd :f :&lt; :S :j :A :s :fi ::: :h :q! := :echo : :: :dd :dw :i :UU :! :uu :w :r :I :wq :&gt; :y', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :u :p :x :q :DD :fd :f :&lt; :S :j :A :s :fi ::: :h :q! := :echo : :: :dd :dw :i :UU :! :uu :w :r :I :wq :&gt; :y', 'tags': '', 'text': '\n Commands for the editor\n '}</em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -947,7 +947,7 @@ single question.</p>
<dl class="py attribute">
<dt id="evennia.utils.evmenu.CmdYesNoQuestion.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['no', 'a', 'yes', 'y', '__nomatch_command', 'n', 'abort']</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['no', '__nomatch_command', 'y', 'abort', 'n', 'yes', 'a']</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -973,7 +973,7 @@ single question.</p>
<dl class="py attribute">
<dt id="evennia.utils.evmenu.CmdYesNoQuestion.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'no a yes y __nomatch_command n abort', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' no a yes y __nomatch_command n abort', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'no __nomatch_command y abort n yes a', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' no __nomatch_command y abort n yes a', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -78,7 +78,7 @@ the <strong>caller.msg()</strong> construct every time the page is updated.</p>
<dl class="py attribute">
<dt id="evennia.utils.evmore.CmdMore.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['a', 'quit', 'previous', 'top', 'end', 't', 'p', 'n', 'q', 'e', 'next', 'abort']</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['q', 't', 'quit', 'top', 'abort', 'n', 'e', 'previous', 'end', 'p', 'next', 'a']</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -104,7 +104,7 @@ the <strong>caller.msg()</strong> construct every time the page is updated.</p>
<dl class="py attribute">
<dt id="evennia.utils.evmore.CmdMore.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'a quit previous top end t p n q e next abort', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' a quit previous top end t p n q e next abort', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'q t quit top abort n e previous end p next a', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' q t quit top abort n e previous end p next a', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -121,6 +121,9 @@ otherwise also match also keys containing the <strong>ostring</strong>
accounts of this typeclass.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> A queryset (an iterable) with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
@ -139,6 +142,9 @@ on a timer.</p></li>
<li><p><strong>typeclass</strong> (<em>class</em><em> or </em><em>str</em>) Typeclass or path to typeclass.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> An iterable with 0, 1 or more results.</p>
</dd>
</dl>
</dd></dl>
@ -162,7 +168,7 @@ always gives only one match.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> Message matches.</p>
<dd class="field-even"><p><em>Queryset</em> Iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
@ -179,6 +185,9 @@ always gives only one match.</p></li>
case sensitive) match.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> Iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>
@ -193,6 +202,9 @@ case sensitive) match.</p></li>
<li><p><strong>category</strong> (<em>str</em>) Limit the search to a particular help topic</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>Queryset</em> An iterable with 0, 1 or more matches.</p>
</dd>
</dl>
</dd></dl>

View file

@ -119,21 +119,6 @@ loaded once).</p>
<dd><p>alias of <a class="reference internal" href="evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript" title="evennia.scripts.scripts.DefaultScript"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.scripts.scripts.DefaultScript</span></code></a></p>
</dd></dl>
<dl class="py method">
<dt id="evennia.utils.test_resources.EvenniaTestMixin.save_backups">
<code class="sig-name descname">save_backups</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/test_resources.html#EvenniaTestMixin.save_backups"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.test_resources.EvenniaTestMixin.save_backups" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.utils.test_resources.EvenniaTestMixin.restore_backups">
<code class="sig-name descname">restore_backups</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/test_resources.html#EvenniaTestMixin.restore_backups"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.test_resources.EvenniaTestMixin.restore_backups" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.utils.test_resources.EvenniaTestMixin.mock_sessions">
<code class="sig-name descname">mock_sessions</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/test_resources.html#EvenniaTestMixin.mock_sessions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.test_resources.EvenniaTestMixin.mock_sessions" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.utils.test_resources.EvenniaTestMixin.create_accounts">
<code class="sig-name descname">create_accounts</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/test_resources.html#EvenniaTestMixin.create_accounts"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.test_resources.EvenniaTestMixin.create_accounts" title="Permalink to this definition"></a></dt>

View file

@ -438,8 +438,6 @@
</li>
</ul></li>
<li><a href="api/evennia.server.sessionhandler.html#evennia.server.sessionhandler.ServerSessionHandler.account_count">account_count() (evennia.server.sessionhandler.ServerSessionHandler method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.account_mode">account_mode (evennia.commands.default.building.CmdExamine attribute)</a>
</li>
<li><a href="api/evennia.accounts.manager.html#evennia.accounts.manager.AccountDBManager.account_search">account_search() (evennia.accounts.manager.AccountDBManager method)</a>
</li>
@ -1311,10 +1309,10 @@
</li>
<li><a href="api/evennia.utils.evtable.html#evennia.utils.evtable.ANSITextWrapper">ANSITextWrapper (class in evennia.utils.evtable)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.web.api.root.html#evennia.web.api.root.APIRootRouter">APIRootRouter (class in evennia.web.api.root)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.web.api.root.html#evennia.web.api.root.APIRootRouter.APIRootView">APIRootView (evennia.web.api.root.APIRootRouter attribute)</a>
</li>
<li><a href="api/evennia.web.utils.adminsite.html#evennia.web.utils.adminsite.EvenniaAdminSite.app_order">app_order (evennia.web.utils.adminsite.EvenniaAdminSite attribute)</a>
@ -3351,14 +3349,14 @@
</li>
<li><a href="api/evennia.contrib.game_systems.mail.mail.html#evennia.contrib.game_systems.mail.mail.CmdMailCharacter">CmdMailCharacter (class in evennia.contrib.game_systems.mail.mail)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.contrib.grid.xyzgrid.commands.html#evennia.contrib.grid.xyzgrid.commands.CmdMap">CmdMap (class in evennia.contrib.grid.xyzgrid.commands)</a>
</li>
<li><a href="api/evennia.contrib.rpg.rpsystem.rpsystem.html#evennia.contrib.rpg.rpsystem.rpsystem.CmdMask">CmdMask (class in evennia.contrib.rpg.rpsystem.rpsystem)</a>
</li>
<li><a href="api/evennia.contrib.tutorials.tutorial_world.mob.html#evennia.contrib.tutorials.tutorial_world.mob.CmdMobOnOff">CmdMobOnOff (class in evennia.contrib.tutorials.tutorial_world.mob)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.utils.evmore.html#evennia.utils.evmore.CmdMore">CmdMore (class in evennia.utils.evmore)</a>
</li>
<li><a href="api/evennia.utils.evmore.html#evennia.utils.evmore.CmdMoreExit">CmdMoreExit (class in evennia.utils.evmore)</a>
@ -3963,8 +3961,12 @@
<li><a href="api/evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript.create">(evennia.scripts.scripts.DefaultScript class method)</a>
</li>
</ul></li>
<li><a href="api/evennia.utils.create.html#evennia.utils.create.create_account">create_account() (in module evennia.utils.create)</a>
<li><a href="api/evennia.accounts.manager.html#evennia.accounts.manager.AccountDBManager.create_account">create_account() (evennia.accounts.manager.AccountDBManager method)</a>
<ul>
<li><a href="api/evennia.utils.create.html#evennia.utils.create.create_account">(in module evennia.utils.create)</a>
</li>
</ul></li>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.create_accounts">create_accounts() (evennia.utils.test_resources.EvenniaTestMixin method)</a>
</li>
<li><a href="api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.IAttributeBackend.create_attribute">create_attribute() (evennia.typeclasses.attributes.IAttributeBackend method)</a>
@ -3972,6 +3974,8 @@
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannel.create_channel">create_channel() (evennia.commands.default.comms.CmdChannel method)</a>
<ul>
<li><a href="api/evennia.comms.managers.html#evennia.comms.managers.ChannelDBManager.create_channel">(evennia.comms.managers.ChannelDBManager method)</a>
</li>
<li><a href="api/evennia.utils.create.html#evennia.utils.create.create_channel">(in module evennia.utils.create)</a>
</li>
</ul></li>
@ -3996,16 +4000,24 @@
<li><a href="api/evennia.contrib.full_systems.evscaperoom.utils.html#evennia.contrib.full_systems.evscaperoom.utils.create_fantasy_word">create_fantasy_word() (in module evennia.contrib.full_systems.evscaperoom.utils)</a>
</li>
<li><a href="api/evennia.server.evennia_launcher.html#evennia.server.evennia_launcher.create_game_directory">create_game_directory() (in module evennia.server.evennia_launcher)</a>
</li>
<li><a href="api/evennia.help.manager.html#evennia.help.manager.HelpEntryManager.create_help">create_help() (evennia.help.manager.HelpEntryManager method)</a>
</li>
<li><a href="api/evennia.utils.create.html#evennia.utils.create.create_help_entry">create_help_entry() (in module evennia.utils.create)</a>
</li>
<li><a href="api/evennia.commands.cmdparser.html#evennia.commands.cmdparser.create_match">create_match() (in module evennia.commands.cmdparser)</a>
</li>
<li><a href="api/evennia.utils.create.html#evennia.utils.create.create_message">create_message() (in module evennia.utils.create)</a>
<li><a href="api/evennia.comms.managers.html#evennia.comms.managers.MsgManager.create_message">create_message() (evennia.comms.managers.MsgManager method)</a>
<ul>
<li><a href="api/evennia.utils.create.html#evennia.utils.create.create_message">(in module evennia.utils.create)</a>
</li>
</ul></li>
<li><a href="api/evennia.contrib.full_systems.evscaperoom.state.html#evennia.contrib.full_systems.evscaperoom.state.BaseState.create_object">create_object() (evennia.contrib.full_systems.evscaperoom.state.BaseState method)</a>
<ul>
<li><a href="api/evennia.objects.manager.html#evennia.objects.manager.ObjectDBManager.create_object">(evennia.objects.manager.ObjectDBManager method)</a>
</li>
<li><a href="api/evennia.utils.create.html#evennia.utils.create.create_object">(in module evennia.utils.create)</a>
</li>
</ul></li>
@ -4017,9 +4029,11 @@
</li>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.create_rooms">create_rooms() (evennia.utils.test_resources.EvenniaTestMixin method)</a>
</li>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.create_script">create_script() (evennia.utils.test_resources.EvenniaTestMixin method)</a>
<li><a href="api/evennia.scripts.manager.html#evennia.scripts.manager.ScriptDBManager.create_script">create_script() (evennia.scripts.manager.ScriptDBManager method)</a>
<ul>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.create_script">(evennia.utils.test_resources.EvenniaTestMixin method)</a>
</li>
<li><a href="api/evennia.utils.create.html#evennia.utils.create.create_script">(in module evennia.utils.create)</a>
</li>
</ul></li>
@ -7768,6 +7782,12 @@
<li><a href="api/evennia.prototypes.prototypes.html#evennia.prototypes.prototypes.format_available_protfuncs">format_available_protfuncs() (in module evennia.prototypes.prototypes)</a>
</li>
<li><a href="api/evennia.contrib.base_systems.ingame_python.callbackhandler.html#evennia.contrib.base_systems.ingame_python.callbackhandler.CallbackHandler.format_callback">format_callback() (evennia.contrib.base_systems.ingame_python.callbackhandler.CallbackHandler static method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_channel_account_subs">format_channel_account_subs() (evennia.commands.default.building.CmdExamine method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_channel_object_subs">format_channel_object_subs() (evennia.commands.default.building.CmdExamine method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_channel_sub_totals">format_channel_sub_totals() (evennia.commands.default.building.CmdExamine method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_chars">format_chars() (evennia.commands.default.building.CmdExamine method)</a>
</li>
@ -7808,6 +7828,12 @@
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_output">format_output() (evennia.commands.default.building.CmdExamine method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_permissions">format_permissions() (evennia.commands.default.building.CmdExamine method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_script_desc">format_script_desc() (evennia.commands.default.building.CmdExamine method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_script_is_persistent">format_script_is_persistent() (evennia.commands.default.building.CmdExamine method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_script_timer_data">format_script_timer_data() (evennia.commands.default.building.CmdExamine method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_scripts">format_scripts() (evennia.commands.default.building.CmdExamine method)</a>
</li>
@ -12428,8 +12454,6 @@
<li><a href="api/evennia.contrib.tutorials.tutorial_world.mob.html#evennia.contrib.tutorials.tutorial_world.mob.Mob.MultipleObjectsReturned">Mob.MultipleObjectsReturned</a>
</li>
<li><a href="api/evennia.contrib.tutorials.tutorial_world.mob.html#evennia.contrib.tutorials.tutorial_world.mob.MobCmdSet">MobCmdSet (class in evennia.contrib.tutorials.tutorial_world.mob)</a>
</li>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.mock_sessions">mock_sessions() (evennia.utils.test_resources.EvenniaTestMixin method)</a>
</li>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.mockdeferLater">mockdeferLater() (in module evennia.utils.test_resources)</a>
</li>
@ -13763,6 +13787,8 @@
<li><a href="api/evennia.objects.models.html#evennia.objects.models.ObjectDB.object_subscription_set">object_subscription_set (evennia.objects.models.ObjectDB attribute)</a>
</li>
<li><a href="api/evennia.typeclasses.managers.html#evennia.typeclasses.managers.TypedObjectManager.object_totals">object_totals() (evennia.typeclasses.managers.TypedObjectManager method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.object_type">object_type (evennia.commands.default.building.CmdExamine attribute)</a>
</li>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTest.object_typeclass">object_typeclass (evennia.utils.test_resources.EvenniaTest attribute)</a>
@ -15298,8 +15324,6 @@
<li><a href="api/evennia.scripts.tickerhandler.html#evennia.scripts.tickerhandler.TickerHandler.restore">(evennia.scripts.tickerhandler.TickerHandler method)</a>
</li>
</ul></li>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.restore_backups">restore_backups() (evennia.utils.test_resources.EvenniaTestMixin method)</a>
</li>
<li><a href="api/evennia.commands.command.html#evennia.commands.command.Command.retain_instance">retain_instance (evennia.commands.command.Command attribute)</a>
</li>
<li><a href="api/evennia.contrib.full_systems.evscaperoom.objects.html#evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.return_appearance">return_appearance() (evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject method)</a>
@ -15504,8 +15528,6 @@
<li><a href="api/evennia.web.admin.server.html#evennia.web.admin.server.ServerConfigAdmin.save_as">(evennia.web.admin.server.ServerConfigAdmin attribute)</a>
</li>
</ul></li>
<li><a href="api/evennia.utils.test_resources.html#evennia.utils.test_resources.EvenniaTestMixin.save_backups">save_backups() (evennia.utils.test_resources.EvenniaTestMixin method)</a>
</li>
<li><a href="api/evennia.utils.eveditor.html#evennia.utils.eveditor.EvEditor.save_buffer">save_buffer() (evennia.utils.eveditor.EvEditor method)</a>
</li>
<li><a href="api/evennia.commands.command.html#evennia.commands.command.Command.save_for_next">save_for_next (evennia.commands.command.Command attribute)</a>
@ -16332,10 +16354,10 @@
<li><a href="api/evennia.server.portal.webclient_ajax.html#evennia.server.portal.webclient_ajax.AjaxWebClientSession.send_text">(evennia.server.portal.webclient_ajax.AjaxWebClientSession method)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.comms.comms.html#evennia.comms.comms.DefaultChannel.send_to_online_only">send_to_online_only (evennia.comms.comms.DefaultChannel attribute)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.GrapevineClient.send_unsubscribe">send_unsubscribe() (evennia.server.portal.grapevine.GrapevineClient method)</a>
</li>
<li><a href="api/evennia.web.admin.comms.html#evennia.web.admin.comms.MsgAdmin.sender">sender() (evennia.web.admin.comms.MsgAdmin method)</a>
@ -17110,6 +17132,8 @@
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdDestroy.switch_options">(evennia.commands.default.building.CmdDestroy attribute)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdDig.switch_options">(evennia.commands.default.building.CmdDig attribute)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.switch_options">(evennia.commands.default.building.CmdExamine attribute)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdFind.switch_options">(evennia.commands.default.building.CmdFind attribute)</a>
</li>
@ -18429,6 +18453,8 @@
<li><a href="api/evennia.contrib.base_systems.custom_gametime.tests.html#evennia.contrib.base_systems.custom_gametime.tests.TestCustomGameTime.test_schedule">test_schedule() (evennia.contrib.base_systems.custom_gametime.tests.TestCustomGameTime method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_script">test_script() (evennia.commands.default.tests.TestBuilding method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_script_multi_delete">test_script_multi_delete() (evennia.commands.default.tests.TestBuilding method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystem.test_scripts">test_scripts() (evennia.commands.default.tests.TestSystem method)</a>
</li>

Binary file not shown.

File diff suppressed because one or more lines are too long