code: def on_command(name: Union[str, CommandName_T], *,
                 aliases: Iterable[str] = (),
                 permission: int = perm.EVERYBODY,
                 only_to_me: bool = True,
                 privileged: bool = False,
                 shell_like: bool = False) -> Callable:
      
  
      def deco(func: CommandHandler_T) -> CommandHandler_T:
          if not isinstance(name, (str, tuple)):
              raise TypeError('the name of a command must be a str or tuple')
          if not name:
              raise ValueError('the name of a command must not be empty')
  
          cmd_name = (name,) if isinstance(name, str) else name
  
          cmd = Command(name=cmd_name, func=func, permission=permission,
                        only_to_me=only_to_me, privileged=privileged)
          if shell_like:
              async def shell_like_args_parser(session):
                  session.args['argv'] = shlex.split(session.current_arg)
  
              cmd.args_parser_func = shell_like_args_parser
  
          current_parent = _registry
          for parent_key in cmd_name[:-1]:
              current_parent[parent_key] = current_parent.get(parent_key) or {}
              current_parent = current_parent[parent_key]
          current_parent[cmd_name[-1]] = cmd
  
          for alias in aliases:
              _aliases[alias] = cmd_name
  
          return CommandFunc(cmd, func)
  
      return deco
docs: Decorator to register a function as a command.
  
      :param name: command name (e.g. 'echo' or ('random', 'number'))
      :param aliases: aliases of command name, for convenient access
      :param permission: permission required by the command
      :param only_to_me: only handle messages to me
      :param privileged: can be run even when there is already a session
      :param shell_like: use shell-like syntax to split arguments