code: def add_listener(self, func, name=None):
          
          name = func.__name__ if name is None else name
  
          if not asyncio.iscoroutinefunction(func):
              raise TypeError('Listeners must be coroutines')
  
          if name in self.extra_events:
              self.extra_events[name].append(func)
          else:
              self.extra_events[name] = [func]
docs: The non decorator alternative to :meth:`.listen`.
  
          Parameters
          -----------
          func: :ref:`coroutine <coroutine>`
              The function to call.
          name: Optional[:class:`str`]
              The name of the event to listen for. Defaults to ``func.__name__``.
  
          Example
          --------
  
          .. code-block:: python3
  
              async def on_ready(): pass
              async def my_message(message): pass
  
              bot.add_listener(on_ready)
              bot.add_listener(my_message, 'on_message')