mirror of
https://github.com/Matthww/TuneBot.git
synced 2026-09-21 22:07:48 +00:00
116 lines
2.4 KiB
Python
116 lines
2.4 KiB
Python
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",
|
|
)
|