import typing as t
from lavalink_rs import LavalinkClient, GuildId

class NodeDistributionStrategy:
    def __new__(cls) -> NodeDistributionStrategy: ...
    @staticmethod
    def sharded() -> NodeDistributionStrategy: ...
    @staticmethod
    def round_robin() -> NodeDistributionStrategy: ...
    @staticmethod
    def main_fallback() -> NodeDistributionStrategy: ...
    @staticmethod
    def lowest_load() -> NodeDistributionStrategy: ...
    @staticmethod
    def highest_free_memory() -> NodeDistributionStrategy: ...
    @staticmethod
    def custom(
        func: t.Callable[[LavalinkClient, t.Union[GuildId, int]], t.Awaitable[int]],
    ) -> NodeDistributionStrategy: ...
