def METHOD_NAME(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,
    )