<p>Sub-topics are accessed as <codeclass="docutils literal notranslate"><spanclass="pre">help</span><spanclass="pre"><topic>/<subtopic>/...</span></code>.</p>
<p>Creating a new help entry from in-game is done with</p>
<p>Use the <codeclass="docutils literal notranslate"><spanclass="pre">/edit</span></code> switch to open the EvEditor for more convenient in-game writing
(but note that devs can also create help entries outside the game using their
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">aliases</span></code> - Alternate names for the help entry. This can be useful if the main
name is hard to remember.</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">help_category</span></code> - The general grouping of the entry. This is optional. If not
given it will use the default category given by
<codeclass="docutils literal notranslate"><spanclass="pre">settings.COMMAND_DEFAULT_HELP_CATEGORY</span></code> for Commands and
<codeclass="docutils literal notranslate"><spanclass="pre">settings.DEFAULT_HELP_CATEGORY</span></code> for file+db help entries.</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">locks</span></code> - Lock string (for commands) or LockHandler (all help entries).
This defines who may read this entry. See the next section.</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">tags</span></code> - This is not used by default, but could be used to further organize
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">text</span></code> - The actual help entry text. This will be dedented and stripped of
extra space at beginning and end.</p></li>
</ul>
<p>A <codeclass="docutils literal notranslate"><spanclass="pre">text</span></code> that scrolls off the screen will automatically be paginated by
the <aclass="reference internal"href="EvMore.html"><spanclass="doc">EvMore</span></a> pager (you can control this with
<codeclass="docutils literal notranslate"><spanclass="pre">settings.HELP_MORE_ENABLED=False</span></code>). If you use EvMore and want to control
exactly where the pager should break the page, mark the break with the control
character <codeclass="docutils literal notranslate"><spanclass="pre">\f</span></code>.</p>
<h4>Subtopics<aclass="headerlink"href="#subtopics"title="Permalink to this headline">¶</a></h4>
<divclass="versionadded">
<p><spanclass="versionmodified added">New in version 1.0.</span></p>
</div>
<p>Rather than making a very long help entry, the <codeclass="docutils literal notranslate"><spanclass="pre">text</span></code> may also be broken up
into <em>subtopics</em>. A list of the next level of subtopics are shown below the
main help text and allows the user to read more about some particular detail
that wouldn’t fit in the main text.</p>
<p>Subtopics use a markup slightly similar to markdown headings. The top level
heading must be named <codeclass="docutils literal notranslate"><spanclass="pre">#</span><spanclass="pre">subtopics</span></code> (non case-sensitive) and the following
headers must be sub-headings to this (so <codeclass="docutils literal notranslate"><spanclass="pre">##</span><spanclass="pre">subtopic</span><spanclass="pre">name</span></code> etc). All headings
are non-case sensitive (the help command will format them). The topics can be
nested at most to a depth of 5 (which is probably too many levels already). The
parser uses fuzzy matching to find the subtopic, so one does not have to type
it all out exactly.</p>
<p>Below is an example of a <codeclass="docutils literal notranslate"><spanclass="pre">text</span></code> with sub topics.</p>
<divclass="highlight-default notranslate"><divclass="highlight"><pre><span></span>The theatre is the heart of the city, here you can find ...
(This is the main help text, what you get with `help theatre`)
<p>The text at the very top of the command class definition is the class’
<codeclass="docutils literal notranslate"><spanclass="pre">__doc__</span></code>-string and will be shown to users looking for help. Try to use a
consistent format - all default commands are using the structure shown above.</p>
<p>You can limit access to the help entry by the <codeclass="docutils literal notranslate"><spanclass="pre">view</span></code> and/or <codeclass="docutils literal notranslate"><spanclass="pre">read</span></code> locks on the
Command. See <aclass="reference external"href="#Locking-help-entries">the section below</a> for details.</p>
<p>You should also supply the <codeclass="docutils literal notranslate"><spanclass="pre">help_category</span></code> class property if you can; this helps
to group help entries together for people to more easily find them. See the
<codeclass="docutils literal notranslate"><spanclass="pre">help</span></code> command in-game to see the default categories. If you don’t specify the
category, <codeclass="docutils literal notranslate"><spanclass="pre">settings.COMMAND_DEFAULT_HELP_CATEGORY</span></code> (default is “General”) is
used.</p>
<p>If you don’t want your command to be picked up by the auto-help system at all
(like if you want to write its docs manually using the info in the next section
or you use a <aclass="reference internal"href="Command-Sets.html"><spanclass="doc">cmdset</span></a> that has its own help functionality) you
can explicitly set <codeclass="docutils literal notranslate"><spanclass="pre">auto_help</span></code> class property to <codeclass="docutils literal notranslate"><spanclass="pre">False</span></code> in your command
definition.</p>
<p>Alternatively, you can keep the advantages of <em>auto-help</em> in commands, but
control the display of command helps. You can do so by overriding the command’s
<codeclass="docutils literal notranslate"><spanclass="pre">get_help(caller,</span><spanclass="pre">cmdset)</span></code> method. By default, this method will return the
class docstring. You could modify it to add custom behavior: the text returned
by this method will be displayed to the character asking for help in this
<h3>Database-help entries<aclass="headerlink"href="#database-help-entries"title="Permalink to this headline">¶</a></h3>
<p>These are most commonly created in-game using the <codeclass="docutils literal notranslate"><spanclass="pre">sethelp</span></code> command. If you need to create one
manually, you can do so with <codeclass="docutils literal notranslate"><spanclass="pre">evennia.create_help_entry()</span></code>:</p>
<p>The entity being created is a <aclass="reference external"href="../api/evennia.help.models.HelpEntry.html">evennia.help.models.HelpEntry</a>
object. This is <em>not</em> a <aclass="reference internal"href="Typeclasses.html"><spanclass="doc">Typeclassed</span></a> entity and is not meant to
be modified to any great degree. It holds the properties listed earlier. The
text is stored in a field <codeclass="docutils literal notranslate"><spanclass="pre">entrytext</span></code>. It does not provide a <codeclass="docutils literal notranslate"><spanclass="pre">get_help</span></code> method
like commands, stores and returns the <codeclass="docutils literal notranslate"><spanclass="pre">entrytext</span></code> directly.</p>
<p>You can search for (db-)-<codeclass="docutils literal notranslate"><spanclass="pre">HelpEntry</span></code> objects using <codeclass="docutils literal notranslate"><spanclass="pre">evennia.search_help</span></code> but note that
this will not return the two other types of help entries.</p>
<p>File-help entries are created by the game development team outside of the game. The
help entries are defined in normal Python modules (<codeclass="docutils literal notranslate"><spanclass="pre">.py</span></code> file ending) containing
a <codeclass="docutils literal notranslate"><spanclass="pre">dict</span></code> to represent each entry. They require a server <codeclass="docutils literal notranslate"><spanclass="pre">reload</span></code> before any changes
<li><p>Evennia will look through all modules given by
<codeclass="docutils literal notranslate"><spanclass="pre">settings.FILE_HELP_ENTRY_MODULES</span></code>. This should be a list of python-paths for
Evennia to import.</p></li>
<li><p>If this module contains a top-level variable <codeclass="docutils literal notranslate"><spanclass="pre">HELP_ENTRY_DICTS</span></code>, this will be
imported and must be a <codeclass="docutils literal notranslate"><spanclass="pre">list</span></code> of help-entry dicts.</p></li>
<li><p>If no <codeclass="docutils literal notranslate"><spanclass="pre">HELP_ENTRY_DICTS</span></code> list is found, <em>every</em> top-level variable in the
module that is a <codeclass="docutils literal notranslate"><spanclass="pre">dict</span></code> will be read as a help entry. The variable-names will
<spanclass="s2">"key"</span><spanclass="p">:</span><spanclass="s2">"The Gods"</span><spanclass="p">,</span><spanclass="c1"># case-insensitive, can be searched by 'gods' too</span>
<h2>Locking help entries<aclass="headerlink"href="#locking-help-entries"title="Permalink to this headline">¶</a></h2>
<p>The default <codeclass="docutils literal notranslate"><spanclass="pre">help</span></code> command gather all available commands and help entries
together so they can be searched or listed. By setting locks on the command/help
entry one can limit who can read help about it.</p>
<ulclass="simple">
<li><p>Commands failing the normal <codeclass="docutils literal notranslate"><spanclass="pre">cmd</span></code>-lock will be removed before even getting
to the help command. In this case the other two lock types below are ignored.</p></li>
<li><p>The <codeclass="docutils literal notranslate"><spanclass="pre">view</span></code> access type determines if the command/help entry should be visible in
the main help index. If not given, it is assumed everyone can view.</p></li>
<li><p>The <codeclass="docutils literal notranslate"><spanclass="pre">read</span></code> access type determines if the command/help entry can be actually read.
If a <codeclass="docutils literal notranslate"><spanclass="pre">read</span></code> lock is given and <codeclass="docutils literal notranslate"><spanclass="pre">view</span></code> is not, the <codeclass="docutils literal notranslate"><spanclass="pre">read</span></code>-lock is assumed to
apply to <codeclass="docutils literal notranslate"><spanclass="pre">view</span></code>-access as well (so if you can’t read the help entry it will
also not show up in the index). If <codeclass="docutils literal notranslate"><spanclass="pre">read</span></code>-lock is not given, it’s assume
everyone can read the help entry.</p></li>
</ul>
<p>For Commands you set the help-related locks the same way you would any lock:</p>
<p>Db-help entries and File-Help entries work the same way (except the <codeclass="docutils literal notranslate"><spanclass="pre">cmd</span></code>-type
<h2>Customizing the look of the help system<aclass="headerlink"href="#customizing-the-look-of-the-help-system"title="Permalink to this headline">¶</a></h2>
<p>This is done almost exclusively by overriding the <codeclass="docutils literal notranslate"><spanclass="pre">help</span></code> command
visual presentation and entity searching has been broken out into separate
methods on the command class. Override these in your version of <codeclass="docutils literal notranslate"><spanclass="pre">help</span></code> to change
the display or tweak as you please. See the api link above for details.</p>
<h2>Technical notes<aclass="headerlink"href="#technical-notes"title="Permalink to this headline">¶</a></h2>
<p>Since it needs to search so different types of data, the help system has to
collect all possibilities in memory before searching through the entire set. It
uses the <aclass="reference external"href="https://github.com/yeraydiazdiaz/lunr.py">Lunr</a> search engine to
search through the main bulk of help entries. Lunr is a mature engine used for
web-pages and produces much more sensible results than previous solutions.</p>
<p>Once the main entry has been found, subtopics are then searched with
simple <codeclass="docutils literal notranslate"><spanclass="pre">==</span></code>, <codeclass="docutils literal notranslate"><spanclass="pre">startswith</span></code> and <codeclass="docutils literal notranslate"><spanclass="pre">in</span></code> matching (there are so relatively few of them