Feat: New contrib; in-gamereports for handling user reportgs,
+bugs etc in-game (InspectorCaracal)
Feat: Add ANSI color support |U, |I, |i, |s, |S for
underline reset, italic/reset and strikethrough/reset (0xDEADFED5)
Fix: Issue where rpsystem contrib search would do a global instead
diff --git a/docs/latest/Contribs/Contrib-Ingame-Reports.html b/docs/latest/Contribs/Contrib-Ingame-Reports.html
index f9bc00116f..8cb07c69dc 100644
--- a/docs/latest/Contribs/Contrib-Ingame-Reports.html
+++ b/docs/latest/Contribs/Contrib-Ingame-Reports.html
@@ -130,6 +130,7 @@
This contrib provides an in-game reports system, handling bug reports, player reports, and idea submissions by default. It also supports adding your own types of reports, or removing any of the default report types.
Each type of report has its own command for submitting new reports, and an admin command is also provided for managing the reports through a menu.
@@ -232,7 +233,7 @@
Usage: customreport <message>
-
+
This is a custom report type. """
diff --git a/docs/latest/Contribs/Contribs-Overview.html b/docs/latest/Contribs/Contribs-Overview.html
index 4c156330b7..8ec6215f0e 100644
--- a/docs/latest/Contribs/Contribs-Overview.html
+++ b/docs/latest/Contribs/Contribs-Overview.html
@@ -411,9 +411,9 @@ this module carefully before continuing.
This contrib provides an in-game reports system, handling bug reports, player reports, and idea submissions by default. It also supports adding your own types of reports, or removing any of the default report types.
-
Each type of report has its own command for submitting new reports, and an admin command is also provided for managing the reports through a menu.
This contrib provides an in-game reports system, handling bug reports, player reports, and idea submissions by default. It also supports adding your own types of reports, or removing any of the default report types.
Source code for evennia.contrib.base_systems.ingame_reports.menu
+"""
+The report-management menu module.
+"""
+
+fromdjango.confimportsettings
+
+fromevennia.comms.modelsimportMsg
+fromevennia.utilsimportlogger
+fromevennia.utils.utilsimportcrop,datetime_format,is_iter,iter_to_str
+
+# the number of reports displayed on each page
+_REPORTS_PER_PAGE=10
+
+_REPORT_STATUS_TAGS=("closed","in progress")
+ifhasattr(settings,"INGAME_REPORT_STATUS_TAGS"):
+ ifis_iter(settings.INGAME_REPORT_STATUS_TAGS):
+ _REPORT_STATUS_TAGS=settings.INGAME_REPORT_STATUS_TAGS
+ else:
+ logger.log_warn(
+ "The 'INGAME_REPORT_STATUS_TAGS' setting must be an iterable of strings; falling back to defaults."
+ )
+
+
+
[docs]defmenunode_list_reports(caller,raw_string,**kwargs):
+"""Paginates and lists out reports for the provided hub"""
+ hub=caller.ndb._evmenu.hub
+
+ page=kwargs.get("page",0)
+ start=page*_REPORTS_PER_PAGE
+ end=start+_REPORTS_PER_PAGE
+ report_slice=report_list[start:end]
+ hub_name=" ".join(hub.key.split("_")).title()
+ text=f"Managing {hub_name}"
+
+ ifnot(report_list:=getattr(caller.ndb._evmenu,"report_list",None)):
+ report_list=Msg.objects.search_message(receiver=hub).order_by("db_date_created")
+ caller.ndb._evmenu.report_list=report_list
+ # allow the menu to filter print-outs by status
+ ifkwargs.get("status"):
+ new_report_list=report_list.filter(db_tags__db_key=kwargs["status"])
+ # we don't filter reports if there are no reports under that filter
+ ifnotnew_report_list:
+ text=f"(No {kwargs['status']} reports)\n{text}"
+ else:
+ report_list=new_report_list
+ text=f"Managing {kwargs['status']}{hub_name}"
+ else:
+ report_list=report_list.exclude(db_tags__db_key="closed")
+
+ # filter by lock access
+ report_list=[msgformsginreport_listifmsg.access(caller,"read")]
+
+ # this will catch both no reports filed and no permissions
+ ifnotreport_list:
+ return"There is nothing there for you to manage.",{}
+
+ options=[
+ {
+ "desc":f"{datetime_format(report.date_created)} - {crop(report.message,50)}",
+ "goto":("menunode_manage_report",{"report":report}),
+ }
+ forreportinreport_slice
+ ]
+ options.append(
+ {
+ "key":("|uF|nilter by status","filter","status","f"),
+ "goto":"menunode_choose_filter",
+ }
+ )
+ ifstart>0:
+ options.append(
+ {
+ "key":(f"|uP|nrevious {_REPORTS_PER_PAGE}","previous","prev","p"),
+ "goto":(
+ "menunode_list_reports",
+ {"page":max(start-_REPORTS_PER_PAGE,0)//_REPORTS_PER_PAGE},
+ ),
+ }
+ )
+ ifend<len(report_list):
+ options.append(
+ {
+ "key":(f"|uN|next {_REPORTS_PER_PAGE}","next","n"),
+ "goto":(
+ "menunode_list_reports",
+ {"page":(start+_REPORTS_PER_PAGE)//_REPORTS_PER_PAGE},
+ ),
+ }
+ )
+ returntext,options
+
+
+
[docs]defmenunode_choose_filter(caller,raw_string,**kwargs):
+"""apply or clear a status filter to the main report view"""
+ text="View which reports?"
+ # options for all the possible statuses
+ options=[
+ {"desc":status,"goto":("menunode_list_reports",{"status":status})}
+ forstatusin_REPORT_STATUS_TAGS
+ ]
+ # no filter
+ options.append({"desc":"All open reports","goto":"menunode_list_reports"})
+ returntext,options
+
+
+def_report_toggle_tag(caller,raw_string,report,tag,**kwargs):
+"""goto callable to toggle a status tag on or off"""
+ iftaginreport.tags.all():
+ report.tags.remove(tag)
+ else:
+ report.tags.add(tag)
+ return("menunode_manage_report",{"report":report})
+
+
+
[docs]defmenunode_manage_report(caller,raw_string,report,**kwargs):
+"""
+ Read out the full report text and targets, and allow for changing the report's status.
+ """
+ receivers=[rforrinreport.receiversifr!=caller.ndb._evmenu.hub]
+ text=f"""\
+{report.message}
+{datetime_format(report.date_created)} by {iter_to_str(report.senders)}{' about '+iter_to_str(r.get_display_name(caller)forrinreceivers)ifreceiverselse''}
+{iter_to_str(report.tags.all())}"""
+
+ options=[]
+ fortagin_REPORT_STATUS_TAGS:
+ options.append(
+ {
+ "desc":f"{'Unmark'iftaginreport.tags.all()else'Mark'} as {tag}",
+ "goto":(_report_toggle_tag,{"report":report,"tag":tag}),
+ }
+ )
+ options.append({"desc":f"Manage another report","goto":"menunode_list_reports"})
+ returntext,options
Source code for evennia.contrib.base_systems.ingame_reports.reports
+"""
+In-Game Reporting System
+
+This contrib provides an in-game reporting system, with player-facing commands and a staff
+management interface.
+
+# Installation
+
+To install, just add the provided cmdset to your default AccountCmdSet:
+
+ # in commands/default_cmdset.py
+
+ from evennia.contrib.base_systems.ingame_reports import ReportsCmdSet
+
+ class AccountCmdSet(default_cmds.AccountCmdSet):
+ # ...
+
+ def at_cmdset_creation(self):
+ # ...
+ self.add(ReportsCmdSet)
+
+# Features
+
+The contrib provides three commands by default and their associated report types: `CmdBug`, `CmdIdea`,
+and `CmdReport` (which is for reporting other players).
+
+The `ReportCmdBase` class holds most of the functionality for creating new reports, providing a
+convenient parent class for adding your own categories of reports.
+
+The contrib can be further configured through two settings, `INGAME_REPORT_TYPES` and `INGAME_REPORT_STATUS_TAGS`
+
+"""
+
+fromdjango.confimportsettings
+
+fromevenniaimportCmdSet
+fromevennia.utilsimportcreate,evmenu,logger,search
+fromevennia.utils.utilsimportclass_from_module,datetime_format,is_iter,iter_to_str
+fromevennia.commands.default.muxcommandimportMuxCommand
+fromevennia.comms.modelsimportMsg
+
+from.importmenu
+
+_DEFAULT_COMMAND_CLASS=class_from_module(settings.COMMAND_DEFAULT_CLASS)
+
+# the default report types
+_REPORT_TYPES=("bugs","ideas","players")
+ifhasattr(settings,"INGAME_REPORT_TYPES"):
+ ifis_iter(settings.INGAME_REPORT_TYPES):
+ _REPORT_TYPES=settings.INGAME_REPORT_TYPES
+ else:
+ logger.log_warn(
+ "The 'INGAME_REPORT_TYPES' setting must be an iterable of strings; falling back to defaults."
+ )
+
+
+def_get_report_hub(report_type):
+"""
+ A helper function to retrieve the global script which acts as the hub for a given report type.
+
+ Args:
+ report_type (str): The category of reports to retrieve the script for.
+
+ Returns:
+ Script or None: The global script, or None if it couldn't be retrieved or created
+
+ Note: If no matching valid script exists, this function will attempt to create it.
+ """
+ hub_key=f"{report_type}_reports"
+ # NOTE: due to a regression in GLOBAL_SCRIPTS, we use search_script instead of the container
+ ifnot(hub:=search.search_script(hub_key)):
+ hub=create.create_script(key=hub_key)
+ returnhuborNone
+
+
+
[docs]classCmdManageReports(_DEFAULT_COMMAND_CLASS):
+"""
+ manage the various reports
+
+ Usage:
+ manage [report type]
+
+ Available report types:
+ bugs
+ ideas
+ players
+
+ Initializes a menu for reviewing and changing the status of current reports.
+ """
+
+ key="manage reports"
+ aliases=tuple(f"manage {report_type}"forreport_typein_REPORT_TYPES)
+ locks="cmd:pperm(Admin)"
+
+
[docs]defget_help(self):
+"""Returns a help string containing the configured available report types"""
+
+ report_types=iter_to_str("\n ".join(_REPORT_TYPES))
+
+ helptext=f"""\
+manage the various reports
+
+Usage:
+ manage [report type]
+
+Available report types:
+{report_types}
+
+Initializes a menu for reviewing and changing the status of current reports.
+"""
+
+ returnhelptext
+
+
[docs]deffunc(self):
+ report_type=self.cmdstring.split()[-1]
+ ifreport_type=="reports":
+ report_type="players"
+ ifreport_typenotin_REPORT_TYPES:
+ self.msg(f"'{report_type}' is not a valid report category.")
+ return
+ # remove the trailing s, just so everything reads nicer
+ report_type=report_type[:-1]
+ hub=_get_report_hub(report_type)
+ ifnothub:
+ self.msg("You cannot manage that.")
+
+ evmenu.EvMenu(
+ self.account,menu,startnode="menunode_list_reports",hub=hub,persistent=True
+ )
+
+
+
[docs]classReportCmdBase(_DEFAULT_COMMAND_CLASS):
+"""
+ A parent class for creating report commands. This help text may be displayed if
+ your command's help text is not properly configured.
+ """
+
+ help_category="reports"
+ # defines what locks the reports generated by this command will have set
+ report_locks="read:pperm(Admin)"
+ # determines if the report can be filed without a target
+ require_target=False
+ # the message sent to the reporter after the report has been created
+ success_msg="Your report has been filed."
+ # the report type for this command, if different from the key
+ report_type=None
+
+
[docs]defat_pre_cmd(self):
+"""validate that the needed hub script exists - if not, cancel the command"""
+ hub=_get_report_hub(self.report_typeorself.key)
+ ifnothub:
+ # a return value of True from `at_pre_cmd` cancels the command
+ returnTrue
+ self.hub=hub
+ returnsuper().at_pre_cmd()
+
+
[docs]defparse(self):
+"""
+ Parse the target and message out of the arguments.
+
+ Override if you want different syntax, but make sure to assign `report_message` and `target_str`.
+ """
+ # do the base MuxCommand parsing first
+ super().parse()
+ # split out the report message and target strings
+ ifself.rhs:
+ self.report_message=self.rhs
+ self.target_str=self.lhs
+ else:
+ self.report_message=self.lhs
+ self.target_str=""
+
+
[docs]deftarget_search(self,searchterm,**kwargs):
+"""
+ Search for a target that matches the given search term. By default, does a normal search via the
+ caller - a local object search for a Character, or an account search for an Account.
+
+ Args:
+ searchterm (str) - The string to search for
+
+ Returns:
+ result (Object, Account, or None) - the result of the search
+ """
+ returnself.caller.search(searchterm)
+
+
[docs]defcreate_report(self,*args,**kwargs):
+"""
+ Creates the report. By default, this creates a Msg with any provided args and kwargs.
+
+ Returns:
+ success (bool) - True if the report was created successfully, or False if there was an issue.
+ """
+ returncreate.create_message(*args,**kwargs)
+
+
[docs]deffunc(self):
+ hub=self.hub
+ ifnotself.args:
+ self.msg("You must provide a message.")
+ return
+
+ target=None
+ ifself.target_str:
+ target=self.target_search(self.target_str)
+ ifnottarget:
+ return
+ elifself.require_target:
+ self.msg("You must include a target.")
+ return
+
+ receivers=[hub]
+ iftarget:
+ receivers.append(target)
+
+ ifself.create_report(
+ self.account,self.report_message,receivers=receivers,locks=self.report_locks,tags=["report"]
+ ):
+ # the report Msg was successfully created
+ self.msg(self.success_msg)
+ else:
+ # something went wrong
+ self.msg(
+ "Something went wrong creating your report. Please try again later or contact staff directly."
+ )
+
+
+# The commands below are the usable reporting commands
+
+
+
[docs]classCmdBug(ReportCmdBase):
+"""
+ file a bug
+
+ Usage:
+ bug [<target> =] <message>
+
+ Note: If a specific object, location or character is bugged, please target it for the report.
+
+ Examples:
+ bug hammer = This doesn't work as a crafting tool but it should
+ bug every time I go through a door I get the message twice
+ """
+
+ key="bug"
+ report_locks="read:pperm(Developer)"
+
+
+
[docs]classCmdReport(ReportCmdBase):
+"""
+ report a player
+
+ Usage:
+ report <player> = <message>
+
+ All player reports will be reviewed.
+ """
+
+ key="report"
+ report_type="player"
+ require_target=True
+ account_caller=True
+
+
+
[docs]classCmdIdea(ReportCmdBase):
+"""
+ submit a suggestion
+
+ Usage:
+ ideas
+ idea <message>
+
+ Example:
+ idea wouldn't it be cool if we had horses we could ride
+ """
+
+ key="idea"
+ aliases=("ideas",)
+ report_locks="read:pperm(Builder)"
+ success_msg="Thank you for your suggestion!"
+
+
[docs]deffunc(self):
+ # we add an extra feature to this command, allowing you to see all your submitted ideas
+ ifself.cmdstring=="ideas":
+ # list your ideas
+ if(
+ ideas:=Msg.objects.search_message(sender=self.account,receiver=self.hub)
+ .order_by("-db_date_created")
+ .exclude(db_tags__db_key="closed")
+ ):
+ # todo: use a paginated menu
+ self.msg(
+ "Ideas you've submitted:\n "
+ +"\n ".join(
+ f"|w{item.message}|n (submitted {datetime_format(item.date_created)})"
+ foriteminideas
+ )
+ )
+ else:
+ self.msg("You have no open suggestions.")
+ return
+ # proceed to do the normal report-command functionality
+ super().func()
[docs]@patch.object(create,"create_message",new=MagicMock())
+ deftest_report_cmd_base(self):
+"""verify that the base command functionality works"""
+ cmd=reports.ReportCmdBase
+
+ # avoid test side-effects
+ withpatch.object(cmd,"at_pre_cmd",new=_mock_pre)as_:
+ # no arguments
+ self.call(cmd(),"","You must provide a message.")
+ # arguments, no target, no target required
+ self.call(cmd(),"test","Your report has been filed.")
+ # arguments, custom success message
+ custom_success="custom success message"
+ cmd.success_msg=custom_success
+ self.call(cmd(),"test",custom_success)
+ # arguments, no target, target required
+ cmd.require_target=True
+ self.call(cmd(),"test","You must include a target.")
+
+
[docs]@patch.object(create,"create_message",new=MagicMock())
+ @patch.object(reports,"datetime_format",return_value="now")
+ deftest_ideas_list(self,mock_datetime_format):
+ cmd=reports.CmdIdea
+
+ fake_ideas=_MockQuerySet([TempMsg(message=f"idea {i+1}")foriinrange(3)])
+ expected="""\
+Ideas you've submitted:
+ idea 1 (submitted now)
+ idea 2 (submitted now)
+ idea 3 (submitted now)
+"""
+
+ withpatch.object(cmd,"at_pre_cmd",new=_mock_pre)as_:
+ # submitting an idea
+ self.call(cmd(),"","You must provide a message.")
+ # arguments, no target, no target required
+ self.call(cmd(),"test","Thank you for your suggestion!")
+
+ # viewing your submitted ideas
+ withpatch.object(reports.Msg.objects,"search_message",return_value=fake_ideas):
+ self.call(cmd(),"",cmdstring="ideas",msg=expected)
diff --git a/docs/latest/_sources/Coding/Changelog.md.txt b/docs/latest/_sources/Coding/Changelog.md.txt
index a2d8c84dd2..33b9f5531d 100644
--- a/docs/latest/_sources/Coding/Changelog.md.txt
+++ b/docs/latest/_sources/Coding/Changelog.md.txt
@@ -2,6 +2,8 @@
## Main
+- [Feat][pull3531]: New contrib; `in-game reports` for handling user reportgs,
+ bugs etc in-game (InspectorCaracal)
- [Feat][pull3586]: Add ANSI color support `|U`, `|I`, `|i`, `|s`, `|S` for
underline reset, italic/reset and strikethrough/reset (0xDEADFED5)
- [Fix][pull3550]: Issue where rpsystem contrib search would do a global instead
@@ -18,6 +20,7 @@ underline reset, italic/reset and strikethrough/reset (0xDEADFED5)
[pull3571]: https://github.com/evennia/evennia/pull/3571
[pull3586]: https://github.com/evennia/evennia/pull/3586
[pull3550]: https://github.com/evennia/evennia/pull/3550
+[pull3531]: https://github.com/evennia/evennia/pull/3531
## Evennia 4.2.0
diff --git a/docs/latest/_sources/Contribs/Contrib-Ingame-Reports.md.txt b/docs/latest/_sources/Contribs/Contrib-Ingame-Reports.md.txt
index a2103f6f3b..20157af3f9 100644
--- a/docs/latest/_sources/Contribs/Contrib-Ingame-Reports.md.txt
+++ b/docs/latest/_sources/Contribs/Contrib-Ingame-Reports.md.txt
@@ -1,5 +1,7 @@
# In-Game Reporting System
+Contrib by InspectorCaracal, 2024
+
This contrib provides an in-game reports system, handling bug reports, player reports, and idea submissions by default. It also supports adding your own types of reports, or removing any of the default report types.
Each type of report has its own command for submitting new reports, and an admin command is also provided for managing the reports through a menu.
@@ -116,7 +118,7 @@ class CmdCustomReport(ReportCmdBase):
Usage:
customreport
-
+
This is a custom report type.
"""
@@ -127,6 +129,7 @@ class CmdCustomReport(ReportCmdBase):
Add this new command to your default cmdset to enable filing your new report type.
+
----
This document page is generated from `evennia/contrib/base_systems/ingame_reports/README.md`. Changes to this
diff --git a/docs/latest/_sources/Contribs/Contribs-Overview.md.txt b/docs/latest/_sources/Contribs/Contribs-Overview.md.txt
index 877440d2eb..f19fb61548 100644
--- a/docs/latest/_sources/Contribs/Contribs-Overview.md.txt
+++ b/docs/latest/_sources/Contribs/Contribs-Overview.md.txt
@@ -177,9 +177,9 @@ this module carefully before continuing.
### `ingame_reports`
-_This contrib provides an in-game reports system, handling bug reports, player reports, and idea submissions by default. It also supports adding your own types of reports, or removing any of the default report types._
+_Contrib by InspectorCaracal, 2024_
-Each type of report has its own command for submitting new reports, and an admin command is also provided for managing the reports through a menu.
+This contrib provides an in-game reports system, handling bug reports, player reports, and idea submissions by default. It also supports adding your own types of reports, or removing any of the default report types.
[Read the documentation](./Contrib-Ingame-Reports.md) - [Browse the Code](evennia.contrib.base_systems.ingame_reports)
diff --git a/docs/latest/_sources/api/evennia.contrib.base_systems.ingame_reports.md.txt b/docs/latest/_sources/api/evennia.contrib.base_systems.ingame_reports.md.txt
new file mode 100644
index 0000000000..c7d130792c
--- /dev/null
+++ b/docs/latest/_sources/api/evennia.contrib.base_systems.ingame_reports.md.txt
@@ -0,0 +1,19 @@
+```{eval-rst}
+evennia.contrib.base\_systems.ingame\_reports
+=====================================================
+
+.. automodule:: evennia.contrib.base_systems.ingame_reports
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+
+
+.. toctree::
+ :maxdepth: 6
+
+ evennia.contrib.base_systems.ingame_reports.menu
+ evennia.contrib.base_systems.ingame_reports.reports
+ evennia.contrib.base_systems.ingame_reports.tests
+
+```
\ No newline at end of file
diff --git a/docs/latest/_sources/api/evennia.contrib.base_systems.ingame_reports.menu.md.txt b/docs/latest/_sources/api/evennia.contrib.base_systems.ingame_reports.menu.md.txt
new file mode 100644
index 0000000000..e253b05d69
--- /dev/null
+++ b/docs/latest/_sources/api/evennia.contrib.base_systems.ingame_reports.menu.md.txt
@@ -0,0 +1,10 @@
+```{eval-rst}
+evennia.contrib.base\_systems.ingame\_reports.menu
+=========================================================
+
+.. automodule:: evennia.contrib.base_systems.ingame_reports.menu
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+```
\ No newline at end of file
diff --git a/docs/latest/_sources/api/evennia.contrib.base_systems.ingame_reports.reports.md.txt b/docs/latest/_sources/api/evennia.contrib.base_systems.ingame_reports.reports.md.txt
new file mode 100644
index 0000000000..acdcee38f5
--- /dev/null
+++ b/docs/latest/_sources/api/evennia.contrib.base_systems.ingame_reports.reports.md.txt
@@ -0,0 +1,10 @@
+```{eval-rst}
+evennia.contrib.base\_systems.ingame\_reports.reports
+============================================================
+
+.. automodule:: evennia.contrib.base_systems.ingame_reports.reports
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+```
\ No newline at end of file
diff --git a/docs/latest/_sources/api/evennia.contrib.base_systems.ingame_reports.tests.md.txt b/docs/latest/_sources/api/evennia.contrib.base_systems.ingame_reports.tests.md.txt
new file mode 100644
index 0000000000..3cb42bee82
--- /dev/null
+++ b/docs/latest/_sources/api/evennia.contrib.base_systems.ingame_reports.tests.md.txt
@@ -0,0 +1,10 @@
+```{eval-rst}
+evennia.contrib.base\_systems.ingame\_reports.tests
+==========================================================
+
+.. automodule:: evennia.contrib.base_systems.ingame_reports.tests
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+```
\ No newline at end of file
diff --git a/docs/latest/_sources/api/evennia.contrib.base_systems.md.txt b/docs/latest/_sources/api/evennia.contrib.base_systems.md.txt
index 3b8409adcf..781ff3f24b 100644
--- a/docs/latest/_sources/api/evennia.contrib.base_systems.md.txt
+++ b/docs/latest/_sources/api/evennia.contrib.base_systems.md.txt
@@ -19,6 +19,7 @@ evennia.contrib.base\_systems
evennia.contrib.base_systems.email_login
evennia.contrib.base_systems.godotwebsocket
evennia.contrib.base_systems.ingame_python
+ evennia.contrib.base_systems.ingame_reports
evennia.contrib.base_systems.menu_login
evennia.contrib.base_systems.mux_comms_cmds
evennia.contrib.base_systems.unixcommand
diff --git a/docs/latest/api/evennia-api.html b/docs/latest/api/evennia-api.html
index 97a98bab07..7d9506ed22 100644
--- a/docs/latest/api/evennia-api.html
+++ b/docs/latest/api/evennia-api.html
@@ -211,6 +211,16 @@
-search_index_entry = {'aliases': 'remit pemit', 'category': 'admin', 'key': 'emit', 'no_prefix': ' remit pemit', 'tags': '', 'text': '\n admin command for emitting message to multiple objects\n\n Usage:\n emit[/switches] [<obj>, <obj>, ... =] <message>\n remit [<obj>, <obj>, ... =] <message>\n pemit [<obj>, <obj>, ... =] <message>\n\n Switches:\n room - limit emits to rooms only (default)\n accounts - limit emits to accounts only\n contents - send to the contents of matched objects too\n\n Emits a message to the selected objects or to\n your immediate surroundings. If the object is a room,\n send to its contents. remit and pemit are just\n limited forms of emit, for sending to rooms and\n to accounts respectively.\n '}¶
+search_index_entry = {'aliases': 'pemit remit', 'category': 'admin', 'key': 'emit', 'no_prefix': ' pemit remit', 'tags': '', 'text': '\n admin command for emitting message to multiple objects\n\n Usage:\n emit[/switches] [<obj>, <obj>, ... =] <message>\n remit [<obj>, <obj>, ... =] <message>\n pemit [<obj>, <obj>, ... =] <message>\n\n Switches:\n room - limit emits to rooms only (default)\n accounts - limit emits to accounts only\n contents - send to the contents of matched objects too\n\n Emits a message to the selected objects or to\n your immediate surroundings. If the object is a room,\n send to its contents. remit and pemit are just\n limited forms of emit, for sending to rooms and\n to accounts respectively.\n '}¶
diff --git a/docs/latest/api/evennia.commands.default.building.html b/docs/latest/api/evennia.commands.default.building.html
index c2e5e2e6ec..841c904b80 100644
--- a/docs/latest/api/evennia.commands.default.building.html
+++ b/docs/latest/api/evennia.commands.default.building.html
@@ -1415,7 +1415,7 @@ server settings.
-search_index_entry = {'aliases': '@type @typeclasses @parent @swap @update', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass type typeclasses parent swap update', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}¶
+search_index_entry = {'aliases': '@swap @update @typeclasses @parent @type', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass swap update typeclasses parent type', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}¶
@@ -1601,7 +1601,7 @@ If object is not specified, the current location is examined.
@@ -1874,7 +1874,7 @@ the cases, see the module doc.
-search_index_entry = {'aliases': '@ex @exam', 'category': 'building', 'key': '@examine', 'no_prefix': 'examine ex exam', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [<object>[/attrname]]\n examine [*<account>[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n script - examine a Script\n channel - examine a Channel\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}¶
+search_index_entry = {'aliases': '@exam @ex', 'category': 'building', 'key': '@examine', 'no_prefix': 'examine exam ex', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [<object>[/attrname]]\n examine [*<account>[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n script - examine a Script\n channel - examine a Channel\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}¶
diff --git a/docs/latest/api/evennia.commands.default.comms.html b/docs/latest/api/evennia.commands.default.comms.html
index 0fa48db791..e1cd9627c3 100644
--- a/docs/latest/api/evennia.commands.default.comms.html
+++ b/docs/latest/api/evennia.commands.default.comms.html
@@ -270,7 +270,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.
-search_index_entry = {'aliases': '@chan @channels', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel chan channels', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶
+search_index_entry = {'aliases': '@channels @chan', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel channels chan', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶
@@ -948,7 +948,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.
@@ -968,7 +968,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.
-search_index_entry = {'aliases': '@chan @channels', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel chan channels', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶
+search_index_entry = {'aliases': '@channels @chan', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel channels chan', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}¶
diff --git a/docs/latest/api/evennia.commands.default.general.html b/docs/latest/api/evennia.commands.default.general.html
index 880c9de8e9..23e884af23 100644
--- a/docs/latest/api/evennia.commands.default.general.html
+++ b/docs/latest/api/evennia.commands.default.general.html
@@ -282,7 +282,7 @@ for everyone to use, you need build privileges and the alias command.
@@ -314,7 +314,7 @@ for everyone to use, you need build privileges and the alias command.
-search_index_entry = {'aliases': 'nicks nickname', 'category': 'general', 'key': 'nick', 'no_prefix': ' nicks nickname', 'tags': '', 'text': '\n define a personal alias/nick by defining a string to\n match and replace it with another on the fly\n\n Usage:\n nick[/switches] <string> [= [replacement_string]]\n nick[/switches] <template> = <replacement_template>\n nick/delete <string> or number\n nicks\n\n Switches:\n inputline - replace on the inputline (default)\n object - replace on object-lookup\n account - replace on account-lookup\n list - show all defined aliases (also "nicks" works)\n delete - remove nick by index in /list\n clearall - clear all nicks\n\n Examples:\n nick hi = say Hello, I\'m Sarah!\n nick/object tom = the tall man\n nick build $1 $2 = create/drop $1;$2\n nick tell $1 $2=page $1=$2\n nick tm?$1=page tallman=$1\n nick tm\\=$1=page tallman=$1\n\n A \'nick\' is a personal string replacement. Use $1, $2, ... to catch arguments.\n Put the last $-marker without an ending space to catch all remaining text. You\n can also use unix-glob matching for the left-hand side <string>:\n\n * - matches everything\n ? - matches 0 or 1 single characters\n [abcd] - matches these chars in any order\n [!abcd] - matches everything not among these chars\n \\= - escape literal \'=\' you want in your <string>\n\n Note that no objects are actually renamed or changed by this command - your nicks\n are only available to you. If you want to permanently add keywords to an object\n for everyone to use, you need build privileges and the alias command.\n\n '}¶
+search_index_entry = {'aliases': 'nickname nicks', 'category': 'general', 'key': 'nick', 'no_prefix': ' nickname nicks', 'tags': '', 'text': '\n define a personal alias/nick by defining a string to\n match and replace it with another on the fly\n\n Usage:\n nick[/switches] <string> [= [replacement_string]]\n nick[/switches] <template> = <replacement_template>\n nick/delete <string> or number\n nicks\n\n Switches:\n inputline - replace on the inputline (default)\n object - replace on object-lookup\n account - replace on account-lookup\n list - show all defined aliases (also "nicks" works)\n delete - remove nick by index in /list\n clearall - clear all nicks\n\n Examples:\n nick hi = say Hello, I\'m Sarah!\n nick/object tom = the tall man\n nick build $1 $2 = create/drop $1;$2\n nick tell $1 $2=page $1=$2\n nick tm?$1=page tallman=$1\n nick tm\\=$1=page tallman=$1\n\n A \'nick\' is a personal string replacement. Use $1, $2, ... to catch arguments.\n Put the last $-marker without an ending space to catch all remaining text. You\n can also use unix-glob matching for the left-hand side <string>:\n\n * - matches everything\n ? - matches 0 or 1 single characters\n [abcd] - matches these chars in any order\n [!abcd] - matches everything not among these chars\n \\= - escape literal \'=\' you want in your <string>\n\n Note that no objects are actually renamed or changed by this command - your nicks\n are only available to you. If you want to permanently add keywords to an object\n for everyone to use, you need build privileges and the alias command.\n\n '}¶
@@ -611,7 +611,7 @@ placing it in their inventory.
@@ -642,7 +642,7 @@ placing it in their inventory.
-search_index_entry = {'aliases': '" \'', 'category': 'general', 'key': 'say', 'no_prefix': ' " \'', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}¶
+search_index_entry = {'aliases': '\' "', 'category': 'general', 'key': 'say', 'no_prefix': ' \' "', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}¶
@@ -722,7 +722,7 @@ automatically begin with your name.
-search_index_entry = {'aliases': ': emote', 'category': 'general', 'key': 'pose', 'no_prefix': ' : emote', 'tags': '', 'text': "\n strike a pose\n\n Usage:\n pose <pose text>\n pose's <pose text>\n\n Example:\n pose is standing by the wall, smiling.\n -> others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n "}¶
+search_index_entry = {'aliases': 'emote :', 'category': 'general', 'key': 'pose', 'no_prefix': ' emote :', 'tags': '', 'text': "\n strike a pose\n\n Usage:\n pose <pose text>\n pose's <pose text>\n\n Example:\n pose is standing by the wall, smiling.\n -> others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n "}¶
diff --git a/docs/latest/api/evennia.commands.default.system.html b/docs/latest/api/evennia.commands.default.system.html
index d02b7cfcc2..196b1c1736 100644
--- a/docs/latest/api/evennia.commands.default.system.html
+++ b/docs/latest/api/evennia.commands.default.system.html
@@ -697,7 +697,7 @@ See |luhttps://ww
@@ -743,7 +743,7 @@ to all the variables defined therein.
-search_index_entry = {'aliases': '@task @delays', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks task delays', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}¶
+search_index_entry = {'aliases': '@delays @task', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks delays task', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}¶
diff --git a/docs/latest/api/evennia.commands.default.tests.html b/docs/latest/api/evennia.commands.default.tests.html
index 015f481baa..2c262a7644 100644
--- a/docs/latest/api/evennia.commands.default.tests.html
+++ b/docs/latest/api/evennia.commands.default.tests.html
@@ -980,7 +980,7 @@ main test suite started with
Test the batch processor.
-red_button = <module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmp_scktfmn/096100ee55549c0f73415bd692ad656cca288e8f/evennia/contrib/tutorials/red_button/red_button.py'>¶
+red_button = <module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmpg82d_qk5/783dc46cd33652369623fc0c9ee2040139d3c86c/evennia/contrib/tutorials/red_button/red_button.py'>¶
@@ -171,7 +171,7 @@ there is no object yet before the account has logged in)
-search_index_entry = {'aliases': 'conn co con', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn co con', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶
+search_index_entry = {'aliases': 'con co conn', 'category': 'general', 'key': 'connect', 'no_prefix': ' con co conn', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶
@@ -306,7 +306,7 @@ All it does is display the connect screen.
@@ -332,7 +332,7 @@ All it does is display the connect screen.
-search_index_entry = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' look l', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}¶
+search_index_entry = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' l look', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}¶
diff --git a/docs/latest/api/evennia.contrib.base_systems.email_login.email_login.html b/docs/latest/api/evennia.contrib.base_systems.email_login.email_login.html
index 4e6475d646..aedf3065e8 100644
--- a/docs/latest/api/evennia.contrib.base_systems.email_login.email_login.html
+++ b/docs/latest/api/evennia.contrib.base_systems.email_login.email_login.html
@@ -153,7 +153,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.
@@ -183,7 +183,7 @@ there is no object yet before the account has logged in)
-search_index_entry = {'aliases': 'conn co con', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn co con', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}¶
+search_index_entry = {'aliases': 'con co conn', 'category': 'general', 'key': 'connect', 'no_prefix': ' con co conn', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}¶
@@ -311,7 +311,7 @@ All it does is display the connect screen.
@@ -337,7 +337,7 @@ All it does is display the connect screen.
-search_index_entry = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' look l', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}¶
+search_index_entry = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' l look', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}¶
The contrib provides three commands by default and their associated report types: CmdBug, CmdIdea,
+and CmdReport (which is for reporting other players).
+
The ReportCmdBase class holds most of the functionality for creating new reports, providing a
+convenient parent class for adding your own categories of reports.
+
The contrib can be further configured through two settings, INGAME_REPORT_TYPES and INGAME_REPORT_STATUS_TAGS
This is the hook function that actually does all the work. It is called
+by the cmdhandler right after self.parser() finishes, and so has access
+to all the variables defined therein.
+search_index_entry = {'aliases': 'manage ideas manage bugs manage players', 'category': 'general', 'key': 'manage reports', 'no_prefix': ' manage ideas manage bugs manage players', 'tags': '', 'text': '\n manage the various reports\n\n Usage:\n manage [report type]\n\n Available report types:\n bugs\n ideas\n players\n\n Initializes a menu for reviewing and changing the status of current reports.\n '}¶
Search for a target that matches the given search term. By default, does a normal search via the
+caller - a local object search for a Character, or an account search for an Account.
+
+
Parameters
+
searchterm (str) –
+
+
Returns
+
result (Object, Account, or None) - the result of the search
This is the hook function that actually does all the work. It is called
+by the cmdhandler right after self.parser() finishes, and so has access
+to all the variables defined therein.
+search_index_entry = {'aliases': '', 'category': 'reports', 'key': 'command', 'no_prefix': ' ', 'tags': '', 'text': "\n A parent class for creating report commands. This help text may be displayed if\n your command's help text is not properly configured.\n "}¶
+search_index_entry = {'aliases': '', 'category': 'reports', 'key': 'bug', 'no_prefix': ' ', 'tags': '', 'text': "\n file a bug\n\n Usage:\n bug [<target> =] <message>\n\n Note: If a specific object, location or character is bugged, please target it for the report.\n\n Examples:\n bug hammer = This doesn't work as a crafting tool but it should\n bug every time I go through a door I get the message twice\n "}¶
This is the hook function that actually does all the work. It is called
+by the cmdhandler right after self.parser() finishes, and so has access
+to all the variables defined therein.
+search_index_entry = {'aliases': 'ideas', 'category': 'reports', 'key': 'idea', 'no_prefix': ' ideas', 'tags': '', 'text': "\n submit a suggestion\n\n Usage:\n ideas\n idea <message>\n\n Example:\n idea wouldn't it be cool if we had horses we could ride\n "}¶
@@ -205,7 +205,7 @@ aliases to an already joined channel.
-search_index_entry = {'aliases': 'chanalias aliaschan', 'category': 'comms', 'key': 'addcom', 'no_prefix': ' chanalias aliaschan', 'tags': '', 'text': '\n Add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] <channel>\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}¶
+search_index_entry = {'aliases': 'aliaschan chanalias', 'category': 'comms', 'key': 'addcom', 'no_prefix': ' aliaschan chanalias', 'tags': '', 'text': '\n Add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] <channel>\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}¶
-search_index_entry = {'aliases': 'delaliaschan delchanalias', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delaliaschan delchanalias', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}¶
+search_index_entry = {'aliases': 'delchanalias delaliaschan', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delchanalias delaliaschan', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}¶
diff --git a/docs/latest/api/evennia.contrib.full_systems.evscaperoom.commands.html b/docs/latest/api/evennia.contrib.full_systems.evscaperoom.commands.html
index 2bf96ec25a..802e429289 100644
--- a/docs/latest/api/evennia.contrib.full_systems.evscaperoom.commands.html
+++ b/docs/latest/api/evennia.contrib.full_systems.evscaperoom.commands.html
@@ -225,7 +225,7 @@ the operation will be general or on the room.
-search_index_entry = {'aliases': 'quit chicken out abort q', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' quit chicken out abort q', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}¶
+search_index_entry = {'aliases': 'quit abort chicken out q', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' quit abort chicken out q', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}¶
-search_index_entry = {'aliases': ': pose', 'category': 'general', 'key': 'emote', 'no_prefix': ' : pose', 'tags': '', 'text': '\n Perform a free-form emote. Use /me to\n include yourself in the emote and /name\n to include other objects or characters.\n Use "..." to enact speech.\n\n Usage:\n emote <emote>\n :<emote\n\n Example:\n emote /me smiles at /peter\n emote /me points to /box and /lever.\n\n '}¶
+search_index_entry = {'aliases': 'pose :', 'category': 'general', 'key': 'emote', 'no_prefix': ' pose :', 'tags': '', 'text': '\n Perform a free-form emote. Use /me to\n include yourself in the emote and /name\n to include other objects or characters.\n Use "..." to enact speech.\n\n Usage:\n emote <emote>\n :<emote\n\n Example:\n emote /me smiles at /peter\n emote /me points to /box and /lever.\n\n '}¶
@@ -504,7 +504,7 @@ looks and what actions is available.
-search_index_entry = {'aliases': 'ex e examine unfocus', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' ex e examine unfocus', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}¶
+search_index_entry = {'aliases': 'examine ex e unfocus', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' examine ex e unfocus', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}¶
@@ -337,7 +337,7 @@ to all the variables defined therein.
-search_index_entry = {'aliases': 'achieves achieve achievement', 'category': 'general', 'key': 'achievements', 'no_prefix': ' achieves achieve achievement', 'tags': '', 'text': '\n view achievements\n\n Usage:\n achievements[/switches] [args]\n\n Switches:\n all View all achievements, including locked ones.\n completed View achievements you\'ve completed.\n progress View achievements you have partially completed\n\n Check your achievement statuses or browse the list. Providing a command argument\n will search all your currently unlocked achievements for matches, and the switches\n will filter the list to something other than "all unlocked". Combining a command\n argument with a switch will search only in that list.\n\n Examples:\n achievements apples\n achievements/all\n achievements/progress rats\n '}¶
+search_index_entry = {'aliases': 'achievement achieves achieve', 'category': 'general', 'key': 'achievements', 'no_prefix': ' achievement achieves achieve', 'tags': '', 'text': '\n view achievements\n\n Usage:\n achievements[/switches] [args]\n\n Switches:\n all View all achievements, including locked ones.\n completed View achievements you\'ve completed.\n progress View achievements you have partially completed\n\n Check your achievement statuses or browse the list. Providing a command argument\n will search all your currently unlocked achievements for matches, and the switches\n will filter the list to something other than "all unlocked". Combining a command\n argument with a switch will search only in that list.\n\n Examples:\n achievements apples\n achievements/all\n achievements/progress rats\n '}¶
diff --git a/docs/latest/api/evennia.contrib.game_systems.barter.barter.html b/docs/latest/api/evennia.contrib.game_systems.barter.barter.html
index 995664a60e..180d50f58c 100644
--- a/docs/latest/api/evennia.contrib.game_systems.barter.barter.html
+++ b/docs/latest/api/evennia.contrib.game_systems.barter.barter.html
@@ -759,7 +759,7 @@ try to influence the other part in the deal.
@@ -785,7 +785,7 @@ try to influence the other part in the deal.
-search_index_entry = {'aliases': 'deal offers', 'category': 'trading', 'key': 'status', 'no_prefix': ' deal offers', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}¶
+search_index_entry = {'aliases': 'offers deal', 'category': 'trading', 'key': 'status', 'no_prefix': ' offers deal', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}¶
diff --git a/docs/latest/api/evennia.contrib.html b/docs/latest/api/evennia.contrib.html
index fb397d622a..0661ca67bf 100644
--- a/docs/latest/api/evennia.contrib.html
+++ b/docs/latest/api/evennia.contrib.html
@@ -173,6 +173,16 @@ useful but are deemed too game-specific to go into the core library.
-search_index_entry = {'aliases': '" \'', 'category': 'general', 'key': 'say', 'no_prefix': ' " \'', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}¶
+search_index_entry = {'aliases': '\' "', 'category': 'general', 'key': 'say', 'no_prefix': ' \' "', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}¶
@@ -908,7 +908,7 @@ Using the command without arguments will list all current recogs.
@@ -935,7 +935,7 @@ Using the command without arguments will list all current recogs.
-search_index_entry = {'aliases': 'forget recognize', 'category': 'general', 'key': 'recog', 'no_prefix': ' forget recognize', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}¶
+search_index_entry = {'aliases': 'recognize forget', 'category': 'general', 'key': 'recog', 'no_prefix': ' recognize forget', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}¶
diff --git a/docs/latest/api/evennia.contrib.tutorials.evadventure.combat_turnbased.html b/docs/latest/api/evennia.contrib.tutorials.evadventure.combat_turnbased.html
index 5749a8d5e1..269a797481 100644
--- a/docs/latest/api/evennia.contrib.tutorials.evadventure.combat_turnbased.html
+++ b/docs/latest/api/evennia.contrib.tutorials.evadventure.combat_turnbased.html
@@ -480,7 +480,7 @@ turn of combat, performing everyone’s actions in random order.
-search_index_entry = {'aliases': 'unwield unwear', 'category': 'general', 'key': 'remove', 'no_prefix': ' unwield unwear', 'tags': '', 'text': '\n Remove a remove a weapon/shield, armor or helmet.\n\n Usage:\n remove <item>\n unwield <item>\n unwear <item>\n\n To remove an item from the backpack, use |wdrop|n instead.\n\n '}¶
+search_index_entry = {'aliases': 'unwear unwield', 'category': 'general', 'key': 'remove', 'no_prefix': ' unwear unwield', 'tags': '', 'text': '\n Remove a remove a weapon/shield, armor or helmet.\n\n Usage:\n remove <item>\n unwield <item>\n unwear <item>\n\n To remove an item from the backpack, use |wdrop|n instead.\n\n '}¶
diff --git a/docs/latest/api/evennia.contrib.tutorials.red_button.red_button.html b/docs/latest/api/evennia.contrib.tutorials.red_button.red_button.html
index 40649b694d..750f76291f 100644
--- a/docs/latest/api/evennia.contrib.tutorials.red_button.red_button.html
+++ b/docs/latest/api/evennia.contrib.tutorials.red_button.red_button.html
@@ -167,7 +167,7 @@ such as when closing the lid and un-blinding a character.
-search_index_entry = {'aliases': 'examine ex feel get listen l', 'category': 'general', 'key': 'look', 'no_prefix': ' examine ex feel get listen l', 'tags': '', 'text': "\n Looking around in darkness\n\n Usage:\n look <obj>\n\n ... not that there's much to see in the dark.\n\n "}¶
+search_index_entry = {'aliases': 'feel ex l examine listen get', 'category': 'general', 'key': 'look', 'no_prefix': ' feel ex l examine listen get', 'tags': '', 'text': "\n Looking around in darkness\n\n Usage:\n look <obj>\n\n ... not that there's much to see in the dark.\n\n "}¶
diff --git a/docs/latest/api/evennia.contrib.tutorials.tutorial_world.objects.html b/docs/latest/api/evennia.contrib.tutorials.tutorial_world.objects.html
index 60b00c3bc4..97a2416c69 100644
--- a/docs/latest/api/evennia.contrib.tutorials.tutorial_world.objects.html
+++ b/docs/latest/api/evennia.contrib.tutorials.tutorial_world.objects.html
@@ -439,7 +439,7 @@ of the object. We overload it with our own version.
@@ -819,7 +819,7 @@ parry - forgoes your attack but will make you harder to hit on next
-search_index_entry = {'aliases': 'thrust kill chop slash fight bash parry defend hit stab pierce', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' thrust kill chop slash fight bash parry defend hit stab pierce', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}¶
+search_index_entry = {'aliases': 'kill slash fight stab defend hit bash pierce thrust parry chop', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' kill slash fight stab defend hit bash pierce thrust parry chop', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}¶
diff --git a/docs/latest/api/evennia.contrib.tutorials.tutorial_world.rooms.html b/docs/latest/api/evennia.contrib.tutorials.tutorial_world.rooms.html
index f252036733..5cf89ab9ea 100644
--- a/docs/latest/api/evennia.contrib.tutorials.tutorial_world.rooms.html
+++ b/docs/latest/api/evennia.contrib.tutorials.tutorial_world.rooms.html
@@ -982,7 +982,7 @@ to find something.
diff --git a/docs/latest/api/evennia.html b/docs/latest/api/evennia.html
index a300dc875a..17bd1772ba 100644
--- a/docs/latest/api/evennia.html
+++ b/docs/latest/api/evennia.html
@@ -323,6 +323,16 @@ with ‘q’, remove the break line and restart server when finished.
-search_index_entry = {'aliases': 'no a y yes abort __nomatch_command n', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' no a y yes abort __nomatch_command n', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}¶
+search_index_entry = {'aliases': '__nomatch_command no y abort n a yes', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' __nomatch_command no y abort n a yes', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}¶
diff --git a/docs/latest/api/evennia.utils.evmore.html b/docs/latest/api/evennia.utils.evmore.html
index af81dceceb..ecd1623116 100644
--- a/docs/latest/api/evennia.utils.evmore.html
+++ b/docs/latest/api/evennia.utils.evmore.html
@@ -151,7 +151,7 @@ the caller.msg() construct every time the page is updated.
@@ -177,7 +177,7 @@ the caller.msg() construct every time the page is updated.
-search_index_entry = {'aliases': 'e a end q next p top abort t quit previous n', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' e a end q next p top abort t quit previous n', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}¶
+search_index_entry = {'aliases': 'end previous abort n p quit a t q top e next', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' end previous abort n p quit a t q top e next', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}¶