from abc import ABC from abc import abstractmethod from typing import Any from typing import Optional from typing import Protocol from typing import TYPE_CHECKING from typing import Union if TYPE_CHECKING: from tunebot.plugins import ServiceEvent from discord.ext.commands import Cog AnyDict = dict[Any, Any] class GlobalPlaylistSource(ABC): @abstractmethod async def fetch_sources(self) -> set[str]: pass class PlaylistSource(ABC): @abstractmethod async def add(self, source_url: str): pass @abstractmethod async def remove(self, source_url: str) -> bool: pass class GlobalPlaylist(ABC): @abstractmethod async def pick_random(self, amount: Optional[int] = 1) -> set[str]: pass @abstractmethod async def add_tracks(self, urls: list[str]): pass @abstractmethod async def clear(self): pass @abstractmethod async def remove_tracks(self, track_urls: list[str]): pass class GlobalAutoJoin(ABC): @abstractmethod async def fetch_channels(self) -> dict[str, list[str]]: pass class AutoJoin(ABC): @abstractmethod async def update(self, voice_channel_id: int, text_channel_id: int): pass @abstractmethod async def disable(self): pass class ServiceBase(Protocol): async def on_dispatch(self, event: "ServiceEvent", payload: AnyDict): ... class PluginManagerBase(Protocol): def get_plugin(self, name: str) -> Union["BasePluginInstance", None]: ... def remove_plugin(self, name: str): ... def enable_plugin(self, name: str, plugin: "BasePluginInstance"): ... async def dispatch(self, event: "ServiceEvent", payload: AnyDict = {}): ... class PluginLoaderBase(Protocol): def load_plugin(self, plug_conf: AnyDict) -> "BasePluginInstance": ... class GlobalUtils(Protocol): async def raw_table_lookup(self, table_name: str, keys: list[Any]) -> list[Any]: ... async def raw_table_del_entry(self, table_name: str, keys: list[Any]): ... class BasePluginInstance(Protocol): config: AnyDict services: list["ServiceBase"] cogs: list[str] __all__ = ( "GlobalPlaylistSource", "PlaylistSource", "GlobalPlaylist", "GlobalAutoJoin", "AutoJoin", "ServiceBase", "PluginManagerBase", "PluginLoaderBase", "GlobalUtils", "BasePluginInstance", )