def METHOD_NAME(
    cls,
    event_name: Absent[str | BaseEvent] = MISSING,
    *,
    delay_until_ready: bool = False,
    is_default_listener: bool = False,
    disable_default_listeners: bool = False,
) -> Callable[[AsyncCallable], "Listener"]:
    """
    Decorator for creating an event listener.
    Args:
        event_name: The name of the event to listen to. If left blank, event name will be inferred from the function name or parameter.
        delay_until_ready: Whether to delay the listener until the client is ready.
        is_default_listener: Whether this listener is provided automatically by the library, and might be unwanted by users.
        disable_default_listeners: Whether this listener supersedes default listeners.  If true, any default listeners will be unregistered.
    Returns:
        A listener object.
    """
    def wrapper(coro: AsyncCallable) -> "Listener":
        if not asyncio.iscoroutinefunction(coro):
            raise TypeError("Listener must be a coroutine")
        name = event_name
        if name is MISSING:
            for typehint in coro.__annotations__.values():
                if (
                    inspect.isclass(typehint)
                    and issubclass(typehint, BaseEvent)
                    and typehint.__name__ != "RawGatewayEvent"
                ):
                    name = typehint.__name__
                    break
            if not name:
                name = coro.__name__
        return cls(
            coro,
            get_event_name(name),
            delay_until_ready=delay_until_ready,
            is_default_listener=is_default_listener,
            disable_default_listeners=disable_default_listeners,
        )
    return wrapper