Resources for indexing help entries and for splitting help entries into sub-categories.

This is used primarily by the default help command.

evennia.help.utils.help_search_with_index(query, candidate_entries, suggestion_maxnum=5, fields=None)[source]

Lunr-powered fast index search and suggestion wrapper. See https://lunrjs.com/.

  • query (str) – The query to search for.

  • candidate_entries (list) – This is the body of possible entities to search. Each must have a property .search_index_entry that returns a dict with all keys in the fields arg.

  • suggestion_maxnum (int) – How many matches to allow at most in a multi-match.

  • fields (list, optional) – A list of Lunr field mappings **{“field_name”: str, “boost”: int}**. See the Lunr documentation for more details. The field name must exist in the dicts returned by .search_index_entry of the candidates. If not given, a default setup is used, prefering keys > aliases > category > tags.



A tuple (matches, suggestions), each a list, where the suggestion_maxnum limits

how many suggestions are included.


Parse a command docstring for special sub-category blocks:


entry (str) – A help entry to parse



The dict is a mapping that splits the entry into subcategories. This

will always hold a key None for the main help entry and zero or more keys holding the subcategories. Each is itself a dict with a key None for the main text of that subcategory followed by any sub-sub-categories down to a max-depth of 5.


Main topic text


## foo

A subcategory of the main entry, accessible as **help topic foo**
(or using /, like **help topic/foo**)

## bar

Another subcategory, accessed as **help topic bar**
(or **help topic/bar**)

### moo

A subcategory of bar, accessed as **help bar moo**
(or **help bar/moo**)

#### dum

A subcategory of moo, accessed **help bar moo dum**
(or **help bar/moo/dum**)


This will result in this returned entry structure:

   None: "Main topic text":
   "foo": {
        None: "main topic/foo text"
   "bar": {
        None: "Main topic/bar text",
        "moo": {
            None: "topic/bar/moo text"
            "dum": {
                None: "topic/bar/moo/dum text"