code: def on_natural_language(keywords: Union[Optional[Iterable], Callable] = None,
                          *, permission: int = perm.EVERYBODY,
                          only_to_me: bool = True,
                          only_short_message: bool = True,
                          allow_empty_message: bool = False) -> Callable:
      
  
      def deco(func: Callable) -> Callable:
          nl_processor = NLProcessor(func=func, keywords=keywords,
                                     permission=permission,
                                     only_to_me=only_to_me,
                                     only_short_message=only_short_message,
                                     allow_empty_message=allow_empty_message)
          _nl_processors.add(nl_processor)
          return func
  
      if isinstance(keywords, Callable):
          # here "keywords" is the function to be decorated
          return on_natural_language()(keywords)
      else:
          return deco
docs: Decorator to register a function as a natural language processor.
  
      :param keywords: keywords to respond to, if None, respond to all messages
      :param permission: permission required by the processor
      :param only_to_me: only handle messages to me
      :param only_short_message: only handle short messages
      :param allow_empty_message: handle empty messages