|
|
|
|
@ -50,16 +50,16 @@
|
|
|
|
|
|
|
|
|
|
<span class="sd">"""</span>
|
|
|
|
|
|
|
|
|
|
<span class="kn">import</span> <span class="nn">re</span>
|
|
|
|
|
<span class="kn">from</span> <span class="nn">dataclasses</span> <span class="kn">import</span> <span class="n">dataclass</span>
|
|
|
|
|
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
|
|
|
|
|
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">defaultdict</span>
|
|
|
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">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.utils.utils</span> <span class="kn">import</span> <span class="n">dedent</span>
|
|
|
|
|
<span class="kn">from</span> <span class="nn">evennia.help.models</span> <span class="kn">import</span> <span class="n">HelpEntry</span>
|
|
|
|
|
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">create</span><span class="p">,</span> <span class="n">evmore</span>
|
|
|
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.ansi</span> <span class="kn">import</span> <span class="n">ANSIString</span>
|
|
|
|
|
<span class="kn">from</span> <span class="nn">evennia.help.filehelp</span> <span class="kn">import</span> <span class="n">FILE_HELP_ENTRIES</span>
|
|
|
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.eveditor</span> <span class="kn">import</span> <span class="n">EvEditor</span>
|
|
|
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.evmenu</span> <span class="kn">import</span> <span class="n">ask_yes_no</span>
|
|
|
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</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>
|
|
|
|
|
@ -301,46 +301,165 @@
|
|
|
|
|
|
|
|
|
|
<span class="k">return</span> <span class="n">help_index</span></div>
|
|
|
|
|
|
|
|
|
|
<div class="viewcode-block" id="CmdHelp.check_show_help"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.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>
|
|
|
|
|
<div class="viewcode-block" id="CmdHelp.can_read_topic"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdHelp.can_read_topic">[docs]</a> <span class="k">def</span> <span class="nf">can_read_topic</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmd_or_topic</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"> Helper method. If this return True, the given help topic</span>
|
|
|
|
|
<span class="sd"> be viewable in the help listing. Note that even if this returns False,</span>
|
|
|
|
|
<span class="sd"> the entry will still be visible in the help index unless `should_list_topic`</span>
|
|
|
|
|
<span class="sd"> is also returning False.</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"> cmd_or_topic (Command, HelpEntry or FileHelpEntry): The topic/command to test.</span>
|
|
|
|
|
<span class="sd"> caller: the caller checking for access.</span>
|
|
|
|
|
|
|
|
|
|
<span class="sd"> Returns:</span>
|
|
|
|
|
<span class="sd"> bool: If command can be viewed or not.</span>
|
|
|
|
|
|
|
|
|
|
<span class="sd"> Notes:</span>
|
|
|
|
|
<span class="sd"> This uses the 'read' lock. If no 'read' lock is defined, the topic is assumed readable</span>
|
|
|
|
|
<span class="sd"> by all.</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>
|
|
|
|
|
<span class="k">if</span> <span class="n">inherits_from</span><span class="p">(</span><span class="n">cmd_or_topic</span><span class="p">,</span> <span class="s2">"evennia.commands.command.Command"</span><span class="p">):</span>
|
|
|
|
|
<span class="k">return</span> <span class="n">cmd_or_topic</span><span class="o">.</span><span class="n">auto_help</span> <span class="ow">and</span> <span class="n">cmd_or_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="s1">'read'</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="k">else</span><span class="p">:</span>
|
|
|
|
|
<span class="k">return</span> <span class="n">cmd_or_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="s1">'read'</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
|
|
|
|
|
|
|
|
|
|
<div class="viewcode-block" id="CmdHelp.should_list_cmd"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.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>
|
|
|
|
|
<div class="viewcode-block" id="CmdHelp.can_list_topic"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdHelp.can_list_topic">[docs]</a> <span class="k">def</span> <span class="nf">can_list_topic</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmd_or_topic</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"> This method only checks whether a specified command should appear in the table of</span>
|
|
|
|
|
<span class="sd"> topics/commands. The command can be used by the caller (see the 'should_show_help' method)</span>
|
|
|
|
|
<span class="sd"> and the command will still be available, for instance, if a character type 'help name of the</span>
|
|
|
|
|
<span class="sd"> command'. However, if you return False, the specified command will not appear in the table.</span>
|
|
|
|
|
<span class="sd"> This is sometimes useful to "hide" commands in the table, but still access them through the</span>
|
|
|
|
|
<span class="sd"> 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"> cmd_or_topic (Command, HelpEntry or FileHelpEntry): The topic/command to test.</span>
|
|
|
|
|
<span class="sd"> caller: the caller checking for access.</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"> Returns:</span>
|
|
|
|
|
<span class="sd"> bool: If command should be listed or not.</span>
|
|
|
|
|
|
|
|
|
|
<span class="sd"> Notes:</span>
|
|
|
|
|
<span class="sd"> By default, the 'view' lock will be checked, and if no such lock is defined, the 'read'</span>
|
|
|
|
|
<span class="sd"> lock will be used. If neither lock is defined, the help entry is assumed to be</span>
|
|
|
|
|
<span class="sd"> accessible to all.</span>
|
|
|
|
|
|
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
|
<span class="k">return</span> <span class="kc">True</span></div>
|
|
|
|
|
<span class="n">has_view</span> <span class="o">=</span> <span class="p">(</span>
|
|
|
|
|
<span class="s2">"view:"</span> <span class="ow">in</span> <span class="n">cmd_or_topic</span><span class="o">.</span><span class="n">locks</span>
|
|
|
|
|
<span class="k">if</span> <span class="n">inherits_from</span><span class="p">(</span><span class="n">cmd_or_topic</span><span class="p">,</span> <span class="s2">"evennia.commands.command.Command"</span><span class="p">)</span>
|
|
|
|
|
<span class="k">else</span> <span class="n">cmd_or_topic</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="s2">"view"</span><span class="p">)</span>
|
|
|
|
|
<span class="p">)</span>
|
|
|
|
|
|
|
|
|
|
<span class="k">if</span> <span class="n">has_view</span><span class="p">:</span>
|
|
|
|
|
<span class="k">return</span> <span class="n">cmd_or_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="s1">'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="k">else</span><span class="p">:</span>
|
|
|
|
|
<span class="c1"># no explicit 'view' lock - use the 'read' lock</span>
|
|
|
|
|
<span class="k">return</span> <span class="n">cmd_or_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="s1">'read'</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
|
|
|
|
|
|
|
|
|
|
<div class="viewcode-block" id="CmdHelp.collect_topics"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdHelp.collect_topics">[docs]</a> <span class="k">def</span> <span class="nf">collect_topics</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">caller</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s1">'list'</span><span class="p">):</span>
|
|
|
|
|
<span class="sd">"""</span>
|
|
|
|
|
<span class="sd"> Collect help topics from all sources (cmd/db/file).</span>
|
|
|
|
|
|
|
|
|
|
<span class="sd"> Args:</span>
|
|
|
|
|
<span class="sd"> caller (Object or Account): The user of the Command.</span>
|
|
|
|
|
<span class="sd"> mode (str): One of 'list' or 'query', where the first means we are collecting to view</span>
|
|
|
|
|
<span class="sd"> the help index and the second because of wanting to search for a specific help</span>
|
|
|
|
|
<span class="sd"> entry/cmd to read. This determines which access should be checked.</span>
|
|
|
|
|
|
|
|
|
|
<span class="sd"> Returns:</span>
|
|
|
|
|
<span class="sd"> tuple: A tuple of three dicts containing the different types of help entries</span>
|
|
|
|
|
<span class="sd"> in the order cmd-help, db-help, file-help:</span>
|
|
|
|
|
<span class="sd"> `({key: cmd,...}, {key: dbentry,...}, {key: fileentry,...}`</span>
|
|
|
|
|
|
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
|
<span class="c1"># start with cmd-help</span>
|
|
|
|
|
<span class="n">cmdset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cmdset</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 / file-help topics.</span>
|
|
|
|
|
<span class="c1"># also check the 'cmd:' lock here</span>
|
|
|
|
|
<span class="n">cmd_help_topics</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="n">cmd</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> <span class="s1">'cmd'</span><span class="p">)]</span>
|
|
|
|
|
<span class="c1"># get all file-based help entries, checking perms</span>
|
|
|
|
|
<span class="n">file_help_topics</span> <span class="o">=</span> <span class="p">{</span>
|
|
|
|
|
<span class="n">topic</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">strip</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">FILE_HELP_ENTRIES</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
|
|
|
|
|
<span class="p">}</span>
|
|
|
|
|
<span class="c1"># get db-based help entries, checking perms</span>
|
|
|
|
|
<span class="n">db_help_topics</span> <span class="o">=</span> <span class="p">{</span>
|
|
|
|
|
<span class="n">topic</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">strip</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="p">}</span>
|
|
|
|
|
<span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s1">'list'</span><span class="p">:</span>
|
|
|
|
|
<span class="c1"># check the view lock for all help entries/commands and determine key</span>
|
|
|
|
|
<span class="n">cmd_help_topics</span> <span class="o">=</span> <span class="p">{</span>
|
|
|
|
|
<span class="n">cmd</span><span class="o">.</span><span class="n">auto_help_display_key</span>
|
|
|
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="s2">"auto_help_display_key"</span><span class="p">)</span> <span class="k">else</span> <span class="n">cmd</span><span class="o">.</span><span class="n">key</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">cmd_help_topics</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_list_topic</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">db_help_topics</span> <span class="o">=</span> <span class="p">{</span>
|
|
|
|
|
<span class="n">key</span><span class="p">:</span> <span class="n">entry</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">db_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
|
|
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_list_topic</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">caller</span><span class="p">)</span>
|
|
|
|
|
<span class="p">}</span>
|
|
|
|
|
<span class="n">file_help_topics</span> <span class="o">=</span> <span class="p">{</span>
|
|
|
|
|
<span class="n">key</span><span class="p">:</span> <span class="n">entry</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">file_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
|
|
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_list_topic</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">caller</span><span class="p">)}</span>
|
|
|
|
|
<span class="k">else</span><span class="p">:</span>
|
|
|
|
|
<span class="c1"># query</span>
|
|
|
|
|
<span class="n">cmd_help_topics</span> <span class="o">=</span> <span class="p">{</span>
|
|
|
|
|
<span class="n">cmd</span><span class="o">.</span><span class="n">auto_help_display_key</span>
|
|
|
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="s2">"auto_help_display_key"</span><span class="p">)</span> <span class="k">else</span> <span class="n">cmd</span><span class="o">.</span><span class="n">key</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">cmd_help_topics</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_read_topic</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">db_help_topics</span> <span class="o">=</span> <span class="p">{</span>
|
|
|
|
|
<span class="n">key</span><span class="p">:</span> <span class="n">entry</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">db_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
|
|
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_read_topic</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">caller</span><span class="p">)</span>
|
|
|
|
|
<span class="p">}</span>
|
|
|
|
|
<span class="n">file_help_topics</span> <span class="o">=</span> <span class="p">{</span>
|
|
|
|
|
<span class="n">key</span><span class="p">:</span> <span class="n">entry</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">file_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
|
|
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_read_topic</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">caller</span><span class="p">)}</span>
|
|
|
|
|
|
|
|
|
|
<span class="k">return</span> <span class="n">cmd_help_topics</span><span class="p">,</span> <span class="n">db_help_topics</span><span class="p">,</span> <span class="n">file_help_topics</span></div>
|
|
|
|
|
|
|
|
|
|
<div class="viewcode-block" id="CmdHelp.do_search"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdHelp.do_search">[docs]</a> <span class="k">def</span> <span class="nf">do_search</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">,</span> <span class="n">entries</span><span class="p">,</span> <span class="n">search_fields</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
|
|
|
<span class="sd">"""</span>
|
|
|
|
|
<span class="sd"> Perform a help-query search, default using Lunr search engine.</span>
|
|
|
|
|
|
|
|
|
|
<span class="sd"> Args:</span>
|
|
|
|
|
<span class="sd"> query (str): The help entry to search for.</span>
|
|
|
|
|
<span class="sd"> entries (list): All possibilities. A mix of commands, HelpEntries and FileHelpEntries.</span>
|
|
|
|
|
<span class="sd"> search_fields (list): A list of dicts defining how Lunr will find the</span>
|
|
|
|
|
<span class="sd"> search data on the elements. If not given, will use a default.</span>
|
|
|
|
|
|
|
|
|
|
<span class="sd"> Returns:</span>
|
|
|
|
|
<span class="sd"> tuple: A tuple (match, suggestions).</span>
|
|
|
|
|
|
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">search_fields</span><span class="p">:</span>
|
|
|
|
|
<span class="c1"># lunr search fields/boosts</span>
|
|
|
|
|
<span class="n">search_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">1</span><span class="p">},</span> <span class="c1"># tags are not used by default</span>
|
|
|
|
|
<span class="p">]</span>
|
|
|
|
|
<span class="n">match</span><span class="p">,</span> <span class="n">suggestions</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
|
|
|
|
|
<span class="k">for</span> <span class="n">match_query</span> <span class="ow">in</span> <span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">query</span><span class="si">}</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. The</span>
|
|
|
|
|
<span class="c1"># return of this will either be a HelpCategory, a Command or a</span>
|
|
|
|
|
<span class="c1"># HelpEntry/FileHelpEntry.</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="n">fields</span><span class="o">=</span><span class="n">search_fields</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">break</span>
|
|
|
|
|
<span class="k">return</span> <span class="n">match</span><span class="p">,</span> <span class="n">suggestions</span></div>
|
|
|
|
|
|
|
|
|
|
<div class="viewcode-block" id="CmdHelp.parse"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.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>
|
|
|
|
|
@ -373,75 +492,52 @@
|
|
|
|
|
<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">query</span><span class="p">,</span> <span class="n">subtopics</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">topic</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">subtopics</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cmdset</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 / file-help 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="c1"># we group the file-help topics with the db ones, giving the db ones priority</span>
|
|
|
|
|
<span class="n">file_help_topics</span> <span class="o">=</span> <span class="n">FILE_HELP_ENTRIES</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="n">return_dict</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
|
|
|
<span class="n">db_topics</span> <span class="o">=</span> <span class="p">{</span>
|
|
|
|
|
<span class="n">topic</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">strip</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_db_topics</span> <span class="o">=</span> <span class="nb">list</span><span class="p">({</span><span class="o">**</span><span class="n">file_help_topics</span><span class="p">,</span> <span class="o">**</span><span class="n">db_topics</span><span class="p">}</span><span class="o">.</span><span class="n">values</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_db_topics</span><span class="p">]</span>
|
|
|
|
|
<span class="p">))</span>
|
|
|
|
|
|
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">query</span><span class="p">:</span>
|
|
|
|
|
<span class="c1"># list all available help entries, grouped by category. We want to</span>
|
|
|
|
|
<span class="c1"># build dictionaries {category: [topic, topic, ...], ...}</span>
|
|
|
|
|
<span class="n">cmd_help_dict</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">db_help_dict</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"># Filter commands that should be reached by the help</span>
|
|
|
|
|
<span class="c1"># system, but not be displayed in the table, or be displayed differently.</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">key</span> <span class="o">=</span> <span class="p">(</span><span class="n">cmd</span><span class="o">.</span><span class="n">auto_help_display_key</span>
|
|
|
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="s2">"auto_help_display_key"</span><span class="p">)</span> <span class="k">else</span> <span class="n">cmd</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
|
|
|
|
|
<span class="n">cmd_help_dict</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">key</span><span class="p">)</span>
|
|
|
|
|
<span class="n">cmd_help_topics</span><span class="p">,</span> <span class="n">db_help_topics</span><span class="p">,</span> <span class="n">file_help_topics</span> <span class="o">=</span> \
|
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">collect_topics</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s1">'list'</span><span class="p">)</span>
|
|
|
|
|
|
|
|
|
|
<span class="k">for</span> <span class="n">db_topic</span> <span class="ow">in</span> <span class="n">all_db_topics</span><span class="p">:</span>
|
|
|
|
|
<span class="n">db_help_dict</span><span class="p">[</span><span class="n">db_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">db_topic</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
|
|
|
|
|
<span class="c1"># db-topics override file-based ones</span>
|
|
|
|
|
<span class="n">file_db_help_topics</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">file_help_topics</span><span class="p">,</span> <span class="o">**</span><span class="n">db_help_topics</span><span class="p">}</span>
|
|
|
|
|
|
|
|
|
|
<span class="n">output</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_help_index</span><span class="p">(</span><span class="n">cmd_help_dict</span><span class="p">,</span> <span class="n">db_help_dict</span><span class="p">)</span>
|
|
|
|
|
<span class="c1"># group by category (cmds are listed separately)</span>
|
|
|
|
|
<span class="n">cmd_help_by_category</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">file_db_help_by_category</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="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">cmd_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
|
|
|
<span class="n">cmd_help_by_category</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">key</span><span class="p">)</span>
|
|
|
|
|
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">file_db_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
|
|
|
<span class="n">file_db_help_by_category</span><span class="p">[</span><span class="n">entry</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">key</span><span class="p">)</span>
|
|
|
|
|
|
|
|
|
|
<span class="c1"># generate the index and display</span>
|
|
|
|
|
<span class="n">output</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_help_index</span><span class="p">(</span><span class="n">cmd_help_by_category</span><span class="p">,</span>
|
|
|
|
|
<span class="n">file_db_help_by_category</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">output</span><span class="p">)</span>
|
|
|
|
|
|
|
|
|
|
<span class="k">return</span>
|
|
|
|
|
|
|
|
|
|
<span class="c1"># We have a query - try to find a specific topic/category using the</span>
|
|
|
|
|
<span class="c1"># Lunr search engine</span>
|
|
|
|
|
<span class="c1"># search for a specific entry. We need to check for 'read' access here before # building the</span>
|
|
|
|
|
<span class="c1"># set of possibilities.</span>
|
|
|
|
|
<span class="n">cmd_help_topics</span><span class="p">,</span> <span class="n">db_help_topics</span><span class="p">,</span> <span class="n">file_help_topics</span> <span class="o">=</span> \
|
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">collect_topics</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s1">'query'</span><span class="p">)</span>
|
|
|
|
|
|
|
|
|
|
<span class="c1"># all available options</span>
|
|
|
|
|
<span class="n">entries</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">all_cmds</span> <span class="k">if</span> <span class="n">cmd</span><span class="p">]</span> <span class="o">+</span> <span class="n">all_db_topics</span> <span class="o">+</span> <span class="n">all_categories</span>
|
|
|
|
|
<span class="c1"># db-help topics takes priority over file-help</span>
|
|
|
|
|
<span class="n">file_db_help_topics</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">file_help_topics</span><span class="p">,</span> <span class="o">**</span><span class="n">db_help_topics</span><span class="p">}</span>
|
|
|
|
|
|
|
|
|
|
<span class="c1"># commands take priority over the other types</span>
|
|
|
|
|
<span class="n">all_topics</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">file_db_help_topics</span><span class="p">,</span> <span class="o">**</span><span class="n">cmd_help_topics</span><span class="p">}</span>
|
|
|
|
|
|
|
|
|
|
<span class="c1"># get all categories</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="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="o">.</span><span class="n">values</span><span class="p">()))</span>
|
|
|
|
|
|
|
|
|
|
<span class="c1"># all available help options - will be searched in order. We also check # the</span>
|
|
|
|
|
<span class="c1"># read-permission here.</span>
|
|
|
|
|
<span class="n">entries</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">all_topics</span><span class="o">.</span><span class="n">values</span><span class="p">())</span> <span class="o">+</span> <span class="n">all_categories</span>
|
|
|
|
|
|
|
|
|
|
<span class="c1"># lunr search fields/boosts</span>
|
|
|
|
|
<span class="n">search_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">1</span><span class="p">},</span> <span class="c1"># tags are not used by default</span>
|
|
|
|
|
<span class="p">]</span>
|
|
|
|
|
<span class="n">match</span><span class="p">,</span> <span class="n">suggestions</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
|
|
|
|
|
|
|
|
|
|
<span class="k">for</span> <span class="n">match_query</span> <span class="ow">in</span> <span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">query</span><span class="si">}</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. The</span>
|
|
|
|
|
<span class="c1"># return of this will either be a HelpCategory, a Command or a</span>
|
|
|
|
|
<span class="c1"># HelpEntry/FileHelpEntry.</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="n">fields</span><span class="o">=</span><span class="n">search_fields</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">break</span>
|
|
|
|
|
<span class="n">match</span><span class="p">,</span> <span class="n">suggestions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">do_search</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">entries</span><span class="p">)</span>
|
|
|
|
|
|
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">match</span><span class="p">:</span>
|
|
|
|
|
<span class="c1"># no topic matches found. Only give suggestions.</span>
|
|
|
|
|
@ -480,24 +576,15 @@
|
|
|
|
|
|
|
|
|
|
<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="c1"># no subtopics for categories - these are just lists of topics</span>
|
|
|
|
|
|
|
|
|
|
<span class="n">output</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_help_index</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_db_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="n">title_lone_category</span><span class="o">=</span><span class="kc">True</span>
|
|
|
|
|
<span class="p">)</span>
|
|
|
|
|
<span class="n">category</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">key</span>
|
|
|
|
|
<span class="n">category_lower</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="n">cmds_in_category</span> <span class="o">=</span> <span class="p">[</span><span class="n">key</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">cmd_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
|
|
|
|
<span class="k">if</span> <span class="n">category_lower</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="n">topics_in_category</span> <span class="o">=</span> <span class="p">[</span><span class="n">key</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">file_db_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
|
|
|
|
<span class="k">if</span> <span class="n">category_lower</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="n">output</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_help_index</span><span class="p">({</span><span class="n">category</span><span class="p">:</span> <span class="n">cmds_in_category</span><span class="p">},</span>
|
|
|
|
|
<span class="p">{</span><span class="n">category</span><span class="p">:</span> <span class="n">topics_in_category</span><span class="p">},</span>
|
|
|
|
|
<span class="n">title_lone_category</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg_help</span><span class="p">(</span><span class="n">output</span><span class="p">)</span>
|
|
|
|
|
<span class="k">return</span>
|
|
|
|
|
|
|
|
|
|
@ -597,7 +684,7 @@
|
|
|
|
|
<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.help.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>
|
|
|
|
|
<div class="viewcode-block" id="CmdSetHelp"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.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">CmdHelp</span><span class="p">):</span>
|
|
|
|
|
<span class="sd">"""</span>
|
|
|
|
|
<span class="sd"> Edit the help database.</span>
|
|
|
|
|
|
|
|
|
|
@ -661,9 +748,15 @@
|
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
|
|
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"sethelp"</span>
|
|
|
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[]</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>
|
|
|
|
|
<span class="n">arg_regex</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
|
|
|
|
|
|
<div class="viewcode-block" id="CmdSetHelp.parse"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdSetHelp.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">"""We want to use the default parser rather than the CmdHelp.parse"""</span>
|
|
|
|
|
<span class="k">return</span> <span class="n">COMMAND_DEFAULT_CLASS</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
|
|
|
|
|
|
|
|
|
|
<div class="viewcode-block" id="CmdSetHelp.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.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>
|
|
|
|
|
@ -691,18 +784,63 @@
|
|
|
|
|
<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="n">cmd_help_topics</span><span class="p">,</span> <span class="n">db_help_topics</span><span class="p">,</span> <span class="n">file_help_topics</span> <span class="o">=</span> \
|
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">collect_topics</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">mode</span><span class="o">=</span><span class="s1">'query'</span><span class="p">)</span>
|
|
|
|
|
<span class="c1"># db-help topics takes priority over file-help</span>
|
|
|
|
|
<span class="n">file_db_help_topics</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">file_help_topics</span><span class="p">,</span> <span class="o">**</span><span class="n">db_help_topics</span><span class="p">}</span>
|
|
|
|
|
<span class="c1"># commands take priority over the other types</span>
|
|
|
|
|
<span class="n">all_topics</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">file_db_help_topics</span><span class="p">,</span> <span class="o">**</span><span class="n">cmd_help_topics</span><span class="p">}</span>
|
|
|
|
|
<span class="c1"># get all categories</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="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="o">.</span><span class="n">values</span><span class="p">()))</span>
|
|
|
|
|
<span class="c1"># all available help options - will be searched in order. We also check # the</span>
|
|
|
|
|
<span class="c1"># read-permission here.</span>
|
|
|
|
|
<span class="n">entries</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">all_topics</span><span class="o">.</span><span class="n">values</span><span class="p">())</span> <span class="o">+</span> <span class="n">all_categories</span>
|
|
|
|
|
|
|
|
|
|
<span class="c1"># default setup</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">DEFAULT_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="s2">"read:all()"</span>
|
|
|
|
|
|
|
|
|
|
<span class="c1"># search for existing entries of this or other types</span>
|
|
|
|
|
<span class="n">old_entry</span> <span class="o">=</span> <span class="kc">None</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">match</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">do_search</span><span class="p">(</span><span class="n">querystr</span><span class="p">,</span> <span class="n">entries</span><span class="p">)</span>
|
|
|
|
|
<span class="k">if</span> <span class="n">match</span><span class="p">:</span>
|
|
|
|
|
<span class="n">warning</span> <span class="o">=</span> <span class="kc">None</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">warning</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s2">"'</span><span class="si">{</span><span class="n">querystr</span><span class="si">}</span><span class="s2">' matches (or partially matches) the name of "</span>
|
|
|
|
|
<span class="s2">"help-category '</span><span class="si">{match.key}</span><span class="s2">'. If you continue, your help entry will "</span>
|
|
|
|
|
<span class="s2">"take precedence and the category (or part of its name) *may* not "</span>
|
|
|
|
|
<span class="s2">"be usable for grouping help entries anymore."</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">warning</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s2">"'</span><span class="si">{</span><span class="n">querystr</span><span class="si">}</span><span class="s2">' matches (or partially matches) the key/alias of "</span>
|
|
|
|
|
<span class="s2">"Command '</span><span class="si">{match.key}</span><span class="s2">'. Command-help take precedence over other "</span>
|
|
|
|
|
<span class="s2">"help entries so your help *may* be impossible to reach for those "</span>
|
|
|
|
|
<span class="s2">"with access to that command."</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.help.filehelp.FileHelpEntry"</span><span class="p">):</span>
|
|
|
|
|
<span class="n">warning</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s2">"'</span><span class="si">{</span><span class="n">querystr</span><span class="si">}</span><span class="s2">' matches (or partially matches) the name/alias of the "</span>
|
|
|
|
|
<span class="s2">"file-based help file '</span><span class="si">{match.key}</span><span class="s2">'. File-help entries cannot be "</span>
|
|
|
|
|
<span class="s2">"modified from in-game (they are files on-disk). If you continue, "</span>
|
|
|
|
|
<span class="s2">"your help entry *may* shadow the file-based one's name partly or "</span>
|
|
|
|
|
<span class="s2">"completely."</span><span class="p">)</span>
|
|
|
|
|
<span class="k">if</span> <span class="n">warning</span><span class="p">:</span>
|
|
|
|
|
<span class="c1"># show a warning for a clashing help-entry type. Even if user accepts this</span>
|
|
|
|
|
<span class="c1"># we don't break here since we may need to show warnings for other inputs.</span>
|
|
|
|
|
<span class="c1"># We don't count this as an old-entry hit because we can't edit these</span>
|
|
|
|
|
<span class="c1"># types of entries.</span>
|
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">"|rWarning:</span><span class="se">\n</span><span class="s2">|r</span><span class="si">{</span><span class="n">warning</span><span class="si">}</span><span class="s2">|n"</span><span class="p">)</span>
|
|
|
|
|
<span class="n">repl</span> <span class="o">=</span> <span class="k">yield</span><span class="p">(</span><span class="s2">"|wDo you still want to continue? Y/[N]?|n"</span><span class="p">)</span>
|
|
|
|
|
<span class="k">if</span> <span class="n">repl</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'y'</span><span class="p">,</span> <span class="s1">'yes'</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">"Aborted."</span><span class="p">)</span>
|
|
|
|
|
<span class="k">return</span>
|
|
|
|
|
<span class="k">else</span><span class="p">:</span>
|
|
|
|
|
<span class="c1"># a db-based help entry - this is OK</span>
|
|
|
|
|
<span class="n">old_entry</span> <span class="o">=</span> <span class="n">match</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">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="n">DEFAULT_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="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>
|
|
|
|
|
@ -771,8 +909,8 @@
|
|
|
|
|
<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="sa">f</span><span class="s2">"Topic '</span><span class="si">{</span><span class="n">topicstr</span><span class="si">}</span><span class="s2">'</span><span class="si">{</span><span class="n">aliastxt</span><span class="si">}</span><span class="s2"> already exists. Use /edit to open in editor, or "</span>
|
|
|
|
|
<span class="s2">"/replace, /append and /merge to modify it directly."</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>
|
|
|
|
|
@ -780,7 +918,7 @@
|
|
|
|
|
<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="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Topic '</span><span class="si">{</span><span class="n">topicstr</span><span class="si">}</span><span class="s2">'</span><span class="si">{</span><span class="n">aliastxt</span><span class="si">}</span><span class="s2"> was successfully created."</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>
|
|
|
|
|
@ -795,7 +933,7 @@
|
|
|
|
|
<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="sa">f</span><span class="s2">"Error when creating topic '</span><span class="si">{</span><span class="n">topicstr</span><span class="si">}</span><span class="s2">'</span><span class="si">{</span><span class="n">aliastxt</span><span class="si">}</span><span class="s2">! Contact an admin."</span>
|
|
|
|
|
<span class="p">)</span></div></div>
|
|
|
|
|
</pre></div>
|
|
|
|
|
|
|
|
|
|
|