def add_listener(self, func, name=None):
name = func.__name__ if name is None else name<EOL>if not asyncio.iscoroutinefunction(func):<EOL><INDENT>raise TypeError('<STR_LIT>')<EOL><DEDENT>if name in self.extra_events:<EOL><INDENT>self.extra_events[name].append(func)<EOL><DEDENT>else:<EOL><INDENT>self.extra_events[name] = [func]<EOL><DEDENT>
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')