mirror of
https://github.com/evennia/evennia.git
synced 2026-03-31 13:07:16 +02:00
375 lines
No EOL
45 KiB
HTML
375 lines
No EOL
45 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.muxcommand — Evennia 1.0-dev documentation</title>
|
|
<link rel="stylesheet" href="../../../../_static/nature.css" type="text/css" />
|
|
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
|
|
<script id="documentation_options" data-url_root="../../../../" src="../../../../_static/documentation_options.js"></script>
|
|
<script src="../../../../_static/jquery.js"></script>
|
|
<script src="../../../../_static/underscore.js"></script>
|
|
<script src="../../../../_static/doctools.js"></script>
|
|
<script src="../../../../_static/language_data.js"></script>
|
|
<link rel="shortcut icon" href="../../../../_static/favicon.ico"/>
|
|
<link rel="index" title="Index" href="../../../../genindex.html" />
|
|
<link rel="search" title="Search" href="../../../../search.html" />
|
|
</head><body>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../../../genindex.html" title="General Index"
|
|
accesskey="I">index</a></li>
|
|
<li class="right" >
|
|
<a href="../../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.muxcommand</a></li>
|
|
</ul>
|
|
<div class="develop">develop branch</div>
|
|
</div>
|
|
|
|
<div class="document">
|
|
<div class="documentwrapper">
|
|
<div class="bodywrapper">
|
|
<div class="body" role="main">
|
|
|
|
<h1>Source code for evennia.commands.default.muxcommand</h1><div class="highlight"><pre>
|
|
<span></span><span class="sd">"""</span>
|
|
<span class="sd">The command template for the default MUX-style command set. There</span>
|
|
<span class="sd">is also an Account/OOC version that makes sure caller is an Account object.</span>
|
|
<span class="sd">"""</span>
|
|
|
|
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">utils</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.commands.command</span> <span class="kn">import</span> <span class="n">Command</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">"MuxCommand"</span><span class="p">,</span> <span class="s2">"MuxAccountCommand"</span><span class="p">)</span>
|
|
|
|
|
|
<div class="viewcode-block" id="MuxCommand"><a class="viewcode-back" href="../../../../api/evennia.commands.default.muxcommand.html#evennia.commands.default.muxcommand.MuxCommand">[docs]</a><span class="k">class</span> <span class="nc">MuxCommand</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This sets up the basis for a MUX command. The idea</span>
|
|
<span class="sd"> is that most other Mux-related commands should just</span>
|
|
<span class="sd"> inherit from this and don't have to implement much</span>
|
|
<span class="sd"> parsing of their own unless they do something particularly</span>
|
|
<span class="sd"> advanced.</span>
|
|
|
|
<span class="sd"> Note that the class's __doc__ string (this text) is</span>
|
|
<span class="sd"> used by Evennia to create the automatic help entry for</span>
|
|
<span class="sd"> the command, so make sure to document consistently here.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<div class="viewcode-block" id="MuxCommand.has_perm"><a class="viewcode-back" href="../../../../api/evennia.commands.default.muxcommand.html#evennia.commands.default.muxcommand.MuxCommand.has_perm">[docs]</a> <span class="k">def</span> <span class="nf">has_perm</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">srcobj</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This is called by the cmdhandler to determine</span>
|
|
<span class="sd"> if srcobj is allowed to execute this command.</span>
|
|
<span class="sd"> We just show it here for completeness - we</span>
|
|
<span class="sd"> are satisfied using the default check in Command.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">has_perm</span><span class="p">(</span><span class="n">srcobj</span><span class="p">)</span></div>
|
|
|
|
<div class="viewcode-block" id="MuxCommand.at_pre_cmd"><a class="viewcode-back" href="../../../../api/evennia.commands.default.muxcommand.html#evennia.commands.default.muxcommand.MuxCommand.at_pre_cmd">[docs]</a> <span class="k">def</span> <span class="nf">at_pre_cmd</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This hook is called before self.parse() on all commands</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">pass</span></div>
|
|
|
|
<div class="viewcode-block" id="MuxCommand.at_post_cmd"><a class="viewcode-back" href="../../../../api/evennia.commands.default.muxcommand.html#evennia.commands.default.muxcommand.MuxCommand.at_post_cmd">[docs]</a> <span class="k">def</span> <span class="nf">at_post_cmd</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This hook is called after the command has finished executing</span>
|
|
<span class="sd"> (after self.func()).</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">pass</span></div>
|
|
|
|
<div class="viewcode-block" id="MuxCommand.parse"><a class="viewcode-back" href="../../../../api/evennia.commands.default.muxcommand.html#evennia.commands.default.muxcommand.MuxCommand.parse">[docs]</a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This method is called by the cmdhandler once the command name</span>
|
|
<span class="sd"> has been identified. It creates a new set of member variables</span>
|
|
<span class="sd"> that can be later accessed from self.func() (see below)</span>
|
|
|
|
<span class="sd"> The following variables are available for our use when entering this</span>
|
|
<span class="sd"> method (from the command definition, and assigned on the fly by the</span>
|
|
<span class="sd"> cmdhandler):</span>
|
|
<span class="sd"> self.key - the name of this command ('look')</span>
|
|
<span class="sd"> self.aliases - the aliases of this cmd ('l')</span>
|
|
<span class="sd"> self.permissions - permission string for this command</span>
|
|
<span class="sd"> self.help_category - overall category of command</span>
|
|
|
|
<span class="sd"> self.caller - the object calling this command</span>
|
|
<span class="sd"> self.cmdstring - the actual command name used to call this</span>
|
|
<span class="sd"> (this allows you to know which alias was used,</span>
|
|
<span class="sd"> for example)</span>
|
|
<span class="sd"> self.args - the raw input; everything following self.cmdstring.</span>
|
|
<span class="sd"> self.cmdset - the cmdset from which this command was picked. Not</span>
|
|
<span class="sd"> often used (useful for commands like 'help' or to</span>
|
|
<span class="sd"> list all available commands etc)</span>
|
|
<span class="sd"> self.obj - the object on which this command was defined. It is often</span>
|
|
<span class="sd"> the same as self.caller.</span>
|
|
|
|
<span class="sd"> A MUX command has the following possible syntax:</span>
|
|
|
|
<span class="sd"> name[ with several words][/switch[/switch..]] arg1[,arg2,...] [[=|,] arg[,..]]</span>
|
|
|
|
<span class="sd"> The 'name[ with several words]' part is already dealt with by the</span>
|
|
<span class="sd"> cmdhandler at this point, and stored in self.cmdname (we don't use</span>
|
|
<span class="sd"> it here). The rest of the command is stored in self.args, which can</span>
|
|
<span class="sd"> start with the switch indicator /.</span>
|
|
|
|
<span class="sd"> Optional variables to aid in parsing, if set:</span>
|
|
<span class="sd"> self.switch_options - (tuple of valid /switches expected by this</span>
|
|
<span class="sd"> command (without the /))</span>
|
|
<span class="sd"> self.rhs_split - Alternate string delimiter or tuple of strings</span>
|
|
<span class="sd"> to separate left/right hand sides. tuple form</span>
|
|
<span class="sd"> gives priority split to first string delimiter.</span>
|
|
|
|
<span class="sd"> This parser breaks self.args into its constituents and stores them in the</span>
|
|
<span class="sd"> following variables:</span>
|
|
<span class="sd"> self.switches = [list of /switches (without the /)]</span>
|
|
<span class="sd"> self.raw = This is the raw argument input, including switches</span>
|
|
<span class="sd"> self.args = This is re-defined to be everything *except* the switches</span>
|
|
<span class="sd"> self.lhs = Everything to the left of = (lhs:'left-hand side'). If</span>
|
|
<span class="sd"> no = is found, this is identical to self.args.</span>
|
|
<span class="sd"> self.rhs: Everything to the right of = (rhs:'right-hand side').</span>
|
|
<span class="sd"> If no '=' is found, this is None.</span>
|
|
<span class="sd"> self.lhslist - [self.lhs split into a list by comma]</span>
|
|
<span class="sd"> self.rhslist - [list of self.rhs split into a list by comma]</span>
|
|
<span class="sd"> self.arglist = [list of space-separated args (stripped, including '=' if it exists)]</span>
|
|
|
|
<span class="sd"> All args and list members are stripped of excess whitespace around the</span>
|
|
<span class="sd"> strings, but case is preserved.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">raw</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span>
|
|
<span class="n">args</span> <span class="o">=</span> <span class="n">raw</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="c1"># Without explicitly setting these attributes, they assume default values:</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"switch_options"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">switch_options</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"rhs_split"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">rhs_split</span> <span class="o">=</span> <span class="s2">"="</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"account_caller"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">account_caller</span> <span class="o">=</span> <span class="kc">False</span>
|
|
|
|
<span class="c1"># split out switches</span>
|
|
<span class="n">switches</span><span class="p">,</span> <span class="n">delimiters</span> <span class="o">=</span> <span class="p">[],</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs_split</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">switch_options</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">switch_options</span> <span class="o">=</span> <span class="p">[</span><span class="n">opt</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">opt</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switch_options</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">args</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">raw</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"/"</span><span class="p">:</span>
|
|
<span class="c1"># we have a switch, or a set of switches. These end with a space.</span>
|
|
<span class="n">switches</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">switches</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">switches</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">switches</span>
|
|
<span class="n">switches</span> <span class="o">=</span> <span class="n">switches</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"/"</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">args</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="n">switches</span> <span class="o">=</span> <span class="n">switches</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"/"</span><span class="p">)</span>
|
|
<span class="c1"># If user-provides switches, parse them with parser switch options.</span>
|
|
<span class="k">if</span> <span class="n">switches</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">switch_options</span><span class="p">:</span>
|
|
<span class="n">valid_switches</span><span class="p">,</span> <span class="n">unused_switches</span><span class="p">,</span> <span class="n">extra_switches</span> <span class="o">=</span> <span class="p">[],</span> <span class="p">[],</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">option_check</span> <span class="o">=</span> <span class="p">[</span><span class="n">opt</span> <span class="k">for</span> <span class="n">opt</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switch_options</span> <span class="k">if</span> <span class="n">opt</span> <span class="o">==</span> <span class="n">element</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">option_check</span><span class="p">:</span>
|
|
<span class="n">option_check</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">opt</span> <span class="k">for</span> <span class="n">opt</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switch_options</span> <span class="k">if</span> <span class="n">opt</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">element</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="n">match_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">option_check</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">match_count</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">extra_switches</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span>
|
|
<span class="n">option_check</span>
|
|
<span class="p">)</span> <span class="c1"># Either the option provided is ambiguous,</span>
|
|
<span class="k">elif</span> <span class="n">match_count</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">valid_switches</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">option_check</span><span class="p">)</span> <span class="c1"># or it is a valid option abbreviation,</span>
|
|
<span class="k">elif</span> <span class="n">match_count</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">unused_switches</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">element</span><span class="p">)</span> <span class="c1"># or an extraneous option to be ignored.</span>
|
|
<span class="k">if</span> <span class="n">extra_switches</span><span class="p">:</span> <span class="c1"># User provided switches</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="s2">"|g</span><span class="si">%s</span><span class="s2">|n: |wAmbiguous switch supplied: Did you mean /|C</span><span class="si">%s</span><span class="s2">|w?"</span>
|
|
<span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cmdstring</span><span class="p">,</span> <span class="s2">" |nor /|C"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">extra_switches</span><span class="p">))</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">unused_switches</span><span class="p">:</span>
|
|
<span class="n">plural</span> <span class="o">=</span> <span class="s2">""</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">unused_switches</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="s2">"es"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="s1">'|g</span><span class="si">%s</span><span class="s1">|n: |wExtra switch</span><span class="si">%s</span><span class="s1"> "/|C</span><span class="si">%s</span><span class="s1">|w" ignored.'</span>
|
|
<span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cmdstring</span><span class="p">,</span> <span class="n">plural</span><span class="p">,</span> <span class="s2">"|n, /|C"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">unused_switches</span><span class="p">))</span>
|
|
<span class="p">)</span>
|
|
<span class="n">switches</span> <span class="o">=</span> <span class="n">valid_switches</span> <span class="c1"># Only include valid_switches in command function call</span>
|
|
<span class="n">arglist</span> <span class="o">=</span> <span class="p">[</span><span class="n">arg</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">()]</span>
|
|
|
|
<span class="c1"># check for arg1, arg2, ... = argA, argB, ... constructs</span>
|
|
<span class="n">lhs</span><span class="p">,</span> <span class="n">rhs</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">strip</span><span class="p">(),</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="n">lhs</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">delimiters</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">delimiters</span><span class="p">,</span> <span class="s2">"__iter__"</span><span class="p">):</span> <span class="c1"># If delimiter is iterable,</span>
|
|
<span class="n">best_split</span> <span class="o">=</span> <span class="n">delimiters</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># (default to first delimiter)</span>
|
|
<span class="k">for</span> <span class="n">this_split</span> <span class="ow">in</span> <span class="n">delimiters</span><span class="p">:</span> <span class="c1"># try each delimiter</span>
|
|
<span class="k">if</span> <span class="n">this_split</span> <span class="ow">in</span> <span class="n">lhs</span><span class="p">:</span> <span class="c1"># to find first successful split</span>
|
|
<span class="n">best_split</span> <span class="o">=</span> <span class="n">this_split</span> <span class="c1"># to be the best split.</span>
|
|
<span class="k">break</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">best_split</span> <span class="o">=</span> <span class="n">delimiters</span>
|
|
<span class="c1"># Parse to separate left into left/right sides using best_split delimiter string</span>
|
|
<span class="k">if</span> <span class="n">best_split</span> <span class="ow">in</span> <span class="n">lhs</span><span class="p">:</span>
|
|
<span class="n">lhs</span><span class="p">,</span> <span class="n">rhs</span> <span class="o">=</span> <span class="n">lhs</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">best_split</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="c1"># Trim user-injected whitespace</span>
|
|
<span class="n">rhs</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="k">if</span> <span class="n">rhs</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
|
<span class="n">lhs</span> <span class="o">=</span> <span class="n">lhs</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="c1"># Further split left/right sides by comma delimiter</span>
|
|
<span class="n">lhslist</span> <span class="o">=</span> <span class="p">[</span><span class="n">arg</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">lhs</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">","</span><span class="p">)]</span> <span class="k">if</span> <span class="n">lhs</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="p">[]</span>
|
|
<span class="n">rhslist</span> <span class="o">=</span> <span class="p">[</span><span class="n">arg</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">rhs</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">","</span><span class="p">)]</span> <span class="k">if</span> <span class="n">rhs</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="p">[]</span>
|
|
<span class="c1"># save to object properties:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">raw</span> <span class="o">=</span> <span class="n">raw</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="o">=</span> <span class="n">switches</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">arglist</span> <span class="o">=</span> <span class="n">arglist</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">lhs</span> <span class="o">=</span> <span class="n">lhs</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">lhslist</span> <span class="o">=</span> <span class="n">lhslist</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">rhs</span> <span class="o">=</span> <span class="n">rhs</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">rhslist</span> <span class="o">=</span> <span class="n">rhslist</span>
|
|
|
|
<span class="c1"># if the class has the account_caller property set on itself, we make</span>
|
|
<span class="c1"># sure that self.caller is always the account if possible. We also create</span>
|
|
<span class="c1"># a special property "character" for the puppeted object, if any. This</span>
|
|
<span class="c1"># is convenient for commands defined on the Account only.</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">account_caller</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">utils</span><span class="o">.</span><span class="n">inherits_from</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"evennia.objects.objects.DefaultObject"</span><span class="p">):</span>
|
|
<span class="c1"># caller is an Object/Character</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">character</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">account</span>
|
|
<span class="k">elif</span> <span class="n">utils</span><span class="o">.</span><span class="n">inherits_from</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"evennia.accounts.accounts.DefaultAccount"</span><span class="p">):</span>
|
|
<span class="c1"># caller was already an Account</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">character</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">get_puppet</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="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">character</span> <span class="o">=</span> <span class="kc">None</span></div>
|
|
|
|
<div class="viewcode-block" id="MuxCommand.get_command_info"><a class="viewcode-back" href="../../../../api/evennia.commands.default.muxcommand.html#evennia.commands.default.muxcommand.MuxCommand.get_command_info">[docs]</a> <span class="k">def</span> <span class="nf">get_command_info</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Update of parent class's get_command_info() for MuxCommand.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">variables</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
|
<span class="s2">" |w</span><span class="si">{}</span><span class="s2">|n (</span><span class="si">{}</span><span class="s2">): </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">val</span><span class="p">),</span> <span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
|
<span class="p">)</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"""</span>
|
|
<span class="s2">Command </span><span class="si">{</span><span class="bp">self</span><span class="si">}</span><span class="s2"> has no defined `func()` - showing on-command variables: No child func() defined for </span><span class="si">{</span><span class="bp">self</span><span class="si">}</span><span class="s2"> - available variables:</span>
|
|
<span class="si">{</span><span class="n">variables</span><span class="si">}</span><span class="s2"></span>
|
|
<span class="s2"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="c1"># a simple test command to show the available properties</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"-"</span> <span class="o">*</span> <span class="mi">50</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">|w</span><span class="si">%s</span><span class="s2">|n - Command variables from evennia:</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">key</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"-"</span> <span class="o">*</span> <span class="mi">50</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">name of cmd (self.key): |w</span><span class="si">%s</span><span class="s2">|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">key</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"cmd aliases (self.aliases): |w</span><span class="si">%s</span><span class="s2">|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">aliases</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"cmd locks (self.locks): |w</span><span class="si">%s</span><span class="s2">|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">locks</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"help category (self.help_category): |w</span><span class="si">%s</span><span class="s2">|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">help_category</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"object calling (self.caller): |w</span><span class="si">%s</span><span class="s2">|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"object storing cmdset (self.obj): |w</span><span class="si">%s</span><span class="s2">|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"command string given (self.cmdstring): |w</span><span class="si">%s</span><span class="s2">|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">cmdstring</span>
|
|
<span class="c1"># show cmdset.key instead of cmdset to shorten output</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="n">utils</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span><span class="s2">"current cmdset (self.cmdset): |w</span><span class="si">%s</span><span class="s2">|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">cmdset</span><span class="p">)</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="s2">"-"</span> <span class="o">*</span> <span class="mi">50</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">Variables from MuxCommand baseclass</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"-"</span> <span class="o">*</span> <span class="mi">50</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">raw argument (self.raw): |w</span><span class="si">%s</span><span class="s2">|n </span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"cmd args (self.args): |w</span><span class="si">%s</span><span class="s2">|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"cmd switches (self.switches): |w</span><span class="si">%s</span><span class="s2">|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"cmd options (self.switch_options): |w</span><span class="si">%s</span><span class="s2">|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">switch_options</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"cmd parse left/right using (self.rhs_split): |w</span><span class="si">%s</span><span class="s2">|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs_split</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"space-separated arg list (self.arglist): |w</span><span class="si">%s</span><span class="s2">|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">arglist</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"lhs, left-hand side of '=' (self.lhs): |w</span><span class="si">%s</span><span class="s2">|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"lhs, comma separated (self.lhslist): |w</span><span class="si">%s</span><span class="s2">|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhslist</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"rhs, right-hand side of '=' (self.rhs): |w</span><span class="si">%s</span><span class="s2">|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"rhs, comma separated (self.rhslist): |w</span><span class="si">%s</span><span class="s2">|n</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhslist</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"-"</span> <span class="o">*</span> <span class="mi">50</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span></div>
|
|
|
|
<div class="viewcode-block" id="MuxCommand.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.muxcommand.html#evennia.commands.default.muxcommand.MuxCommand.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">"""</span>
|
|
<span class="sd"> This is the hook function that actually does all the work. It is called</span>
|
|
<span class="sd"> by the cmdhandler right after self.parser() finishes, and so has access</span>
|
|
<span class="sd"> to all the variables defined therein.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">get_command_info</span><span class="p">()</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="MuxAccountCommand"><a class="viewcode-back" href="../../../../api/evennia.commands.default.muxcommand.html#evennia.commands.default.muxcommand.MuxAccountCommand">[docs]</a><span class="k">class</span> <span class="nc">MuxAccountCommand</span><span class="p">(</span><span class="n">MuxCommand</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This is an on-Account version of the MuxCommand. Since these commands sit</span>
|
|
<span class="sd"> on Accounts rather than on Characters/Objects, we need to check</span>
|
|
<span class="sd"> this in the parser.</span>
|
|
|
|
<span class="sd"> Account commands are available also when puppeting a Character, it's</span>
|
|
<span class="sd"> just that they are applied with a lower priority and are always</span>
|
|
<span class="sd"> available, also when disconnected from a character (i.e. "ooc").</span>
|
|
|
|
<span class="sd"> This class makes sure that caller is always an Account object, while</span>
|
|
<span class="sd"> creating a new property "character" that is set only if a</span>
|
|
<span class="sd"> character is actually attached to this Account and Session.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># Using MuxAccountCommand explicitly defaults the caller to an account</span></div>
|
|
</pre></div>
|
|
|
|
<div class="clearer"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
<div class="sphinxsidebarwrapper">
|
|
<p class="logo"><a href="../../../../index.html">
|
|
<img class="logo" src="../../../../_static/evennia_logo.png" alt="Logo"/>
|
|
</a></p>
|
|
<div id="searchbox" style="display: none" role="search">
|
|
<h3 id="searchlabel">Quick search</h3>
|
|
<div class="searchformwrapper">
|
|
<form class="search" action="../../../../search.html" method="get">
|
|
<input type="text" name="q" aria-labelledby="searchlabel" />
|
|
<input type="submit" value="Go" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<script>$('#searchbox').show(0);</script><h3>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="http://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb">IRC</a> -
|
|
<a href="https://discord.gg/NecFePw">Discord</a> -
|
|
<a href="https://groups.google.com/forum/#%21forum/evennia">Forums</a>
|
|
</li>
|
|
<li><a href="http://evennia.blogspot.com/">Evennia Dev blog</a> </li>
|
|
</ul>
|
|
<h3>Versions</h3>
|
|
<ul>
|
|
<li><a href="muxcommand.html">1.0-dev (develop branch)</a></li>
|
|
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="clearer"></div>
|
|
</div>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../../../genindex.html" title="General Index"
|
|
>index</a></li>
|
|
<li class="right" >
|
|
<a href="../../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.muxcommand</a></li>
|
|
</ul>
|
|
<div class="develop">develop branch</div>
|
|
</div>
|
|
<div class="footer" role="contentinfo">
|
|
© Copyright 2020, The Evennia developer community.
|
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
|
</div>
|
|
</body>
|
|
</html> |