docs: def register_event_listener(coro):
      """
      Registers a coroutine to receive lavalink event information.
  
      This coroutine will accept three arguments: :py:class:`Player`,
      :py:class:`LavalinkEvents`, and possibly an extra. The value of the extra depends
      on the value of the second argument.
  
      If the second argument is :py:attr:`LavalinkEvents.TRACK_END`, the extra will
      be a :py:class:`TrackEndReason`.
  
      If the second argument is :py:attr:`LavalinkEvents.TRACK_EXCEPTION`, the extra
      will be an error string.
  
      If the second argument is :py:attr:`LavalinkEvents.TRACK_STUCK`, the extra will
      be the threshold milliseconds that the track has been stuck for.
  
      If the second argument is :py:attr:`LavalinkEvents.TRACK_START`, the extra will be
      a :py:class:`Track` object.
  
      If the second argument is any other value, the third argument will not exist.
  
      Parameters
      ----------
      coro
          A coroutine function that accepts the arguments listed above.
  
      Raises
      ------
      TypeError
          If ``coro`` is not a coroutine.
      """
      if not asyncio.iscoroutinefunction(coro):
          raise TypeError("Function is not a coroutine.")
  
      if coro not in _event_listeners:
          _event_listeners.append(coro)