mirror of
https://github.com/evennia/evennia.git
synced 2026-03-25 01:06:32 +01:00
660 lines
No EOL
74 KiB
HTML
660 lines
No EOL
74 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<title>evennia.commands.default.help — Evennia 1.0-dev documentation</title>
|
|
<link rel="stylesheet" href="../../../../_static/alabaster.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="index" title="Index" href="../../../../genindex.html" />
|
|
<link rel="search" title="Search" href="../../../../search.html" />
|
|
|
|
<link rel="stylesheet" href="../../../../_static/custom.css" type="text/css" />
|
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
|
|
|
|
</head><body>
|
|
|
|
|
|
<div class="document">
|
|
<div class="documentwrapper">
|
|
<div class="bodywrapper">
|
|
|
|
|
|
<div class="body" role="main">
|
|
|
|
<h1>Source code for evennia.commands.default.help</h1><div class="highlight"><pre>
|
|
<span></span><span class="sd">"""</span>
|
|
<span class="sd">The help command. The basic idea is that help texts for commands</span>
|
|
<span class="sd">are best written by those that write the commands - the admins. So</span>
|
|
<span class="sd">command-help is all auto-loaded and searched from the current command</span>
|
|
<span class="sd">set. The normal, database-tied help system is used for collaborative</span>
|
|
<span class="sd">creation of other help topics such as RP help or game-world aides.</span>
|
|
<span class="sd">"""</span>
|
|
|
|
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="k">import</span> <span class="n">settings</span>
|
|
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">defaultdict</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="k">import</span> <span class="n">fill</span><span class="p">,</span> <span class="n">dedent</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.commands.command</span> <span class="k">import</span> <span class="n">Command</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.help.models</span> <span class="k">import</span> <span class="n">HelpEntry</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="k">import</span> <span class="n">create</span><span class="p">,</span> <span class="n">evmore</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.ansi</span> <span class="k">import</span> <span class="n">ANSIString</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.eveditor</span> <span class="k">import</span> <span class="n">EvEditor</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="k">import</span> <span class="p">(</span>
|
|
<span class="n">string_suggestions</span><span class="p">,</span>
|
|
<span class="n">class_from_module</span><span class="p">,</span>
|
|
<span class="n">inherits_from</span><span class="p">,</span>
|
|
<span class="n">format_grid</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">COMMAND_DEFAULT_CLASS</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">)</span>
|
|
<span class="n">HELP_MORE</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">HELP_MORE</span>
|
|
<span class="n">CMD_IGNORE_PREFIXES</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">CMD_IGNORE_PREFIXES</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">"CmdHelp"</span><span class="p">,</span> <span class="s2">"CmdSetHelp"</span><span class="p">)</span>
|
|
<span class="n">_DEFAULT_WIDTH</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">CLIENT_DEFAULT_WIDTH</span>
|
|
<span class="n">_SEP</span> <span class="o">=</span> <span class="s2">"|C"</span> <span class="o">+</span> <span class="s2">"-"</span> <span class="o">*</span> <span class="n">_DEFAULT_WIDTH</span> <span class="o">+</span> <span class="s2">"|n"</span>
|
|
|
|
<span class="n">_LUNR</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">_LUNR_EXCEPTION</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
|
|
<span class="k">class</span> <span class="nc">HelpCategory</span><span class="p">:</span>
|
|
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">key</span>
|
|
|
|
<span class="nd">@property</span>
|
|
<span class="k">def</span> <span class="nf">search_index_entry</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="p">{</span>
|
|
<span class="s2">"key"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">),</span>
|
|
<span class="s2">"aliases"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
|
<span class="s2">"category"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
|
|
<span class="s2">"tags"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
|
<span class="s2">"text"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="n">f</span><span class="s2">"Category: </span><span class="si">{self.key}</span><span class="s2">"</span>
|
|
|
|
<span class="k">def</span> <span class="nf">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="nb">str</span><span class="p">(</span><span class="n">other</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
|
|
|
<span class="k">def</span> <span class="nf">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">help_search_with_index</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">candidate_entries</span><span class="p">,</span> <span class="n">suggestion_maxnum</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Lunr-powered fast index search and suggestion wrapper</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">global</span> <span class="n">_LUNR</span><span class="p">,</span> <span class="n">_LUNR_EXCEPTION</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">_LUNR</span><span class="p">:</span>
|
|
<span class="c1"># we have to delay-load lunr because it messes with logging if it's imported</span>
|
|
<span class="c1"># before twisted's logging has been set up</span>
|
|
<span class="kn">from</span> <span class="nn">lunr</span> <span class="k">import</span> <span class="n">lunr</span> <span class="k">as</span> <span class="n">_LUNR</span>
|
|
<span class="kn">from</span> <span class="nn">lunr.exceptions</span> <span class="k">import</span> <span class="n">QueryParseError</span> <span class="k">as</span> <span class="n">_LUNR_EXCEPTION</span>
|
|
|
|
<span class="n">indx</span> <span class="o">=</span> <span class="p">[</span><span class="n">cnd</span><span class="o">.</span><span class="n">search_index_entry</span> <span class="k">for</span> <span class="n">cnd</span> <span class="ow">in</span> <span class="n">candidate_entries</span><span class="p">]</span>
|
|
<span class="n">mapping</span> <span class="o">=</span> <span class="p">{</span><span class="n">indx</span><span class="p">[</span><span class="n">ix</span><span class="p">][</span><span class="s2">"key"</span><span class="p">]:</span> <span class="n">cand</span> <span class="k">for</span> <span class="n">ix</span><span class="p">,</span> <span class="n">cand</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">candidate_entries</span><span class="p">)}</span>
|
|
|
|
<span class="n">search_index</span> <span class="o">=</span> <span class="n">_LUNR</span><span class="p">(</span>
|
|
<span class="n">ref</span><span class="o">=</span><span class="s2">"key"</span><span class="p">,</span>
|
|
<span class="n">fields</span><span class="o">=</span><span class="p">[</span>
|
|
<span class="p">{</span><span class="s2">"field_name"</span><span class="p">:</span> <span class="s2">"key"</span><span class="p">,</span> <span class="s2">"boost"</span><span class="p">:</span> <span class="mi">10</span><span class="p">},</span>
|
|
<span class="p">{</span><span class="s2">"field_name"</span><span class="p">:</span> <span class="s2">"aliases"</span><span class="p">,</span> <span class="s2">"boost"</span><span class="p">:</span> <span class="mi">9</span><span class="p">},</span>
|
|
<span class="p">{</span><span class="s2">"field_name"</span><span class="p">:</span> <span class="s2">"category"</span><span class="p">,</span> <span class="s2">"boost"</span><span class="p">:</span> <span class="mi">8</span><span class="p">},</span>
|
|
<span class="p">{</span><span class="s2">"field_name"</span><span class="p">:</span> <span class="s2">"tags"</span><span class="p">,</span> <span class="s2">"boost"</span><span class="p">:</span> <span class="mi">5</span><span class="p">},</span>
|
|
<span class="p">{</span><span class="s2">"field_name"</span><span class="p">:</span> <span class="s2">"text"</span><span class="p">,</span> <span class="s2">"boost"</span><span class="p">:</span> <span class="mi">1</span><span class="p">},</span>
|
|
<span class="p">],</span>
|
|
<span class="n">documents</span><span class="o">=</span><span class="n">indx</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">matches</span> <span class="o">=</span> <span class="n">search_index</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">query</span><span class="p">)[:</span><span class="n">suggestion_maxnum</span><span class="p">]</span>
|
|
<span class="k">except</span> <span class="n">_LUNR_EXCEPTION</span><span class="p">:</span>
|
|
<span class="c1"># this is a user-input problem</span>
|
|
<span class="n">matches</span> <span class="o">=</span> <span class="p">[]</span>
|
|
|
|
<span class="c1"># matches (objs), suggestions (strs)</span>
|
|
<span class="k">return</span> <span class="p">(</span>
|
|
<span class="p">[</span><span class="n">mapping</span><span class="p">[</span><span class="n">match</span><span class="p">[</span><span class="s2">"ref"</span><span class="p">]]</span> <span class="k">for</span> <span class="n">match</span> <span class="ow">in</span> <span class="n">matches</span><span class="p">],</span>
|
|
<span class="p">[</span>
|
|
<span class="nb">str</span><span class="p">(</span><span class="n">match</span><span class="p">[</span><span class="s2">"ref"</span><span class="p">])</span> <span class="k">for</span> <span class="n">match</span> <span class="ow">in</span> <span class="n">matches</span>
|
|
<span class="p">],</span> <span class="c1"># + f" (score {match['score']})") # good debug</span>
|
|
<span class="p">)</span>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdHelp"><a class="viewcode-back" href="../../../../api/evennia.commands.default.html#evennia.commands.default.help.CmdHelp">[docs]</a><span class="k">class</span> <span class="nc">CmdHelp</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> View help or a list of topics</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> help <topic or command></span>
|
|
<span class="sd"> help list</span>
|
|
<span class="sd"> help all</span>
|
|
|
|
<span class="sd"> This will search for help on commands and other</span>
|
|
<span class="sd"> topics related to the game.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"help"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"?"</span><span class="p">]</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:all()"</span>
|
|
<span class="n">arg_regex</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"\s|$"</span>
|
|
|
|
<span class="c1"># this is a special cmdhandler flag that makes the cmdhandler also pack</span>
|
|
<span class="c1"># the current cmdset with the call to self.func().</span>
|
|
<span class="n">return_cmdset</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<span class="c1"># Help messages are wrapped in an EvMore call (unless using the webclient</span>
|
|
<span class="c1"># with separate help popups) If you want to avoid this, simply add</span>
|
|
<span class="c1"># 'HELP_MORE = False' in your settings/conf/settings.py</span>
|
|
<span class="n">help_more</span> <span class="o">=</span> <span class="n">HELP_MORE</span>
|
|
|
|
<span class="c1"># suggestion cutoff, between 0 and 1 (1 => perfect match)</span>
|
|
<span class="n">suggestion_cutoff</span> <span class="o">=</span> <span class="mf">0.6</span>
|
|
|
|
<span class="c1"># number of suggestions (set to 0 to remove suggestions from help)</span>
|
|
<span class="n">suggestion_maxnum</span> <span class="o">=</span> <span class="mi">5</span>
|
|
|
|
<div class="viewcode-block" id="CmdHelp.msg_help"><a class="viewcode-back" href="../../../../api/evennia.commands.default.html#evennia.commands.default.help.CmdHelp.msg_help">[docs]</a> <span class="k">def</span> <span class="nf">msg_help</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> messages text to the caller, adding an extra oob argument to indicate</span>
|
|
<span class="sd"> that this is a help command result and could be rendered in a separate</span>
|
|
<span class="sd"> help window</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">help_more</span><span class="p">:</span>
|
|
<span class="n">usemore</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="ow">and</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="ow">in</span> <span class="p">(</span>
|
|
<span class="s2">"websocket"</span><span class="p">,</span>
|
|
<span class="s2">"ajax/comet"</span><span class="p">,</span>
|
|
<span class="p">):</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">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">db</span><span class="o">.</span><span class="n">_saved_webclient_options</span>
|
|
<span class="k">if</span> <span class="n">options</span> <span class="ow">and</span> <span class="n">options</span><span class="p">[</span><span class="s2">"helppopup"</span><span class="p">]:</span>
|
|
<span class="n">usemore</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="k">if</span> <span class="n">usemore</span><span class="p">:</span>
|
|
<span class="n">evmore</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">caller</span><span class="p">,</span> <span class="n">text</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">return</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">text</span><span class="o">=</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="p">{</span><span class="s2">"type"</span><span class="p">:</span> <span class="s2">"help"</span><span class="p">}))</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdHelp.format_help_entry"><a class="viewcode-back" href="../../../../api/evennia.commands.default.html#evennia.commands.default.help.CmdHelp.format_help_entry">[docs]</a> <span class="nd">@staticmethod</span>
|
|
<span class="k">def</span> <span class="nf">format_help_entry</span><span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">help_text</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">suggested</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This visually formats the help entry.</span>
|
|
<span class="sd"> This method can be overriden to customize the way a help</span>
|
|
<span class="sd"> entry is displayed.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> title (str): the title of the help entry.</span>
|
|
<span class="sd"> help_text (str): the text of the help entry.</span>
|
|
<span class="sd"> aliases (list of str or None): the list of aliases.</span>
|
|
<span class="sd"> suggested (list of str or None): suggested reading.</span>
|
|
|
|
<span class="sd"> Returns the formatted string, ready to be sent.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="n">_SEP</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="k">if</span> <span class="n">title</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"|CHelp for |w</span><span class="si">%s</span><span class="s2">|n"</span> <span class="o">%</span> <span class="n">title</span>
|
|
<span class="k">if</span> <span class="n">aliases</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">" |C(aliases: </span><span class="si">%s</span><span class="s2">|C)|n"</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="s2">"|C,|n "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">"|w</span><span class="si">%s</span><span class="s2">|n"</span> <span class="o">%</span> <span class="n">ali</span> <span class="k">for</span> <span class="n">ali</span> <span class="ow">in</span> <span class="n">aliases</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">help_text</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="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">dedent</span><span class="p">(</span><span class="n">help_text</span><span class="o">.</span><span class="n">rstrip</span><span class="p">())</span>
|
|
<span class="k">if</span> <span class="n">suggested</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n\n</span><span class="s2">|CSuggested:|n "</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">fill</span><span class="p">(</span><span class="s2">"|C,|n "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">"|w</span><span class="si">%s</span><span class="s2">|n"</span> <span class="o">%</span> <span class="n">sug</span> <span class="k">for</span> <span class="n">sug</span> <span class="ow">in</span> <span class="n">suggested</span><span class="p">))</span>
|
|
<span class="n">string</span><span class="o">.</span><span class="n">strip</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="n">_SEP</span>
|
|
<span class="k">return</span> <span class="n">string</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdHelp.format_help_list"><a class="viewcode-back" href="../../../../api/evennia.commands.default.html#evennia.commands.default.help.CmdHelp.format_help_list">[docs]</a> <span class="k">def</span> <span class="nf">format_help_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hdict_cmds</span><span class="p">,</span> <span class="n">hdict_db</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Output a category-ordered list. The input are the</span>
|
|
<span class="sd"> pre-loaded help files for commands and database-helpfiles</span>
|
|
<span class="sd"> respectively. You can override this method to return a</span>
|
|
<span class="sd"> custom display of the list of commands and topics.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">category_clr</span> <span class="o">=</span> <span class="s2">"|w"</span>
|
|
<span class="n">topic_clr</span> <span class="o">=</span> <span class="s2">"|G"</span>
|
|
<span class="n">width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">client_width</span><span class="p">()</span>
|
|
<span class="n">grid</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">verbatim_elements</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">category</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">hdict_cmds</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="n">hdict_db</span><span class="o">.</span><span class="n">keys</span><span class="p">()))):</span>
|
|
|
|
<span class="n">category_str</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"-- {category.title()} "</span>
|
|
<span class="n">grid</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
|
<span class="n">ANSIString</span><span class="p">(</span>
|
|
<span class="n">category_clr</span>
|
|
<span class="o">+</span> <span class="n">category_str</span>
|
|
<span class="o">+</span> <span class="s2">"-"</span> <span class="o">*</span> <span class="p">(</span><span class="n">width</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">category_str</span><span class="p">))</span>
|
|
<span class="o">+</span> <span class="n">topic_clr</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="n">verbatim_elements</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">grid</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
|
|
|
|
<span class="n">entries</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span>
|
|
<span class="nb">set</span><span class="p">(</span><span class="n">hdict_cmds</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">category</span><span class="p">,</span> <span class="p">[])</span> <span class="o">+</span> <span class="n">hdict_db</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">category</span><span class="p">,</span> <span class="p">[]))</span>
|
|
<span class="p">)</span>
|
|
<span class="n">grid</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">entries</span><span class="p">)</span>
|
|
|
|
<span class="n">gridrows</span> <span class="o">=</span> <span class="n">format_grid</span><span class="p">(</span>
|
|
<span class="n">grid</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">" "</span><span class="p">,</span> <span class="n">verbatim_elements</span><span class="o">=</span><span class="n">verbatim_elements</span>
|
|
<span class="p">)</span>
|
|
<span class="n">gridrows</span> <span class="o">=</span> <span class="n">ANSIString</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">gridrows</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">gridrows</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdHelp.check_show_help"><a class="viewcode-back" href="../../../../api/evennia.commands.default.html#evennia.commands.default.help.CmdHelp.check_show_help">[docs]</a> <span class="k">def</span> <span class="nf">check_show_help</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmd</span><span class="p">,</span> <span class="n">caller</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Helper method. If this return True, the given cmd</span>
|
|
<span class="sd"> auto-help will be viewable in the help listing.</span>
|
|
<span class="sd"> Override this to easily select what is shown to</span>
|
|
<span class="sd"> the account. Note that only commands available</span>
|
|
<span class="sd"> in the caller's merged cmdset are available.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> cmd (Command): Command class from the merged cmdset</span>
|
|
<span class="sd"> caller (Character, Account or Session): The current caller</span>
|
|
<span class="sd"> executing the help command.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># return only those with auto_help set and passing the cmd: lock</span>
|
|
<span class="k">return</span> <span class="n">cmd</span><span class="o">.</span><span class="n">auto_help</span> <span class="ow">and</span> <span class="n">cmd</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">)</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdHelp.should_list_cmd"><a class="viewcode-back" href="../../../../api/evennia.commands.default.html#evennia.commands.default.help.CmdHelp.should_list_cmd">[docs]</a> <span class="k">def</span> <span class="nf">should_list_cmd</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmd</span><span class="p">,</span> <span class="n">caller</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Should the specified command appear in the help table?</span>
|
|
|
|
<span class="sd"> This method only checks whether a specified command should</span>
|
|
<span class="sd"> appear in the table of topics/commands. The command can be</span>
|
|
<span class="sd"> used by the caller (see the 'check_show_help' method) and</span>
|
|
<span class="sd"> the command will still be available, for instance, if a</span>
|
|
<span class="sd"> character type 'help name of the command'. However, if</span>
|
|
<span class="sd"> you return False, the specified command will not appear in</span>
|
|
<span class="sd"> the table. This is sometimes useful to "hide" commands in</span>
|
|
<span class="sd"> the table, but still access them through the help system.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> cmd: the command to be tested.</span>
|
|
<span class="sd"> caller: the caller of the help system.</span>
|
|
|
|
<span class="sd"> Return:</span>
|
|
<span class="sd"> True: the command should appear in the table.</span>
|
|
<span class="sd"> False: the command shouldn't appear in the table.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="kc">True</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdHelp.parse"><a class="viewcode-back" href="../../../../api/evennia.commands.default.html#evennia.commands.default.help.CmdHelp.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"> input is a string containing the command or topic to match.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">original_args</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">strip</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="bp">self</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="o">.</span><span class="n">lower</span><span class="p">()</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdHelp.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.html#evennia.commands.default.help.CmdHelp.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"> Run the dynamic help entry creator.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">query</span><span class="p">,</span> <span class="n">cmdset</span> <span class="o">=</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">cmdset</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="n">suggestion_cutoff</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">suggestion_cutoff</span>
|
|
<span class="n">suggestion_maxnum</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">suggestion_maxnum</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">query</span><span class="p">:</span>
|
|
<span class="n">query</span> <span class="o">=</span> <span class="s2">"all"</span>
|
|
|
|
<span class="c1"># removing doublets in cmdset, caused by cmdhandler</span>
|
|
<span class="c1"># having to allow doublet commands to manage exits etc.</span>
|
|
<span class="n">cmdset</span><span class="o">.</span><span class="n">make_unique</span><span class="p">(</span><span class="n">caller</span><span class="p">)</span>
|
|
|
|
<span class="c1"># retrieve all available commands and database topics</span>
|
|
<span class="n">all_cmds</span> <span class="o">=</span> <span class="p">[</span><span class="n">cmd</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">cmdset</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_show_help</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">caller</span><span class="p">)]</span>
|
|
<span class="n">all_topics</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">topic</span>
|
|
<span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">HelpEntry</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="n">topic</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"view"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="n">all_categories</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span>
|
|
<span class="nb">set</span><span class="p">(</span>
|
|
<span class="p">[</span><span class="n">HelpCategory</span><span class="p">(</span><span class="n">cmd</span><span class="o">.</span><span class="n">help_category</span><span class="p">)</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">all_cmds</span><span class="p">]</span>
|
|
<span class="o">+</span> <span class="p">[</span><span class="n">HelpCategory</span><span class="p">(</span><span class="n">topic</span><span class="o">.</span><span class="n">help_category</span><span class="p">)</span> <span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">all_topics</span><span class="p">]</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">query</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"list"</span><span class="p">,</span> <span class="s2">"all"</span><span class="p">):</span>
|
|
<span class="c1"># we want to list all available help entries, grouped by category</span>
|
|
<span class="n">hdict_cmd</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
|
|
<span class="n">hdict_topic</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
|
|
<span class="c1"># create the dictionaries {category:[topic, topic ...]} required by format_help_list</span>
|
|
<span class="c1"># Filter commands that should be reached by the help</span>
|
|
<span class="c1"># system, but not be displayed in the table.</span>
|
|
<span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">all_cmds</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">should_list_cmd</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">caller</span><span class="p">):</span>
|
|
<span class="n">hdict_cmd</span><span class="p">[</span><span class="n">cmd</span><span class="o">.</span><span class="n">help_category</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cmd</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
|
|
<span class="p">[</span><span class="n">hdict_topic</span><span class="p">[</span><span class="n">topic</span><span class="o">.</span><span class="n">help_category</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">topic</span><span class="o">.</span><span class="n">key</span><span class="p">)</span> <span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">all_topics</span><span class="p">]</span>
|
|
<span class="c1"># report back</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg_help</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_help_list</span><span class="p">(</span><span class="n">hdict_cmd</span><span class="p">,</span> <span class="n">hdict_topic</span><span class="p">))</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># Try to access a particular help entry or category</span>
|
|
<span class="n">entries</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="p">[</span><span class="n">cmd</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">all_cmds</span> <span class="k">if</span> <span class="n">cmd</span><span class="p">]</span>
|
|
<span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="n">HelpEntry</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
|
|
<span class="o">+</span> <span class="n">all_categories</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="k">for</span> <span class="n">match_query</span> <span class="ow">in</span> <span class="p">[</span><span class="n">f</span><span class="s2">"</span><span class="si">{query}</span><span class="s2">~1"</span><span class="p">,</span> <span class="n">f</span><span class="s2">"</span><span class="si">{query}</span><span class="s2">*"</span><span class="p">]:</span>
|
|
<span class="c1"># We first do an exact word-match followed by a start-by query</span>
|
|
|
|
<span class="n">matches</span><span class="p">,</span> <span class="n">suggestions</span> <span class="o">=</span> <span class="n">help_search_with_index</span><span class="p">(</span>
|
|
<span class="n">match_query</span><span class="p">,</span> <span class="n">entries</span><span class="p">,</span> <span class="n">suggestion_maxnum</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">suggestion_maxnum</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">matches</span><span class="p">:</span>
|
|
<span class="n">match</span> <span class="o">=</span> <span class="n">matches</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">match</span><span class="p">,</span> <span class="n">HelpCategory</span><span class="p">):</span>
|
|
<span class="n">formatted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_help_list</span><span class="p">(</span>
|
|
<span class="p">{</span>
|
|
<span class="n">match</span><span class="o">.</span><span class="n">key</span><span class="p">:</span> <span class="p">[</span>
|
|
<span class="n">cmd</span><span class="o">.</span><span class="n">key</span>
|
|
<span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">all_cmds</span>
|
|
<span class="k">if</span> <span class="n">match</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="n">cmd</span><span class="o">.</span><span class="n">help_category</span>
|
|
<span class="p">]</span>
|
|
<span class="p">},</span>
|
|
<span class="p">{</span>
|
|
<span class="n">match</span><span class="o">.</span><span class="n">key</span><span class="p">:</span> <span class="p">[</span>
|
|
<span class="n">topic</span><span class="o">.</span><span class="n">key</span>
|
|
<span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">all_topics</span>
|
|
<span class="k">if</span> <span class="n">match</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="n">topic</span><span class="o">.</span><span class="n">help_category</span>
|
|
<span class="p">]</span>
|
|
<span class="p">},</span>
|
|
<span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">inherits_from</span><span class="p">(</span><span class="n">match</span><span class="p">,</span> <span class="s2">"evennia.commands.command.Command"</span><span class="p">):</span>
|
|
<span class="n">formatted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_help_entry</span><span class="p">(</span>
|
|
<span class="n">match</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
|
|
<span class="n">match</span><span class="o">.</span><span class="n">get_help</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">cmdset</span><span class="p">),</span>
|
|
<span class="n">aliases</span><span class="o">=</span><span class="n">match</span><span class="o">.</span><span class="n">aliases</span><span class="p">,</span>
|
|
<span class="n">suggested</span><span class="o">=</span><span class="n">suggestions</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">formatted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_help_entry</span><span class="p">(</span>
|
|
<span class="n">match</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
|
|
<span class="n">match</span><span class="o">.</span><span class="n">entrytext</span><span class="p">,</span>
|
|
<span class="n">aliases</span><span class="o">=</span><span class="n">match</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">(),</span>
|
|
<span class="n">suggested</span><span class="o">=</span><span class="n">suggestions</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg_help</span><span class="p">(</span><span class="n">formatted</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># no exact matches found. Just give suggestions.</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">format_help_entry</span><span class="p">(</span>
|
|
<span class="s2">""</span><span class="p">,</span> <span class="n">f</span><span class="s2">"No help entry found for '</span><span class="si">{query}</span><span class="s2">'"</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">suggested</span><span class="o">=</span><span class="n">suggestions</span>
|
|
<span class="p">),</span>
|
|
<span class="n">options</span><span class="o">=</span><span class="p">{</span><span class="s2">"type"</span><span class="p">:</span> <span class="s2">"help"</span><span class="p">},</span>
|
|
<span class="p">)</span></div></div>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">_loadhelp</span><span class="p">(</span><span class="n">caller</span><span class="p">):</span>
|
|
<span class="n">entry</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">_editing_help</span>
|
|
<span class="k">if</span> <span class="n">entry</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">entry</span><span class="o">.</span><span class="n">entrytext</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="s2">""</span>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">_savehelp</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">buffer</span><span class="p">):</span>
|
|
<span class="n">entry</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">_editing_help</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Saved help entry."</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">entry</span><span class="p">:</span>
|
|
<span class="n">entry</span><span class="o">.</span><span class="n">entrytext</span> <span class="o">=</span> <span class="n">buffer</span>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">_quithelp</span><span class="p">(</span><span class="n">caller</span><span class="p">):</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Closing the editor."</span><span class="p">)</span>
|
|
<span class="k">del</span> <span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_editing_help</span>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdSetHelp"><a class="viewcode-back" href="../../../../api/evennia.commands.default.html#evennia.commands.default.help.CmdSetHelp">[docs]</a><span class="k">class</span> <span class="nc">CmdSetHelp</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Edit the help database.</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> help[/switches] <topic>[[;alias;alias][,category[,locks]] [= <text>]</span>
|
|
|
|
<span class="sd"> Switches:</span>
|
|
<span class="sd"> edit - open a line editor to edit the topic's help text.</span>
|
|
<span class="sd"> replace - overwrite existing help topic.</span>
|
|
<span class="sd"> append - add text to the end of existing topic with a newline between.</span>
|
|
<span class="sd"> extend - as append, but don't add a newline.</span>
|
|
<span class="sd"> delete - remove help topic.</span>
|
|
|
|
<span class="sd"> Examples:</span>
|
|
<span class="sd"> sethelp throw = This throws something at ...</span>
|
|
<span class="sd"> sethelp/append pickpocketing,Thievery = This steals ...</span>
|
|
<span class="sd"> sethelp/replace pickpocketing, ,attr(is_thief) = This steals ...</span>
|
|
<span class="sd"> sethelp/edit thievery</span>
|
|
|
|
<span class="sd"> This command manipulates the help database. A help entry can be created,</span>
|
|
<span class="sd"> appended/merged to and deleted. If you don't assign a category, the</span>
|
|
<span class="sd"> "General" category will be used. If no lockstring is specified, default</span>
|
|
<span class="sd"> is to let everyone read the help file.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"sethelp"</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"edit"</span><span class="p">,</span> <span class="s2">"replace"</span><span class="p">,</span> <span class="s2">"append"</span><span class="p">,</span> <span class="s2">"extend"</span><span class="p">,</span> <span class="s2">"delete"</span><span class="p">)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(Helper)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<div class="viewcode-block" id="CmdSetHelp.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.html#evennia.commands.default.help.CmdSetHelp.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">"""Implement the function"""</span>
|
|
|
|
<span class="n">switches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
|
<span class="n">lhslist</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhslist</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">"Usage: sethelp[/switches] <topic>[;alias;alias][,category[,locks,..] = <text>"</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">nlist</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lhslist</span><span class="p">)</span>
|
|
<span class="n">topicstr</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="k">if</span> <span class="n">nlist</span> <span class="o">></span> <span class="mi">0</span> <span class="k">else</span> <span class="s2">""</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">topicstr</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">"You have to define a topic!"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">topicstrlist</span> <span class="o">=</span> <span class="n">topicstr</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">";"</span><span class="p">)</span>
|
|
<span class="n">topicstr</span><span class="p">,</span> <span class="n">aliases</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="n">topicstrlist</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
|
<span class="n">topicstrlist</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">topicstr</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span> <span class="k">else</span> <span class="p">[],</span>
|
|
<span class="p">)</span>
|
|
<span class="n">aliastxt</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"(aliases: </span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">aliases</span><span class="p">))</span> <span class="k">if</span> <span class="n">aliases</span> <span class="k">else</span> <span class="s2">""</span>
|
|
<span class="n">old_entry</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="c1"># check if we have an old entry with the same name</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">querystr</span> <span class="ow">in</span> <span class="n">topicstrlist</span><span class="p">:</span>
|
|
<span class="n">old_entry</span> <span class="o">=</span> <span class="n">HelpEntry</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">find_topicmatch</span><span class="p">(</span>
|
|
<span class="n">querystr</span>
|
|
<span class="p">)</span> <span class="c1"># also search by alias</span>
|
|
<span class="k">if</span> <span class="n">old_entry</span><span class="p">:</span>
|
|
<span class="n">old_entry</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">old_entry</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">break</span>
|
|
<span class="n">category</span> <span class="o">=</span> <span class="n">lhslist</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="n">nlist</span> <span class="o">></span> <span class="mi">1</span> <span class="k">else</span> <span class="n">old_entry</span><span class="o">.</span><span class="n">help_category</span>
|
|
<span class="n">lockstring</span> <span class="o">=</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lhslist</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="k">if</span> <span class="n">nlist</span> <span class="o">></span> <span class="mi">2</span> <span class="k">else</span> <span class="n">old_entry</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">get</span><span class="p">()</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
|
<span class="n">old_entry</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">category</span> <span class="o">=</span> <span class="n">lhslist</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="n">nlist</span> <span class="o">></span> <span class="mi">1</span> <span class="k">else</span> <span class="s2">"General"</span>
|
|
<span class="n">lockstring</span> <span class="o">=</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lhslist</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="k">if</span> <span class="n">nlist</span> <span class="o">></span> <span class="mi">2</span> <span class="k">else</span> <span class="s2">"view:all()"</span>
|
|
<span class="n">category</span> <span class="o">=</span> <span class="n">category</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"edit"</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># open the line editor to edit the helptext. No = is needed.</span>
|
|
<span class="k">if</span> <span class="n">old_entry</span><span class="p">:</span>
|
|
<span class="n">topicstr</span> <span class="o">=</span> <span class="n">old_entry</span><span class="o">.</span><span class="n">key</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="c1"># we assume append here.</span>
|
|
<span class="n">old_entry</span><span class="o">.</span><span class="n">entrytext</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="si">%s</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">helpentry</span> <span class="o">=</span> <span class="n">old_entry</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">helpentry</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_help_entry</span><span class="p">(</span>
|
|
<span class="n">topicstr</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="n">category</span><span class="o">=</span><span class="n">category</span><span class="p">,</span>
|
|
<span class="n">locks</span><span class="o">=</span><span class="n">lockstring</span><span class="p">,</span>
|
|
<span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span>
|
|
<span class="p">)</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">_editing_help</span> <span class="o">=</span> <span class="n">helpentry</span>
|
|
|
|
<span class="n">EvEditor</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="n">loadfunc</span><span class="o">=</span><span class="n">_loadhelp</span><span class="p">,</span>
|
|
<span class="n">savefunc</span><span class="o">=</span><span class="n">_savehelp</span><span class="p">,</span>
|
|
<span class="n">quitfunc</span><span class="o">=</span><span class="n">_quithelp</span><span class="p">,</span>
|
|
<span class="n">key</span><span class="o">=</span><span class="s2">"topic </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">topicstr</span><span class="p">),</span>
|
|
<span class="n">persistent</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"append"</span> <span class="ow">in</span> <span class="n">switches</span> <span class="ow">or</span> <span class="s2">"merge"</span> <span class="ow">in</span> <span class="n">switches</span> <span class="ow">or</span> <span class="s2">"extend"</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># merge/append operations</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">old_entry</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">"Could not find topic '</span><span class="si">%s</span><span class="s2">'. You must give an exact name."</span> <span class="o">%</span> <span class="n">topicstr</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">"You must supply text to append/merge."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="s2">"merge"</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">old_entry</span><span class="o">.</span><span class="n">entrytext</span> <span class="o">+=</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="k">else</span><span class="p">:</span>
|
|
<span class="n">old_entry</span><span class="o">.</span><span class="n">entrytext</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="si">%s</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">old_entry</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">aliases</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">"Entry updated:</span><span class="se">\n</span><span class="si">%s%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">old_entry</span><span class="o">.</span><span class="n">entrytext</span><span class="p">,</span> <span class="n">aliastxt</span><span class="p">))</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="s2">"delete"</span> <span class="ow">in</span> <span class="n">switches</span> <span class="ow">or</span> <span class="s2">"del"</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># delete the help entry</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">old_entry</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">"Could not find topic '</span><span class="si">%s</span><span class="s2">'</span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span><span class="n">topicstr</span><span class="p">,</span> <span class="n">aliastxt</span><span class="p">))</span>
|
|
<span class="k">return</span>
|
|
<span class="n">old_entry</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="s2">"Deleted help entry '</span><span class="si">%s</span><span class="s2">'</span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span><span class="n">topicstr</span><span class="p">,</span> <span class="n">aliastxt</span><span class="p">))</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># at this point it means we want to add a new help entry.</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">"You must supply a help text to add."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="n">old_entry</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="s2">"replace"</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># overwrite old entry</span>
|
|
<span class="n">old_entry</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">topicstr</span>
|
|
<span class="n">old_entry</span><span class="o">.</span><span class="n">entrytext</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
<span class="n">old_entry</span><span class="o">.</span><span class="n">help_category</span> <span class="o">=</span> <span class="n">category</span>
|
|
<span class="n">old_entry</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
|
<span class="n">old_entry</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">lockstring</span><span class="p">)</span>
|
|
<span class="n">old_entry</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span>
|
|
<span class="n">old_entry</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">"Overwrote the old topic '</span><span class="si">%s</span><span class="s2">'</span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span><span class="n">topicstr</span><span class="p">,</span> <span class="n">aliastxt</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">"Topic '</span><span class="si">%s</span><span class="s2">'</span><span class="si">%s</span><span class="s2"> already exists. Use /replace to overwrite "</span>
|
|
<span class="s2">"or /append or /merge to add text to it."</span> <span class="o">%</span> <span class="p">(</span><span class="n">topicstr</span><span class="p">,</span> <span class="n">aliastxt</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># no old entry. Create a new one.</span>
|
|
<span class="n">new_entry</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_help_entry</span><span class="p">(</span>
|
|
<span class="n">topicstr</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="n">category</span><span class="o">=</span><span class="n">category</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="n">lockstring</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">new_entry</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">"Topic '</span><span class="si">%s</span><span class="s2">'</span><span class="si">%s</span><span class="s2"> was successfully created."</span> <span class="o">%</span> <span class="p">(</span><span class="n">topicstr</span><span class="p">,</span> <span class="n">aliastxt</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="s2">"edit"</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># open the line editor to edit the helptext</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">_editing_help</span> <span class="o">=</span> <span class="n">new_entry</span>
|
|
<span class="n">EvEditor</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="n">loadfunc</span><span class="o">=</span><span class="n">_loadhelp</span><span class="p">,</span>
|
|
<span class="n">savefunc</span><span class="o">=</span><span class="n">_savehelp</span><span class="p">,</span>
|
|
<span class="n">quitfunc</span><span class="o">=</span><span class="n">_quithelp</span><span class="p">,</span>
|
|
<span class="n">key</span><span class="o">=</span><span class="s2">"topic </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">new_entry</span><span class="o">.</span><span class="n">key</span><span class="p">),</span>
|
|
<span class="n">persistent</span><span class="o">=</span><span class="kc">True</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="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="s2">"Error when creating topic '</span><span class="si">%s</span><span class="s2">'</span><span class="si">%s</span><span class="s2">! Contact an admin."</span>
|
|
<span class="o">%</span> <span class="p">(</span><span class="n">topicstr</span><span class="p">,</span> <span class="n">aliastxt</span><span class="p">)</span>
|
|
<span class="p">)</span></div></div>
|
|
</pre></div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
<div class="sphinxsidebarwrapper">
|
|
<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><div class="relations">
|
|
<h3>Related Topics</h3>
|
|
<ul>
|
|
<li><a href="../../../../index.html">Documentation overview</a><ul>
|
|
<li><a href="../../../index.html">Module code</a><ul>
|
|
<li><a href="../../../evennia.html">evennia</a><ul>
|
|
</ul></li>
|
|
</ul></li>
|
|
</ul></li>
|
|
</ul>
|
|
</div>
|
|
<h3>Versions</h3>
|
|
<ul>
|
|
<li><a href="help.html">1.0-dev (develop branch)</a></li>
|
|
<li><a href="../../../../../../versions/0.9.1/index.html">0.9.1 (master branch)</a></li>
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="clearer"></div>
|
|
</div>
|
|
<div class="footer">
|
|
©2020, The Evennia developer community.
|
|
|
|
|
|
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.4.4</a>
|
|
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</body>
|
|
</html> |