evennia/docs/1.0-dev/_modules/evennia/commands/default/account.html
Evennia docbuilder action fd31020c21 Updated HTML docs.
2022-11-15 20:29:38 +00:00

1162 lines
No EOL
150 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>evennia.commands.default.account &#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>
<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.commands.default.account</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="document">
<div class="documentwrapper">
<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="account.html">1.0-dev (develop branch)</a></li>
<ul>
<li><a href="../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
</ul>
</div>
</div>
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for evennia.commands.default.account</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Account (OOC) commands. These are stored on the Account object</span>
<span class="sd">and self.caller is thus always an Account, not an Object/Character.</span>
<span class="sd">These commands go in the AccountCmdset and are accessible also</span>
<span class="sd">when puppeting a Character (although with lower priority)</span>
<span class="sd">These commands use the account_caller property which tells the command</span>
<span class="sd">parent (MuxCommand, usually) to setup caller correctly. They use</span>
<span class="sd">self.account to make sure to always use the account object rather than</span>
<span class="sd">self.caller (which change depending on the level you are calling from)</span>
<span class="sd">The property self.character can be used to access the character when</span>
<span class="sd">these commands are triggered with a connected character (such as the</span>
<span class="sd">case of the `ooc` command), it is None if we are OOC.</span>
<span class="sd">Note that under MULTISESSION_MODE &gt; 2, Account commands should use</span>
<span class="sd">self.msg() and similar methods to reroute returns to the correct</span>
<span class="sd">method. Otherwise all text will be returned to all connected sessions.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="kn">from</span> <span class="nn">codecs</span> <span class="kn">import</span> <span class="n">lookup</span> <span class="k">as</span> <span class="n">codecs_lookup</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">evennia.server.sessionhandler</span> <span class="kn">import</span> <span class="n">SESSIONS</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">create</span><span class="p">,</span> <span class="n">logger</span><span class="p">,</span> <span class="n">search</span><span class="p">,</span> <span class="n">utils</span>
<span class="n">COMMAND_DEFAULT_CLASS</span> <span class="o">=</span> <span class="n">utils</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">_MAX_NR_CHARACTERS</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">MAX_NR_CHARACTERS</span>
<span class="n">_AUTO_PUPPET_ON_LOGIN</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">AUTO_PUPPET_ON_LOGIN</span>
<span class="c1"># limit symbol import for API</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;CmdOOCLook&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdIC&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdOOC&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdPassword&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdQuit&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdCharCreate&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdOption&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdSessions&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdWho&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdColorTest&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdQuell&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdCharDelete&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdStyle&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">class</span> <span class="nc">MuxAccountLookCommand</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Custom parent (only) parsing for OOC looking, sets a &quot;playable&quot;</span>
<span class="sd"> property on the command based on the parsing.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<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="sd">&quot;&quot;&quot;Custom parsing&quot;&quot;&quot;</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">parse</span><span class="p">()</span>
<span class="n">playable</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_playable_characters</span>
<span class="k">if</span> <span class="n">playable</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># clean up list if character object was deleted in between</span>
<span class="k">if</span> <span class="kc">None</span> <span class="ow">in</span> <span class="n">playable</span><span class="p">:</span>
<span class="n">playable</span> <span class="o">=</span> <span class="p">[</span><span class="n">character</span> <span class="k">for</span> <span class="n">character</span> <span class="ow">in</span> <span class="n">playable</span> <span class="k">if</span> <span class="n">character</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">db</span><span class="o">.</span><span class="n">_playable_characters</span> <span class="o">=</span> <span class="n">playable</span>
<span class="c1"># store playable property</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">playable</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">((</span><span class="n">utils</span><span class="o">.</span><span class="n">to_str</span><span class="p">(</span><span class="n">char</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()),</span> <span class="n">char</span><span class="p">)</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">playable</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="kc">None</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">playable</span> <span class="o">=</span> <span class="n">playable</span>
<span class="c1"># Obs - these are all intended to be stored on the Account, and as such,</span>
<span class="c1"># use self.account instead of self.caller, just to be sure. Also self.msg()</span>
<span class="c1"># is used to make sure returns go to the right session</span>
<span class="c1"># note that this is inheriting from MuxAccountLookCommand,</span>
<span class="c1"># and has the .playable property.</span>
<div class="viewcode-block" id="CmdOOCLook"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdOOCLook">[docs]</a><span class="k">class</span> <span class="nc">CmdOOCLook</span><span class="p">(</span><span class="n">MuxAccountLookCommand</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> look while out-of-character</span>
<span class="sd"> Usage:</span>
<span class="sd"> look</span>
<span class="sd"> Look in the ooc state.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># This is an OOC version of the look command. Since a</span>
<span class="c1"># Account doesn&#39;t have an in-game existence, there is no</span>
<span class="c1"># concept of location or &quot;self&quot;. If we are controlling</span>
<span class="c1"># a character, pass control over to normal look.</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;look&quot;</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;l&quot;</span><span class="p">,</span> <span class="s2">&quot;ls&quot;</span><span class="p">]</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:all()&quot;</span>
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">&quot;General&quot;</span>
<span class="c1"># this is used by the parent</span>
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
<div class="viewcode-block" id="CmdOOCLook.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdOOCLook.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 the ooc look command&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">puppet</span><span class="p">:</span>
<span class="c1"># if we are puppeting, this is only reached in the case the that puppet</span>
<span class="c1"># has no look command on its own.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You currently have no ability to look around.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">_AUTO_PUPPET_ON_LOGIN</span> <span class="ow">and</span> <span class="n">_MAX_NR_CHARACTERS</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">playable</span><span class="p">:</span>
<span class="c1"># only one exists and is allowed - simplify</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You are out-of-character (OOC).</span><span class="se">\n</span><span class="s2">Use |wic|n to get back into the game.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># call on-account look helper method</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">account</span><span class="o">.</span><span class="n">at_look</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">playable</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">))</span></div></div>
<div class="viewcode-block" id="CmdCharCreate"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdCharCreate">[docs]</a><span class="k">class</span> <span class="nc">CmdCharCreate</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> create a new character</span>
<span class="sd"> Usage:</span>
<span class="sd"> charcreate &lt;charname&gt; [= desc]</span>
<span class="sd"> Create a new character, optionally giving it a description. You</span>
<span class="sd"> may use upper-case letters in the name - you will nevertheless</span>
<span class="sd"> always be able to access your character using lower-case letters</span>
<span class="sd"> if you want.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;charcreate&quot;</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:pperm(Player)&quot;</span>
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">&quot;General&quot;</span>
<span class="c1"># this is used by the parent</span>
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
<div class="viewcode-block" id="CmdCharCreate.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdCharCreate.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;create the new character&quot;&quot;&quot;</span>
<span class="n">account</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</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="s2">&quot;Usage: charcreate &lt;charname&gt; [= description]&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span>
<span class="n">desc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
<span class="k">if</span> <span class="n">_MAX_NR_CHARACTERS</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="p">(</span>
<span class="ow">not</span> <span class="n">account</span><span class="o">.</span><span class="n">is_superuser</span>
<span class="ow">and</span> <span class="ow">not</span> <span class="n">account</span><span class="o">.</span><span class="n">check_permstring</span><span class="p">(</span><span class="s2">&quot;Developer&quot;</span><span class="p">)</span>
<span class="ow">and</span> <span class="n">account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_playable_characters</span>
<span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_playable_characters</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="n">_MAX_NR_CHARACTERS</span>
<span class="p">):</span>
<span class="n">plural</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">_MAX_NR_CHARACTERS</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="s2">&quot;s&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;You may only have a maximum of </span><span class="si">{</span><span class="n">_MAX_NR_CHARACTERS</span><span class="si">}</span><span class="s2"> character</span><span class="si">{</span><span class="n">plural</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
<span class="k">return</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="n">typeclass</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_CHARACTER_TYPECLASS</span>
<span class="k">if</span> <span class="n">ObjectDB</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</span><span class="o">=</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">db_key__iexact</span><span class="o">=</span><span class="n">key</span><span class="p">):</span>
<span class="c1"># check if this Character already exists. Note that we are only</span>
<span class="c1"># searching the base character typeclass here, not any child</span>
<span class="c1"># classes.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;|rA character named &#39;|w</span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">|r&#39; already exists.|n&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># create the character</span>
<span class="n">start_location</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">get_id</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">START_LOCATION</span><span class="p">)</span>
<span class="n">default_home</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">get_id</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">permissions</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">PERMISSION_ACCOUNT_DEFAULT</span>
<span class="n">new_character</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="n">typeclass</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">start_location</span><span class="p">,</span> <span class="n">home</span><span class="o">=</span><span class="n">default_home</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="c1"># only allow creator (and developers) to puppet this char</span>
<span class="n">new_character</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="s2">&quot;puppet:id(</span><span class="si">%i</span><span class="s2">) or pid(</span><span class="si">%i</span><span class="s2">) or perm(Developer) or pperm(Developer);delete:id(</span><span class="si">%i</span><span class="s2">) or&quot;</span>
<span class="s2">&quot; perm(Admin)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">new_character</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">account</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">account</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_playable_characters</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">new_character</span><span class="p">)</span>
<span class="k">if</span> <span class="n">desc</span><span class="p">:</span>
<span class="n">new_character</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span> <span class="o">=</span> <span class="n">desc</span>
<span class="k">elif</span> <span class="ow">not</span> <span class="n">new_character</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">new_character</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span> <span class="o">=</span> <span class="s2">&quot;This is a character.&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Created new character </span><span class="si">{</span><span class="n">new_character</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">. Use |wic </span><span class="si">{</span><span class="n">new_character</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">|n to enter the game as this character.&quot;</span>
<span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_sec</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Character Created: </span><span class="si">{</span><span class="n">new_character</span><span class="si">}</span><span class="s2"> (Caller: </span><span class="si">{</span><span class="n">account</span><span class="si">}</span><span class="s2">, IP: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">address</span><span class="si">}</span><span class="s2">).&quot;</span>
<span class="p">)</span></div></div>
<div class="viewcode-block" id="CmdCharDelete"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdCharDelete">[docs]</a><span class="k">class</span> <span class="nc">CmdCharDelete</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> delete a character - this cannot be undone!</span>
<span class="sd"> Usage:</span>
<span class="sd"> chardelete &lt;charname&gt;</span>
<span class="sd"> Permanently deletes one of your characters.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;chardelete&quot;</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:pperm(Player)&quot;</span>
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">&quot;General&quot;</span>
<div class="viewcode-block" id="CmdCharDelete.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdCharDelete.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;delete the character&quot;&quot;&quot;</span>
<span class="n">account</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</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="s2">&quot;Usage: chardelete &lt;charactername&gt;&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># use the playable_characters list to search</span>
<span class="n">match</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">char</span>
<span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">utils</span><span class="o">.</span><span class="n">make_iter</span><span class="p">(</span><span class="n">account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_playable_characters</span><span class="p">)</span>
<span class="k">if</span> <span class="n">char</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">match</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="s2">&quot;You have no such character to delete.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">match</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</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="s2">&quot;Aborting - there are two characters with the same name. Ask an admin to delete the&quot;</span>
<span class="s2">&quot; right one.&quot;</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="k">else</span><span class="p">:</span> <span class="c1"># one match</span>
<span class="kn">from</span> <span class="nn">evennia.utils.evmenu</span> <span class="kn">import</span> <span class="n">get_input</span>
<span class="k">def</span> <span class="nf">_callback</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">callback_prompt</span><span class="p">,</span> <span class="n">result</span><span class="p">):</span>
<span class="k">if</span> <span class="n">result</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;yes&quot;</span><span class="p">:</span>
<span class="c1"># only take action</span>
<span class="n">delobj</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_char_to_delete</span>
<span class="n">key</span> <span class="o">=</span> <span class="n">delobj</span><span class="o">.</span><span class="n">key</span>
<span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_playable_characters</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">pc</span> <span class="k">for</span> <span class="n">pc</span> <span class="ow">in</span> <span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_playable_characters</span> <span class="k">if</span> <span class="n">pc</span> <span class="o">!=</span> <span class="n">delobj</span>
<span class="p">]</span>
<span class="n">delobj</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">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Character &#39;</span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">&#39; was permanently deleted.&quot;</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_sec</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Character Deleted: </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2"> (Caller: </span><span class="si">{</span><span class="n">account</span><span class="si">}</span><span class="s2">, IP: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">address</span><span class="si">}</span><span class="s2">).&quot;</span>
<span class="p">)</span>
<span class="k">else</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="s2">&quot;Deletion was aborted.&quot;</span><span class="p">)</span>
<span class="k">del</span> <span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_char_to_delete</span>
<span class="n">match</span> <span class="o">=</span> <span class="n">match</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">account</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_char_to_delete</span> <span class="o">=</span> <span class="n">match</span>
<span class="c1"># Return if caller has no permission to delete this</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">match</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">account</span><span class="p">,</span> <span class="s2">&quot;delete&quot;</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="s2">&quot;You do not have permission to delete this character.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="n">prompt</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;|rThis will permanently destroy &#39;</span><span class="si">%s</span><span class="s2">&#39;. This cannot be undone.|n Continue yes/[no]?&quot;</span>
<span class="p">)</span>
<span class="n">get_input</span><span class="p">(</span><span class="n">account</span><span class="p">,</span> <span class="n">prompt</span> <span class="o">%</span> <span class="n">match</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">_callback</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="CmdIC"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdIC">[docs]</a><span class="k">class</span> <span class="nc">CmdIC</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> control an object you have permission to puppet</span>
<span class="sd"> Usage:</span>
<span class="sd"> ic &lt;character&gt;</span>
<span class="sd"> Go in-character (IC) as a given Character.</span>
<span class="sd"> This will attempt to &quot;become&quot; a different object assuming you have</span>
<span class="sd"> the right to do so. Note that it&#39;s the ACCOUNT character that puppets</span>
<span class="sd"> characters/objects and which needs to have the correct permission!</span>
<span class="sd"> You cannot become an object that is already controlled by another</span>
<span class="sd"> account. In principle &lt;character&gt; can be any in-game object as long</span>
<span class="sd"> as you the account have access right to puppet it.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;ic&quot;</span>
<span class="c1"># lock must be all() for different puppeted objects to access it.</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:all()&quot;</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="s2">&quot;puppet&quot;</span>
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">&quot;General&quot;</span>
<span class="c1"># this is used by the parent</span>
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
<div class="viewcode-block" id="CmdIC.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdIC.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;</span>
<span class="sd"> Main puppet method</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">account</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span>
<span class="n">session</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span>
<span class="n">new_character</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">character_candidates</span> <span class="o">=</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">args</span><span class="p">:</span>
<span class="n">character_candidates</span> <span class="o">=</span> <span class="p">[</span><span class="n">account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_last_puppet</span><span class="p">]</span> <span class="k">if</span> <span class="n">account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_last_puppet</span> <span class="k">else</span> <span class="p">[]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">character_candidates</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="s2">&quot;Usage: ic &lt;character&gt;&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># argument given</span>
<span class="k">if</span> <span class="n">account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_playable_characters</span><span class="p">:</span>
<span class="c1"># look at the playable_characters list first</span>
<span class="n">character_candidates</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span>
<span class="n">account</span><span class="o">.</span><span class="n">search</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">,</span>
<span class="n">candidates</span><span class="o">=</span><span class="n">account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_playable_characters</span><span class="p">,</span>
<span class="n">search_object</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">quiet</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">account</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">check_lockstring</span><span class="p">(</span><span class="n">account</span><span class="p">,</span> <span class="s2">&quot;perm(Builder)&quot;</span><span class="p">):</span>
<span class="c1"># builders and higher should be able to puppet more than their</span>
<span class="c1"># playable characters.</span>
<span class="k">if</span> <span class="n">session</span><span class="o">.</span><span class="n">puppet</span><span class="p">:</span>
<span class="c1"># start by local search - this helps to avoid the user</span>
<span class="c1"># getting locked into their playable characters should one</span>
<span class="c1"># happen to be named the same as another. We replace the suggestion</span>
<span class="c1"># from playable_characters here - this allows builders to puppet objects</span>
<span class="c1"># with the same name as their playable chars should it be necessary</span>
<span class="c1"># (by going to the same location).</span>
<span class="n">character_candidates</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">char</span>
<span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">session</span><span class="o">.</span><span class="n">puppet</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="n">quiet</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">if</span> <span class="n">char</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">account</span><span class="p">,</span> <span class="s2">&quot;puppet&quot;</span><span class="p">)</span>
<span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">character_candidates</span><span class="p">:</span>
<span class="c1"># fall back to global search only if Builder+ has no</span>
<span class="c1"># playable_characers in list and is not standing in a room</span>
<span class="c1"># with a matching char.</span>
<span class="n">character_candidates</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span>
<span class="p">[</span>
<span class="n">char</span>
<span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">search</span><span class="o">.</span><span class="n">object_search</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">)</span>
<span class="k">if</span> <span class="n">char</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">account</span><span class="p">,</span> <span class="s2">&quot;puppet&quot;</span><span class="p">)</span>
<span class="p">]</span>
<span class="p">)</span>
<span class="c1"># handle possible candidates</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">character_candidates</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="s2">&quot;That is not a valid character choice.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">character_candidates</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</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="s2">&quot;Multiple targets with the same name:</span><span class="se">\n</span><span class="s2"> </span><span class="si">%s</span><span class="s2">&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="s2">&quot;</span><span class="si">%s</span><span class="s2">(#</span><span class="si">%s</span><span class="s2">)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">id</span><span class="p">)</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">character_candidates</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">new_character</span> <span class="o">=</span> <span class="n">character_candidates</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="c1"># do the puppet puppet</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">account</span><span class="o">.</span><span class="n">puppet_object</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="n">new_character</span><span class="p">)</span>
<span class="n">account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_last_puppet</span> <span class="o">=</span> <span class="n">new_character</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_sec</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Puppet Success: (Caller: </span><span class="si">{</span><span class="n">account</span><span class="si">}</span><span class="s2">, Target: </span><span class="si">{</span><span class="n">new_character</span><span class="si">}</span><span class="s2">, IP: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">address</span><span class="si">}</span><span class="s2">).&quot;</span>
<span class="p">)</span>
<span class="k">except</span> <span class="ne">RuntimeError</span> <span class="k">as</span> <span class="n">exc</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="sa">f</span><span class="s2">&quot;|rYou cannot become |C</span><span class="si">{</span><span class="n">new_character</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">|n: </span><span class="si">{</span><span class="n">exc</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_sec</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Puppet Failed: %s (Caller: </span><span class="si">{</span><span class="n">account</span><span class="si">}</span><span class="s2">, Target: </span><span class="si">{</span><span class="n">new_character</span><span class="si">}</span><span class="s2">, IP: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">address</span><span class="si">}</span><span class="s2">).&quot;</span>
<span class="p">)</span></div></div>
<span class="c1"># note that this is inheriting from MuxAccountLookCommand,</span>
<span class="c1"># and as such has the .playable property.</span>
<div class="viewcode-block" id="CmdOOC"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdOOC">[docs]</a><span class="k">class</span> <span class="nc">CmdOOC</span><span class="p">(</span><span class="n">MuxAccountLookCommand</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> stop puppeting and go ooc</span>
<span class="sd"> Usage:</span>
<span class="sd"> ooc</span>
<span class="sd"> Go out-of-character (OOC).</span>
<span class="sd"> This will leave your current character and put you in a incorporeal OOC state.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;ooc&quot;</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:pperm(Player)&quot;</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="s2">&quot;unpuppet&quot;</span>
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">&quot;General&quot;</span>
<span class="c1"># this is used by the parent</span>
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
<div class="viewcode-block" id="CmdOOC.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdOOC.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 function&quot;&quot;&quot;</span>
<span class="n">account</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span>
<span class="n">session</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span>
<span class="n">old_char</span> <span class="o">=</span> <span class="n">account</span><span class="o">.</span><span class="n">get_puppet</span><span class="p">(</span><span class="n">session</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">old_char</span><span class="p">:</span>
<span class="n">string</span> <span class="o">=</span> <span class="s2">&quot;You are already OOC.&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
<span class="k">return</span>
<span class="n">account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_last_puppet</span> <span class="o">=</span> <span class="n">old_char</span>
<span class="c1"># disconnect</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">account</span><span class="o">.</span><span class="n">unpuppet_object</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">msg</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">|GYou go OOC.|n</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">_AUTO_PUPPET_ON_LOGIN</span> <span class="ow">and</span> <span class="n">_MAX_NR_CHARACTERS</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">playable</span><span class="p">:</span>
<span class="c1"># only one character exists and is allowed - simplify</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You are out-of-character (OOC).</span><span class="se">\n</span><span class="s2">Use |wic|n to get back into the game.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">account</span><span class="o">.</span><span class="n">at_look</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">playable</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="n">session</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">RuntimeError</span> <span class="k">as</span> <span class="n">exc</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="sa">f</span><span class="s2">&quot;|rCould not unpuppet from |c</span><span class="si">{</span><span class="n">old_char</span><span class="si">}</span><span class="s2">|n: </span><span class="si">{</span><span class="n">exc</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="CmdSessions"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdSessions">[docs]</a><span class="k">class</span> <span class="nc">CmdSessions</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> check your connected session(s)</span>
<span class="sd"> Usage:</span>
<span class="sd"> sessions</span>
<span class="sd"> Lists the sessions currently connected to your account.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;sessions&quot;</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:all()&quot;</span>
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">&quot;General&quot;</span>
<span class="c1"># this is used by the parent</span>
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
<div class="viewcode-block" id="CmdSessions.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdSessions.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 function&quot;&quot;&quot;</span>
<span class="n">account</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span>
<span class="n">sessions</span> <span class="o">=</span> <span class="n">account</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
<span class="n">table</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;|wsessid&quot;</span><span class="p">,</span> <span class="s2">&quot;|wprotocol&quot;</span><span class="p">,</span> <span class="s2">&quot;|whost&quot;</span><span class="p">,</span> <span class="s2">&quot;|wpuppet/character&quot;</span><span class="p">,</span> <span class="s2">&quot;|wlocation&quot;</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">sess</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">sessions</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">sessid</span><span class="p">):</span>
<span class="n">char</span> <span class="o">=</span> <span class="n">account</span><span class="o">.</span><span class="n">get_puppet</span><span class="p">(</span><span class="n">sess</span><span class="p">)</span>
<span class="n">table</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span>
<span class="nb">str</span><span class="p">(</span><span class="n">sess</span><span class="o">.</span><span class="n">sessid</span><span class="p">),</span>
<span class="nb">str</span><span class="p">(</span><span class="n">sess</span><span class="o">.</span><span class="n">protocol_key</span><span class="p">),</span>
<span class="nb">isinstance</span><span class="p">(</span><span class="n">sess</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)</span> <span class="ow">and</span> <span class="n">sess</span><span class="o">.</span><span class="n">address</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="n">sess</span><span class="o">.</span><span class="n">address</span><span class="p">,</span>
<span class="n">char</span> <span class="ow">and</span> <span class="nb">str</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;None&quot;</span><span class="p">,</span>
<span class="n">char</span> <span class="ow">and</span> <span class="nb">str</span><span class="p">(</span><span class="n">char</span><span class="o">.</span><span class="n">location</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;N/A&quot;</span><span class="p">,</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="sa">f</span><span class="s2">&quot;|wYour current session(s):|n</span><span class="se">\n</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="CmdWho"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdWho">[docs]</a><span class="k">class</span> <span class="nc">CmdWho</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> list who is currently online</span>
<span class="sd"> Usage:</span>
<span class="sd"> who</span>
<span class="sd"> doing</span>
<span class="sd"> Shows who is currently online. Doing is an alias that limits info</span>
<span class="sd"> also for those with all permissions.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;who&quot;</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="s2">&quot;doing&quot;</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:all()&quot;</span>
<span class="c1"># this is used by the parent</span>
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
<div class="viewcode-block" id="CmdWho.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdWho.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;</span>
<span class="sd"> Get all connected accounts by polling session.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">account</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span>
<span class="n">session_list</span> <span class="o">=</span> <span class="n">SESSIONS</span><span class="o">.</span><span class="n">get_sessions</span><span class="p">()</span>
<span class="n">session_list</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">session_list</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">o</span><span class="p">:</span> <span class="n">o</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">cmdstring</span> <span class="o">==</span> <span class="s2">&quot;doing&quot;</span><span class="p">:</span>
<span class="n">show_session_data</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">show_session_data</span> <span class="o">=</span> <span class="n">account</span><span class="o">.</span><span class="n">check_permstring</span><span class="p">(</span><span class="s2">&quot;Developer&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">account</span><span class="o">.</span><span class="n">check_permstring</span><span class="p">(</span>
<span class="s2">&quot;Admins&quot;</span>
<span class="p">)</span>
<span class="n">naccounts</span> <span class="o">=</span> <span class="n">SESSIONS</span><span class="o">.</span><span class="n">account_count</span><span class="p">()</span>
<span class="k">if</span> <span class="n">show_session_data</span><span class="p">:</span>
<span class="c1"># privileged info</span>
<span class="n">table</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;|wAccount Name&quot;</span><span class="p">,</span>
<span class="s2">&quot;|wOn for&quot;</span><span class="p">,</span>
<span class="s2">&quot;|wIdle&quot;</span><span class="p">,</span>
<span class="s2">&quot;|wPuppeting&quot;</span><span class="p">,</span>
<span class="s2">&quot;|wRoom&quot;</span><span class="p">,</span>
<span class="s2">&quot;|wCmds&quot;</span><span class="p">,</span>
<span class="s2">&quot;|wProtocol&quot;</span><span class="p">,</span>
<span class="s2">&quot;|wHost&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">session</span> <span class="ow">in</span> <span class="n">session_list</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">session</span><span class="o">.</span><span class="n">logged_in</span><span class="p">:</span>
<span class="k">continue</span>
<span class="n">delta_cmd</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">session</span><span class="o">.</span><span class="n">cmd_last_visible</span>
<span class="n">delta_conn</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">session</span><span class="o">.</span><span class="n">conn_time</span>
<span class="n">session_account</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">get_account</span><span class="p">()</span>
<span class="n">puppet</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">get_puppet</span><span class="p">()</span>
<span class="n">location</span> <span class="o">=</span> <span class="n">puppet</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">key</span> <span class="k">if</span> <span class="n">puppet</span> <span class="ow">and</span> <span class="n">puppet</span><span class="o">.</span><span class="n">location</span> <span class="k">else</span> <span class="s2">&quot;None&quot;</span>
<span class="n">table</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span>
<span class="n">utils</span><span class="o">.</span><span class="n">crop</span><span class="p">(</span><span class="n">session_account</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">account</span><span class="p">),</span> <span class="n">width</span><span class="o">=</span><span class="mi">25</span><span class="p">),</span>
<span class="n">utils</span><span class="o">.</span><span class="n">time_format</span><span class="p">(</span><span class="n">delta_conn</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
<span class="n">utils</span><span class="o">.</span><span class="n">time_format</span><span class="p">(</span><span class="n">delta_cmd</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
<span class="n">utils</span><span class="o">.</span><span class="n">crop</span><span class="p">(</span><span class="n">puppet</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">account</span><span class="p">)</span> <span class="k">if</span> <span class="n">puppet</span> <span class="k">else</span> <span class="s2">&quot;None&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">25</span><span class="p">),</span>
<span class="n">utils</span><span class="o">.</span><span class="n">crop</span><span class="p">(</span><span class="n">location</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">25</span><span class="p">),</span>
<span class="n">session</span><span class="o">.</span><span class="n">cmd_total</span><span class="p">,</span>
<span class="n">session</span><span class="o">.</span><span class="n">protocol_key</span><span class="p">,</span>
<span class="nb">isinstance</span><span class="p">(</span><span class="n">session</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">)</span> <span class="ow">and</span> <span class="n">session</span><span class="o">.</span><span class="n">address</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">or</span> <span class="n">session</span><span class="o">.</span><span class="n">address</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># unprivileged</span>
<span class="n">table</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;|wAccount name&quot;</span><span class="p">,</span> <span class="s2">&quot;|wOn for&quot;</span><span class="p">,</span> <span class="s2">&quot;|wIdle&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">session</span> <span class="ow">in</span> <span class="n">session_list</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">session</span><span class="o">.</span><span class="n">logged_in</span><span class="p">:</span>
<span class="k">continue</span>
<span class="n">delta_cmd</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">session</span><span class="o">.</span><span class="n">cmd_last_visible</span>
<span class="n">delta_conn</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">session</span><span class="o">.</span><span class="n">conn_time</span>
<span class="n">session_account</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">get_account</span><span class="p">()</span>
<span class="n">table</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span>
<span class="n">utils</span><span class="o">.</span><span class="n">crop</span><span class="p">(</span><span class="n">session_account</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">account</span><span class="p">),</span> <span class="n">width</span><span class="o">=</span><span class="mi">25</span><span class="p">),</span>
<span class="n">utils</span><span class="o">.</span><span class="n">time_format</span><span class="p">(</span><span class="n">delta_conn</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
<span class="n">utils</span><span class="o">.</span><span class="n">time_format</span><span class="p">(</span><span class="n">delta_cmd</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
<span class="p">)</span>
<span class="n">is_one</span> <span class="o">=</span> <span class="n">naccounts</span> <span class="o">==</span> <span class="mi">1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="s2">&quot;|wAccounts:|n</span><span class="se">\n</span><span class="si">%s</span><span class="se">\n</span><span class="si">%s</span><span class="s2"> unique account</span><span class="si">%s</span><span class="s2"> logged in.&quot;</span>
<span class="o">%</span> <span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="s2">&quot;One&quot;</span> <span class="k">if</span> <span class="n">is_one</span> <span class="k">else</span> <span class="n">naccounts</span><span class="p">,</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">is_one</span> <span class="k">else</span> <span class="s2">&quot;s&quot;</span><span class="p">)</span>
<span class="p">)</span></div></div>
<div class="viewcode-block" id="CmdOption"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdOption">[docs]</a><span class="k">class</span> <span class="nc">CmdOption</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Set an account option</span>
<span class="sd"> Usage:</span>
<span class="sd"> option[/save] [name = value]</span>
<span class="sd"> Switches:</span>
<span class="sd"> save - Save the current option settings for future logins.</span>
<span class="sd"> clear - Clear the saved options.</span>
<span class="sd"> This command allows for viewing and setting client interface</span>
<span class="sd"> settings. Note that saved options may not be able to be used if</span>
<span class="sd"> later connecting with a client with different capabilities.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;option&quot;</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="s2">&quot;options&quot;</span>
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;save&quot;</span><span class="p">,</span> <span class="s2">&quot;clear&quot;</span><span class="p">)</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:all()&quot;</span>
<span class="c1"># this is used by the parent</span>
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
<div class="viewcode-block" id="CmdOption.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdOption.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;</span>
<span class="sd"> Implements the command</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span>
<span class="n">flags</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">protocol_flags</span>
<span class="c1"># Display current options</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
<span class="c1"># list the option settings</span>
<span class="k">if</span> <span class="s2">&quot;save&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="c1"># save all options</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_saved_protocol_flags</span> <span class="o">=</span> <span class="n">flags</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;|gSaved all options. Use option/clear to remove.|n&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="s2">&quot;clear&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="c1"># clear all saves</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_saved_protocol_flags</span> <span class="o">=</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="s2">&quot;|gCleared all saved options.&quot;</span><span class="p">)</span>
<span class="n">options</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">flags</span><span class="p">)</span> <span class="c1"># make a copy of the flag dict</span>
<span class="n">saved_options</span> <span class="o">=</span> <span class="nb">dict</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">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;_saved_protocol_flags&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="p">{}))</span>
<span class="k">if</span> <span class="s2">&quot;SCREENWIDTH&quot;</span> <span class="ow">in</span> <span class="n">options</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="s2">&quot;SCREENWIDTH&quot;</span><span class="p">])</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">options</span><span class="p">[</span><span class="s2">&quot;SCREENWIDTH&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">options</span><span class="p">[</span><span class="s2">&quot;SCREENWIDTH&quot;</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">options</span><span class="p">[</span><span class="s2">&quot;SCREENWIDTH&quot;</span><span class="p">]</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="s2">&quot;</span><span class="si">%s</span><span class="s2"> : </span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">screenid</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
<span class="k">for</span> <span class="n">screenid</span><span class="p">,</span> <span class="n">size</span> <span class="ow">in</span> <span class="n">options</span><span class="p">[</span><span class="s2">&quot;SCREENWIDTH&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="p">)</span>
<span class="k">if</span> <span class="s2">&quot;SCREENHEIGHT&quot;</span> <span class="ow">in</span> <span class="n">options</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="s2">&quot;SCREENHEIGHT&quot;</span><span class="p">])</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">options</span><span class="p">[</span><span class="s2">&quot;SCREENHEIGHT&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">options</span><span class="p">[</span><span class="s2">&quot;SCREENHEIGHT&quot;</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">options</span><span class="p">[</span><span class="s2">&quot;SCREENHEIGHT&quot;</span><span class="p">]</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="s2">&quot;</span><span class="si">%s</span><span class="s2"> : </span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">screenid</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
<span class="k">for</span> <span class="n">screenid</span><span class="p">,</span> <span class="n">size</span> <span class="ow">in</span> <span class="n">options</span><span class="p">[</span><span class="s2">&quot;SCREENHEIGHT&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="p">)</span>
<span class="n">options</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;TTYPE&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="n">header</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;Name&quot;</span><span class="p">,</span> <span class="s2">&quot;Value&quot;</span><span class="p">,</span> <span class="s2">&quot;Saved&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">saved_options</span> <span class="k">else</span> <span class="p">(</span><span class="s2">&quot;Name&quot;</span><span class="p">,</span> <span class="s2">&quot;Value&quot;</span><span class="p">)</span>
<span class="n">table</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="o">*</span><span class="n">header</span><span class="p">)</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">options</span><span class="p">):</span>
<span class="n">row</span> <span class="o">=</span> <span class="p">[</span><span class="n">key</span><span class="p">,</span> <span class="n">options</span><span class="p">[</span><span class="n">key</span><span class="p">]]</span>
<span class="k">if</span> <span class="n">saved_options</span><span class="p">:</span>
<span class="n">saved</span> <span class="o">=</span> <span class="s2">&quot; |YYes|n&quot;</span> <span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">saved_options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="n">changed</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;|y*|n&quot;</span> <span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">saved_options</span> <span class="ow">and</span> <span class="n">flags</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">!=</span> <span class="n">saved_options</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="p">)</span>
<span class="n">row</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">%s%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">saved</span><span class="p">,</span> <span class="n">changed</span><span class="p">))</span>
<span class="n">table</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span><span class="o">*</span><span class="n">row</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="sa">f</span><span class="s2">&quot;|wClient settings (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">protocol_key</span><span class="si">}</span><span class="s2">):|n</span><span class="se">\n</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">|n&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</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="s2">&quot;Usage: option [name = [value]]&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># Try to assign new values</span>
<span class="k">def</span> <span class="nf">validate_encoding</span><span class="p">(</span><span class="n">new_encoding</span><span class="p">):</span>
<span class="c1"># helper: change encoding</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">codecs_lookup</span><span class="p">(</span><span class="n">new_encoding</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">LookupError</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;The encoding &#39;|w</span><span class="si">{</span><span class="n">new_encoding</span><span class="si">}</span><span class="s2">|n&#39; is invalid. &quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">val</span>
<span class="k">def</span> <span class="nf">validate_size</span><span class="p">(</span><span class="n">new_size</span><span class="p">):</span>
<span class="k">return</span> <span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="nb">int</span><span class="p">(</span><span class="n">new_size</span><span class="p">)}</span>
<span class="k">def</span> <span class="nf">validate_bool</span><span class="p">(</span><span class="n">new_bool</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">True</span> <span class="k">if</span> <span class="n">new_bool</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;true&quot;</span><span class="p">,</span> <span class="s2">&quot;on&quot;</span><span class="p">,</span> <span class="s2">&quot;1&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="n">new_name</span><span class="p">,</span> <span class="n">new_val</span><span class="p">,</span> <span class="n">validator</span><span class="p">):</span>
<span class="c1"># helper: update property and report errors</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">old_val</span> <span class="o">=</span> <span class="n">flags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">new_name</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
<span class="n">new_val</span> <span class="o">=</span> <span class="n">validator</span><span class="p">(</span><span class="n">new_val</span><span class="p">)</span>
<span class="k">if</span> <span class="n">old_val</span> <span class="o">==</span> <span class="n">new_val</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="sa">f</span><span class="s2">&quot;Option |w</span><span class="si">{</span><span class="n">new_name</span><span class="si">}</span><span class="s2">|n was kept as &#39;|w</span><span class="si">{</span><span class="n">old_val</span><span class="si">}</span><span class="s2">|n&#39;.&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">flags</span><span class="p">[</span><span class="n">new_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_val</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Option |w</span><span class="si">{</span><span class="n">new_name</span><span class="si">}</span><span class="s2">|n was changed from &#39;|w</span><span class="si">{</span><span class="n">old_val</span><span class="si">}</span><span class="s2">|n&#39; to &#39;|w</span><span class="si">{</span><span class="n">new_val</span><span class="si">}</span><span class="s2">|n&#39;.&quot;</span>
<span class="p">)</span>
<span class="k">return</span> <span class="p">{</span><span class="n">new_name</span><span class="p">:</span> <span class="n">new_val</span><span class="p">}</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">err</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="sa">f</span><span class="s2">&quot;|rCould not set option |w</span><span class="si">{</span><span class="n">new_name</span><span class="si">}</span><span class="s2">|r:|n </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">validators</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;ANSI&quot;</span><span class="p">:</span> <span class="n">validate_bool</span><span class="p">,</span>
<span class="s2">&quot;CLIENTNAME&quot;</span><span class="p">:</span> <span class="n">utils</span><span class="o">.</span><span class="n">to_str</span><span class="p">,</span>
<span class="s2">&quot;ENCODING&quot;</span><span class="p">:</span> <span class="n">validate_encoding</span><span class="p">,</span>
<span class="s2">&quot;MCCP&quot;</span><span class="p">:</span> <span class="n">validate_bool</span><span class="p">,</span>
<span class="s2">&quot;NOGOAHEAD&quot;</span><span class="p">:</span> <span class="n">validate_bool</span><span class="p">,</span>
<span class="s2">&quot;MXP&quot;</span><span class="p">:</span> <span class="n">validate_bool</span><span class="p">,</span>
<span class="s2">&quot;NOCOLOR&quot;</span><span class="p">:</span> <span class="n">validate_bool</span><span class="p">,</span>
<span class="s2">&quot;NOPKEEPALIVE&quot;</span><span class="p">:</span> <span class="n">validate_bool</span><span class="p">,</span>
<span class="s2">&quot;OOB&quot;</span><span class="p">:</span> <span class="n">validate_bool</span><span class="p">,</span>
<span class="s2">&quot;RAW&quot;</span><span class="p">:</span> <span class="n">validate_bool</span><span class="p">,</span>
<span class="s2">&quot;SCREENHEIGHT&quot;</span><span class="p">:</span> <span class="n">validate_size</span><span class="p">,</span>
<span class="s2">&quot;SCREENWIDTH&quot;</span><span class="p">:</span> <span class="n">validate_size</span><span class="p">,</span>
<span class="s2">&quot;SCREENREADER&quot;</span><span class="p">:</span> <span class="n">validate_bool</span><span class="p">,</span>
<span class="s2">&quot;TERM&quot;</span><span class="p">:</span> <span class="n">utils</span><span class="o">.</span><span class="n">to_str</span><span class="p">,</span>
<span class="s2">&quot;UTF-8&quot;</span><span class="p">:</span> <span class="n">validate_bool</span><span class="p">,</span>
<span class="s2">&quot;XTERM256&quot;</span><span class="p">:</span> <span class="n">validate_bool</span><span class="p">,</span>
<span class="s2">&quot;INPUTDEBUG&quot;</span><span class="p">:</span> <span class="n">validate_bool</span><span class="p">,</span>
<span class="s2">&quot;FORCEDENDLINE&quot;</span><span class="p">:</span> <span class="n">validate_bool</span><span class="p">,</span>
<span class="s2">&quot;LOCALECHO&quot;</span><span class="p">:</span> <span class="n">validate_bool</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
<span class="n">val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="n">optiondict</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">if</span> <span class="n">val</span> <span class="ow">and</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">validators</span><span class="p">:</span>
<span class="n">optiondict</span> <span class="o">=</span> <span class="n">update</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">val</span><span class="p">,</span> <span class="n">validators</span><span class="p">[</span><span class="n">name</span><span class="p">])</span>
<span class="k">else</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="s2">&quot;|rNo option named &#39;|w</span><span class="si">%s</span><span class="s2">|r&#39;.&quot;</span> <span class="o">%</span> <span class="n">name</span><span class="p">)</span>
<span class="k">if</span> <span class="n">optiondict</span><span class="p">:</span>
<span class="c1"># a valid setting</span>
<span class="k">if</span> <span class="s2">&quot;save&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="c1"># save this option only</span>
<span class="n">saved_options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</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="s2">&quot;_saved_protocol_flags&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="p">{})</span>
<span class="n">saved_options</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">optiondict</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">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;_saved_protocol_flags&quot;</span><span class="p">,</span> <span class="n">saved_options</span><span class="p">)</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">optiondict</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="sa">f</span><span class="s2">&quot;|gSaved option </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">.|n&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="s2">&quot;clear&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="c1"># clear this save</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">optiondict</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">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;_saved_protocol_flags&quot;</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;|gCleared saved </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">.&quot;</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">update_flags</span><span class="p">(</span><span class="o">**</span><span class="n">optiondict</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="CmdPassword"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdPassword">[docs]</a><span class="k">class</span> <span class="nc">CmdPassword</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> change your password</span>
<span class="sd"> Usage:</span>
<span class="sd"> password &lt;old password&gt; = &lt;new password&gt;</span>
<span class="sd"> Changes your password. Make sure to pick a safe one.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;password&quot;</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:pperm(Player)&quot;</span>
<span class="c1"># this is used by the parent</span>
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
<div class="viewcode-block" id="CmdPassword.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdPassword.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;hook function.&quot;&quot;&quot;</span>
<span class="n">account</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</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="s2">&quot;Usage: password &lt;oldpass&gt; = &lt;newpass&gt;&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="n">oldpass</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhslist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># Both of these are</span>
<span class="n">newpass</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhslist</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># already stripped by parse()</span>
<span class="c1"># Validate password</span>
<span class="n">validated</span><span class="p">,</span> <span class="n">error</span> <span class="o">=</span> <span class="n">account</span><span class="o">.</span><span class="n">validate_password</span><span class="p">(</span><span class="n">newpass</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">account</span><span class="o">.</span><span class="n">check_password</span><span class="p">(</span><span class="n">oldpass</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="s2">&quot;The specified old password isn&#39;t correct.&quot;</span><span class="p">)</span>
<span class="k">elif</span> <span class="ow">not</span> <span class="n">validated</span><span class="p">:</span>
<span class="n">errors</span> <span class="o">=</span> <span class="p">[</span><span class="n">e</span> <span class="k">for</span> <span class="n">suberror</span> <span class="ow">in</span> <span class="n">error</span><span class="o">.</span><span class="n">messages</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">error</span><span class="o">.</span><span class="n">messages</span><span class="p">]</span>
<span class="n">string</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">errors</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="n">string</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">account</span><span class="o">.</span><span class="n">set_password</span><span class="p">(</span><span class="n">newpass</span><span class="p">)</span>
<span class="n">account</span><span class="o">.</span><span class="n">save</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="s2">&quot;Password changed.&quot;</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_sec</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Password Changed: </span><span class="si">{</span><span class="n">account</span><span class="si">}</span><span class="s2"> (Caller: </span><span class="si">{</span><span class="n">account</span><span class="si">}</span><span class="s2">, IP: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">address</span><span class="si">}</span><span class="s2">).&quot;</span>
<span class="p">)</span></div></div>
<div class="viewcode-block" id="CmdQuit"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdQuit">[docs]</a><span class="k">class</span> <span class="nc">CmdQuit</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> quit the game</span>
<span class="sd"> Usage:</span>
<span class="sd"> quit</span>
<span class="sd"> Switch:</span>
<span class="sd"> all - disconnect all connected sessions</span>
<span class="sd"> Gracefully disconnect your current session from the</span>
<span class="sd"> game. Use the /all switch to disconnect from all sessions.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;quit&quot;</span>
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;all&quot;</span><span class="p">,)</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:all()&quot;</span>
<span class="c1"># this is used by the parent</span>
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
<div class="viewcode-block" id="CmdQuit.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdQuit.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;hook function&quot;&quot;&quot;</span>
<span class="n">account</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span>
<span class="k">if</span> <span class="s2">&quot;all&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">account</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="s2">&quot;|RQuitting|n all sessions. Hope to see you soon again.&quot;</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span>
<span class="p">)</span>
<span class="n">reason</span> <span class="o">=</span> <span class="s2">&quot;quit/all&quot;</span>
<span class="k">for</span> <span class="n">session</span> <span class="ow">in</span> <span class="n">account</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
<span class="n">account</span><span class="o">.</span><span class="n">disconnect_session_from_account</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="n">reason</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">nsess</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">account</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
<span class="n">reason</span> <span class="o">=</span> <span class="s2">&quot;quit&quot;</span>
<span class="k">if</span> <span class="n">nsess</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">account</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;|RQuitting|n. One session is still connected.&quot;</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">nsess</span> <span class="o">&gt;</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">account</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="s2">&quot;|RQuitting|n. </span><span class="si">%i</span><span class="s2"> sessions are still connected.&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">nsess</span> <span class="o">-</span> <span class="mi">1</span><span class="p">),</span>
<span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># we are quitting the last available session</span>
<span class="n">account</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;|RQuitting|n. Hope to see you again, soon.&quot;</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">)</span>
<span class="n">account</span><span class="o">.</span><span class="n">disconnect_session_from_account</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="n">reason</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="CmdColorTest"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdColorTest">[docs]</a><span class="k">class</span> <span class="nc">CmdColorTest</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> testing which colors your client support</span>
<span class="sd"> Usage:</span>
<span class="sd"> color ansi | xterm256</span>
<span class="sd"> Prints a color map along with in-mud color codes to use to produce</span>
<span class="sd"> them. It also tests what is supported in your client. Choices are</span>
<span class="sd"> 16-color ansi (supported in most muds) or the 256-color xterm256</span>
<span class="sd"> standard. No checking is done to determine your client supports</span>
<span class="sd"> color - if not you will see rubbish appear.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;color&quot;</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:all()&quot;</span>
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">&quot;General&quot;</span>
<span class="c1"># this is used by the parent</span>
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># the slices of the ANSI_PARSER lists to use for retrieving the</span>
<span class="c1"># relevant color tags to display. Replace if using another schema.</span>
<span class="c1"># This command can only show one set of markup.</span>
<span class="n">slice_bright_fg</span> <span class="o">=</span> <span class="nb">slice</span><span class="p">(</span><span class="mi">7</span><span class="p">,</span> <span class="mi">15</span><span class="p">)</span> <span class="c1"># from ANSI_PARSER.ansi_map</span>
<span class="n">slice_dark_fg</span> <span class="o">=</span> <span class="nb">slice</span><span class="p">(</span><span class="mi">15</span><span class="p">,</span> <span class="mi">23</span><span class="p">)</span> <span class="c1"># from ANSI_PARSER.ansi_map</span>
<span class="n">slice_dark_bg</span> <span class="o">=</span> <span class="nb">slice</span><span class="p">(</span><span class="o">-</span><span class="mi">8</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> <span class="c1"># from ANSI_PARSER.ansi_map</span>
<span class="n">slice_bright_bg</span> <span class="o">=</span> <span class="nb">slice</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="c1"># from ANSI_PARSER.ansi_xterm256_bright_bg_map</span>
<div class="viewcode-block" id="CmdColorTest.table_format"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdColorTest.table_format">[docs]</a> <span class="k">def</span> <span class="nf">table_format</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Helper method to format the ansi/xterm256 tables.</span>
<span class="sd"> Takes a table of columns [[val,val,...],[val,val,...],...]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">table</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[[]]</span>
<span class="n">extra_space</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">max_widths</span> <span class="o">=</span> <span class="p">[</span><span class="nb">max</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">val</span><span class="p">))</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">col</span><span class="p">])</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">table</span><span class="p">]</span>
<span class="n">ftable</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">irow</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">])):</span>
<span class="n">ftable</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="p">[</span>
<span class="nb">str</span><span class="p">(</span><span class="n">col</span><span class="p">[</span><span class="n">irow</span><span class="p">])</span><span class="o">.</span><span class="n">ljust</span><span class="p">(</span><span class="n">max_widths</span><span class="p">[</span><span class="n">icol</span><span class="p">])</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="o">*</span> <span class="n">extra_space</span>
<span class="k">for</span> <span class="n">icol</span><span class="p">,</span> <span class="n">col</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
<span class="p">]</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">ftable</span></div>
<div class="viewcode-block" id="CmdColorTest.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdColorTest.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;Show color tables&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;a&quot;</span><span class="p">):</span>
<span class="c1"># show ansi 16-color table</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">ansi</span>
<span class="n">ap</span> <span class="o">=</span> <span class="n">ansi</span><span class="o">.</span><span class="n">ANSI_PARSER</span>
<span class="c1"># ansi colors</span>
<span class="c1"># show all ansi color-related codes</span>
<span class="n">bright_fg</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;</span><span class="si">%s%s</span><span class="s2">|n&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="n">code</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;|&quot;</span><span class="p">,</span> <span class="s2">&quot;||&quot;</span><span class="p">))</span>
<span class="k">for</span> <span class="n">code</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">ap</span><span class="o">.</span><span class="n">ansi_map</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">slice_bright_fg</span><span class="p">]</span>
<span class="p">]</span>
<span class="n">dark_fg</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;</span><span class="si">%s%s</span><span class="s2">|n&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="n">code</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;|&quot;</span><span class="p">,</span> <span class="s2">&quot;||&quot;</span><span class="p">))</span>
<span class="k">for</span> <span class="n">code</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">ap</span><span class="o">.</span><span class="n">ansi_map</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">slice_dark_fg</span><span class="p">]</span>
<span class="p">]</span>
<span class="n">dark_bg</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;</span><span class="si">%s%s</span><span class="s2">|n&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">code</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">),</span> <span class="n">code</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;|&quot;</span><span class="p">,</span> <span class="s2">&quot;||&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
<span class="k">for</span> <span class="n">code</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">ap</span><span class="o">.</span><span class="n">ansi_map</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">slice_dark_bg</span><span class="p">]</span>
<span class="p">]</span>
<span class="n">bright_bg</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;</span><span class="si">%s%s</span><span class="s2">|n&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">code</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">),</span> <span class="n">code</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;|&quot;</span><span class="p">,</span> <span class="s2">&quot;||&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
<span class="k">for</span> <span class="n">code</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">ap</span><span class="o">.</span><span class="n">ansi_xterm256_bright_bg_map</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">slice_bright_bg</span><span class="p">]</span>
<span class="p">]</span>
<span class="n">dark_fg</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="s2">&quot;&quot;</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">bright_fg</span><span class="p">)</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">dark_fg</span><span class="p">))])</span>
<span class="n">table</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">format_table</span><span class="p">([</span><span class="n">bright_fg</span><span class="p">,</span> <span class="n">dark_fg</span><span class="p">,</span> <span class="n">bright_bg</span><span class="p">,</span> <span class="n">dark_bg</span><span class="p">])</span>
<span class="n">string</span> <span class="o">=</span> <span class="s2">&quot;ANSI colors:&quot;</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</span><span class="p">:</span>
<span class="n">string</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; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">row</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="n">string</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="s2">&quot;||X : black. ||/ : return, ||- : tab, ||_ : space, ||* : invert, ||u : underline</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;To combine background and foreground, add background marker last, e.g. ||r||[B.</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Note: bright backgrounds like ||[r requires your client handling Xterm256 colors.&quot;</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;x&quot;</span><span class="p">):</span>
<span class="c1"># show xterm256 table</span>
<span class="n">table</span> <span class="o">=</span> <span class="p">[[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[]]</span>
<span class="k">for</span> <span class="n">ir</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">6</span><span class="p">):</span>
<span class="k">for</span> <span class="n">ig</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">6</span><span class="p">):</span>
<span class="k">for</span> <span class="n">ib</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">6</span><span class="p">):</span>
<span class="c1"># foreground table</span>
<span class="n">table</span><span class="p">[</span><span class="n">ir</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;|</span><span class="si">%i%i%i%s</span><span class="s2">|n&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">ir</span><span class="p">,</span> <span class="n">ig</span><span class="p">,</span> <span class="n">ib</span><span class="p">,</span> <span class="s2">&quot;||</span><span class="si">%i%i%i</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">ir</span><span class="p">,</span> <span class="n">ig</span><span class="p">,</span> <span class="n">ib</span><span class="p">)))</span>
<span class="c1"># background table</span>
<span class="n">table</span><span class="p">[</span><span class="mi">6</span> <span class="o">+</span> <span class="n">ir</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="s2">&quot;|</span><span class="si">%i%i%i</span><span class="s2">|[</span><span class="si">%i%i%i%s</span><span class="s2">|n&quot;</span>
<span class="o">%</span> <span class="p">(</span><span class="mi">5</span> <span class="o">-</span> <span class="n">ir</span><span class="p">,</span> <span class="mi">5</span> <span class="o">-</span> <span class="n">ig</span><span class="p">,</span> <span class="mi">5</span> <span class="o">-</span> <span class="n">ib</span><span class="p">,</span> <span class="n">ir</span><span class="p">,</span> <span class="n">ig</span><span class="p">,</span> <span class="n">ib</span><span class="p">,</span> <span class="s2">&quot;||[</span><span class="si">%i%i%i</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">ir</span><span class="p">,</span> <span class="n">ig</span><span class="p">,</span> <span class="n">ib</span><span class="p">))</span>
<span class="p">)</span>
<span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_format</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;Xterm256 colors (if not all hues show, your client might not report that it can&quot;</span>
<span class="s2">&quot; handle xterm256):&quot;</span>
<span class="p">)</span>
<span class="n">string</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="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">row</span><span class="p">)</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</span><span class="p">)</span>
<span class="n">table</span> <span class="o">=</span> <span class="p">[[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[]]</span>
<span class="k">for</span> <span class="n">ibatch</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">4</span><span class="p">):</span>
<span class="k">for</span> <span class="n">igray</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">6</span><span class="p">):</span>
<span class="n">letter</span> <span class="o">=</span> <span class="nb">chr</span><span class="p">(</span><span class="mi">97</span> <span class="o">+</span> <span class="p">(</span><span class="n">ibatch</span> <span class="o">*</span> <span class="mi">6</span> <span class="o">+</span> <span class="n">igray</span><span class="p">))</span>
<span class="n">inverse</span> <span class="o">=</span> <span class="nb">chr</span><span class="p">(</span><span class="mi">122</span> <span class="o">-</span> <span class="p">(</span><span class="n">ibatch</span> <span class="o">*</span> <span class="mi">6</span> <span class="o">+</span> <span class="n">igray</span><span class="p">))</span>
<span class="n">table</span><span class="p">[</span><span class="mi">0</span> <span class="o">+</span> <span class="n">igray</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;|=</span><span class="si">%s%s</span><span class="s2"> |n&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">letter</span><span class="p">,</span> <span class="s2">&quot;||=</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">letter</span><span class="p">))</span>
<span class="n">table</span><span class="p">[</span><span class="mi">6</span> <span class="o">+</span> <span class="n">igray</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;|=</span><span class="si">%s</span><span class="s2">|[=</span><span class="si">%s%s</span><span class="s2"> |n&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">inverse</span><span class="p">,</span> <span class="n">letter</span><span class="p">,</span> <span class="s2">&quot;||[=</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">letter</span><span class="p">))</span>
<span class="k">for</span> <span class="n">igray</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">6</span><span class="p">):</span>
<span class="c1"># the last row (y, z) has empty columns</span>
<span class="k">if</span> <span class="n">igray</span> <span class="o">&lt;</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">letter</span> <span class="o">=</span> <span class="nb">chr</span><span class="p">(</span><span class="mi">121</span> <span class="o">+</span> <span class="n">igray</span><span class="p">)</span>
<span class="n">inverse</span> <span class="o">=</span> <span class="nb">chr</span><span class="p">(</span><span class="mi">98</span> <span class="o">-</span> <span class="n">igray</span><span class="p">)</span>
<span class="n">fg</span> <span class="o">=</span> <span class="s2">&quot;|=</span><span class="si">%s%s</span><span class="s2"> |n&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">letter</span><span class="p">,</span> <span class="s2">&quot;||=</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">letter</span><span class="p">)</span>
<span class="n">bg</span> <span class="o">=</span> <span class="s2">&quot;|=</span><span class="si">%s</span><span class="s2">|[=</span><span class="si">%s%s</span><span class="s2"> |n&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">inverse</span><span class="p">,</span> <span class="n">letter</span><span class="p">,</span> <span class="s2">&quot;||[=</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">letter</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">fg</span><span class="p">,</span> <span class="n">bg</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="s2">&quot; &quot;</span>
<span class="n">table</span><span class="p">[</span><span class="mi">0</span> <span class="o">+</span> <span class="n">igray</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">fg</span><span class="p">)</span>
<span class="n">table</span><span class="p">[</span><span class="mi">6</span> <span class="o">+</span> <span class="n">igray</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bg</span><span class="p">)</span>
<span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">table_format</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
<span class="n">string</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="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">row</span><span class="p">)</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">table</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="n">string</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># malformed input</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Usage: color ansi||xterm256&quot;</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="CmdQuell"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdQuell">[docs]</a><span class="k">class</span> <span class="nc">CmdQuell</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> use character&#39;s permissions instead of account&#39;s</span>
<span class="sd"> Usage:</span>
<span class="sd"> quell</span>
<span class="sd"> unquell</span>
<span class="sd"> Normally the permission level of the Account is used when puppeting a</span>
<span class="sd"> Character/Object to determine access. This command will switch the lock</span>
<span class="sd"> system to make use of the puppeted Object&#39;s permissions instead. This is</span>
<span class="sd"> useful mainly for testing.</span>
<span class="sd"> Hierarchical permission quelling only work downwards, thus an Account cannot</span>
<span class="sd"> use a higher-permission Character to escalate their permission level.</span>
<span class="sd"> Use the unquell command to revert back to normal operation.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;quell&quot;</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;unquell&quot;</span><span class="p">]</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:pperm(Player)&quot;</span>
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">&quot;General&quot;</span>
<span class="c1"># this is used by the parent</span>
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">def</span> <span class="nf">_recache_locks</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">account</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Helper method to reset the lockhandler on an already puppeted object&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">:</span>
<span class="n">char</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">puppet</span>
<span class="k">if</span> <span class="n">char</span><span class="p">:</span>
<span class="c1"># we are already puppeting an object. We need to reset</span>
<span class="c1"># the lock caches (otherwise the superuser status change</span>
<span class="c1"># won&#39;t be visible until repuppet)</span>
<span class="n">char</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
<span class="n">account</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
<div class="viewcode-block" id="CmdQuell.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdQuell.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;Perform the command&quot;&quot;&quot;</span>
<span class="n">account</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span>
<span class="n">permstr</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">account</span><span class="o">.</span><span class="n">is_superuser</span> <span class="ow">and</span> <span class="s2">&quot; (superuser)&quot;</span> <span class="ow">or</span> <span class="s2">&quot;(</span><span class="si">%s</span><span class="s2">)&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">account</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">all</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">cmdstring</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;unquell&quot;</span><span class="p">,</span> <span class="s2">&quot;unquell&quot;</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">account</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="s2">&quot;_quell&quot;</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="sa">f</span><span class="s2">&quot;Already using normal Account permissions </span><span class="si">{</span><span class="n">permstr</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">account</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s2">&quot;_quell&quot;</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="sa">f</span><span class="s2">&quot;Account permissions </span><span class="si">{</span><span class="n">permstr</span><span class="si">}</span><span class="s2"> restored.&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">account</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="s2">&quot;_quell&quot;</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="sa">f</span><span class="s2">&quot;Already quelling Account </span><span class="si">{</span><span class="n">permstr</span><span class="si">}</span><span class="s2"> permissions.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="n">account</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;_quell&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="n">puppet</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">puppet</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">puppet</span><span class="p">:</span>
<span class="n">cpermstr</span> <span class="o">=</span> <span class="s2">&quot;(</span><span class="si">%s</span><span class="s2">)&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">puppet</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
<span class="n">cpermstr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Quelling to current puppet&#39;s permissions </span><span class="si">{</span><span class="n">cpermstr</span><span class="si">}</span><span class="s2">.&quot;</span>
<span class="n">cpermstr</span> <span class="o">+=</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">(Note: If this is higher than Account permissions </span><span class="si">{</span><span class="n">permstr</span><span class="si">}</span><span class="s2">,&quot;</span>
<span class="s2">&quot; the lowest of the two will be used.)&quot;</span>
<span class="p">)</span>
<span class="n">cpermstr</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Use unquell to return to normal permission usage.&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">cpermstr</span><span class="p">)</span>
<span class="k">else</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="sa">f</span><span class="s2">&quot;Quelling Account permissions</span><span class="si">{</span><span class="n">permstr</span><span class="si">}</span><span class="s2">. Use unquell to get them back.&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_recache_locks</span><span class="p">(</span><span class="n">account</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="CmdStyle"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdStyle">[docs]</a><span class="k">class</span> <span class="nc">CmdStyle</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> In-game style options</span>
<span class="sd"> Usage:</span>
<span class="sd"> style</span>
<span class="sd"> style &lt;option&gt; = &lt;value&gt;</span>
<span class="sd"> Configure stylings for in-game display elements like table borders, help</span>
<span class="sd"> entriest etc. Use without arguments to see all available options.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;style&quot;</span>
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;clear&quot;</span><span class="p">]</span>
<div class="viewcode-block" id="CmdStyle.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdStyle.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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">list_styles</span><span class="p">()</span>
<span class="k">return</span>
<span class="bp">self</span><span class="o">.</span><span class="n">set</span><span class="p">()</span></div>
<div class="viewcode-block" id="CmdStyle.list_styles"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdStyle.list_styles">[docs]</a> <span class="k">def</span> <span class="nf">list_styles</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">table</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;Option&quot;</span><span class="p">,</span> <span class="s2">&quot;Description&quot;</span><span class="p">,</span> <span class="s2">&quot;Type&quot;</span><span class="p">,</span> <span class="s2">&quot;Value&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">78</span><span class="p">)</span>
<span class="k">for</span> <span class="n">op_key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">options_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="n">op_found</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">op_key</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="n">table</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span>
<span class="n">op_key</span><span class="p">,</span> <span class="n">op_found</span><span class="o">.</span><span class="n">description</span><span class="p">,</span> <span class="n">op_found</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">op_found</span><span class="o">.</span><span class="n">display</span><span class="p">()</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="nb">str</span><span class="p">(</span><span class="n">table</span><span class="p">))</span></div>
<div class="viewcode-block" id="CmdStyle.set"><a class="viewcode-back" href="../../../../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdStyle.set">[docs]</a> <span class="k">def</span> <span class="nf">set</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</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="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
<span class="k">return</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Style </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="si">}</span><span class="s2"> set to </span><span class="si">{</span><span class="n">result</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span></div></div>
</pre></div>
</div>
</div>
</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.commands.default.account</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2022, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>