# evennia.commands.default.muxcommand

The command template for the default MUX-style command set. There is also an Account/OOC version that makes sure caller is an Account object.

class `evennia.commands.default.muxcommand.``MuxCommand`(**kwargs)

  Bases: `evennia.commands.command.Command`

  This sets up the basis for a MUX command. The idea is that most other Mux-related commands should just inherit from this and don’t have to implement much parsing of their own unless they do something particularly advanced.

  Note that the class’s __doc__ string (this text) is used by Evennia to create the automatic help entry for the command, so make sure to document consistently here.

  `has_perm`(srcobj)

    This is called by the cmdhandler to determine if srcobj is allowed to execute this command. We just show it here for completeness - we are satisfied using the default check in Command.

  `at_pre_cmd`()

    This hook is called before self.parse() on all commands

  `at_post_cmd`()

    This hook is called after the command has finished executing (after self.func()).

  `parse`()

    This method is called by the cmdhandler once the command name has been identified. It creates a new set of member variables that can be later accessed from self.func() (see below)

    The following variables are available for our use when entering this method (from the command definition, and assigned on the fly by the cmdhandler):

    > self.key - the name of this command (‘look’) self.aliases - the aliases of this cmd (‘l’) self.permissions - permission string for this command self.help_category - overall category of command

    > self.caller - the object calling this command self.cmdstring - the actual command name used to call this

    > > (this allows you to know which alias was used,

    > >   for example)

    > self.args - the raw input; everything following self.cmdstring. self.cmdset - the cmdset from which this command was picked. Not

    > > often used (useful for commands like ‘help’ or to list all available commands etc)

    > self.obj - the object on which this command was defined. It is often

    >   the same as self.caller.

    A MUX command has the following possible syntax:

    > name[ with several words][/switch[/switch..]] arg1[,arg2,…] [[=|,] arg[,..]]

    The ‘name[ with several words]’ part is already dealt with by the cmdhandler at this point, and stored in self.cmdname (we don’t use it here). The rest of the command is stored in self.args, which can start with the switch indicator /.

    Optional variables to aid in parsing, if set:
      self.switch_options - (tuple of valid /switches expected by this

        command (without the /))

      self.rhs_split - Alternate string delimiter or tuple of strings

        to separate left/right hand sides. tuple form gives priority split to first string delimiter.

    This parser breaks self.args into its constituents and stores them in the following variables:

    > self.switches = [list of /switches (without the /)] self.raw = This is the raw argument input, including switches self.args = This is re-defined to be everything except the switches self.lhs = Everything to the left of = (lhs:’left-hand side’). If

    > > no = is found, this is identical to self.args.

    > self.rhs: Everything to the right of = (rhs:’right-hand side’).

    >   If no ‘=’ is found, this is None.

    > self.lhslist - [self.lhs split into a list by comma] self.rhslist - [list of self.rhs split into a list by comma] self.arglist = [list of space-separated args (stripped, including ‘=’ if it exists)]

    > All args and list members are stripped of excess whitespace around the strings, but case is preserved.

  `get_command_info`()

    Update of parent class’s get_command_info() for MuxCommand.

  `func`()
    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.

  `aliases` = []
  `help_category` = 'general'
  `key` = 'command'
  `lock_storage` = 'cmd:all();'
  `search_index_entry` = {'aliases': '', 'category': 'general', 'key': 'command', 'no_prefix': ' ', 'tags': '', 'text': "\n This sets up the basis for a MUX command. The idea\n is that most other Mux-related commands should just\n inherit from this and don't have to implement much\n parsing of their own unless they do something particularly\n advanced.\n\n Note that the class's __doc__ string (this text) is\n used by Evennia to create the automatic help entry for\n the command, so make sure to document consistently here.\n "}

class `evennia.commands.default.muxcommand.``MuxAccountCommand`(**kwargs)

  Bases: `evennia.commands.default.muxcommand.MuxCommand`

  This is an on-Account version of the MuxCommand. Since these commands sit on Accounts rather than on Characters/Objects, we need to check this in the parser.

  Account commands are available also when puppeting a Character, it’s just that they are applied with a lower priority and are always available, also when disconnected from a character (i.e. “ooc”).

  This class makes sure that caller is always an Account object, while creating a new property “character” that is set only if a character is actually attached to this Account and Session.

  `account_caller` = True
  `aliases` = []
  `help_category` = 'general'
  `key` = 'command'
  `lock_storage` = 'cmd:all();'
  `search_index_entry` = {'aliases': '', 'category': 'general', 'key': 'command', 'no_prefix': ' ', 'tags': '', 'text': '\n This is an on-Account version of the MuxCommand. Since these commands sit\n on Accounts rather than on Characters/Objects, we need to check\n this in the parser.\n\n Account commands are available also when puppeting a Character, it\'s\n just that they are applied with a lower priority and are always\n available, also when disconnected from a character (i.e. "ooc").\n\n This class makes sure that caller is always an Account object, while\n creating a new property "character" that is set only if a\n character is actually attached to this Account and Session.\n '}