Initial commit: autoroom cog with multi-allow support
This commit is contained in:
+103
@@ -0,0 +1,103 @@
|
||||
"""ABC for the AutoRoom Cog."""
|
||||
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import Any, ClassVar
|
||||
|
||||
import discord
|
||||
from discord.ext.commands import CooldownMapping
|
||||
from redbot.core import Config
|
||||
from redbot.core.bot import Red
|
||||
|
||||
from autoroom.pcx_template import Template
|
||||
|
||||
|
||||
class MixinMeta(ABC):
|
||||
"""Base class for well-behaved type hint detection with composite class.
|
||||
|
||||
Basically, to keep developers sane when not all attributes are defined in each mixin.
|
||||
"""
|
||||
|
||||
bot: Red
|
||||
config: Config
|
||||
template: Template
|
||||
bucket_autoroom_name: CooldownMapping
|
||||
bucket_autoroom_owner_claim: CooldownMapping
|
||||
extra_channel_name_change_delay: int
|
||||
|
||||
perms_legacy_text_allow: ClassVar[dict[str, bool]]
|
||||
perms_legacy_text_reset: ClassVar[dict[str, None]]
|
||||
perms_autoroom_owner_legacy_text: ClassVar[dict[str, bool]]
|
||||
|
||||
@staticmethod
|
||||
@abstractmethod
|
||||
def get_template_data(member: discord.Member | discord.User) -> dict[str, str]:
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
async def format_template_room_name(
|
||||
self, template: str, data: dict, num: int = 1
|
||||
) -> str:
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
async def is_admin_or_admin_role(self, who: discord.Role | discord.Member) -> bool:
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
async def is_mod_or_mod_role(self, who: discord.Role | discord.Member) -> bool:
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
def check_perms_source_dest(
|
||||
self,
|
||||
autoroom_source: discord.VoiceChannel,
|
||||
category_dest: discord.CategoryChannel,
|
||||
*,
|
||||
with_manage_roles_guild: bool = False,
|
||||
with_legacy_text_channel: bool = False,
|
||||
with_optional_clone_perms: bool = False,
|
||||
detailed: bool = False,
|
||||
) -> tuple[bool, bool, str | None]:
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
async def get_all_autoroom_source_configs(
|
||||
self, guild: discord.Guild
|
||||
) -> dict[int, dict[str, Any]]:
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
async def get_autoroom_source_config(
|
||||
self, autoroom_source: discord.VoiceChannel | discord.abc.GuildChannel | None
|
||||
) -> dict[str, Any] | None:
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
async def get_autoroom_info(
|
||||
self, autoroom: discord.VoiceChannel | None
|
||||
) -> dict[str, Any] | None:
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
async def get_autoroom_legacy_text_channel(
|
||||
self, autoroom: discord.VoiceChannel | int | None
|
||||
) -> discord.TextChannel | None:
|
||||
raise NotImplementedError
|
||||
|
||||
@staticmethod
|
||||
@abstractmethod
|
||||
def check_if_member_or_role_allowed(
|
||||
channel: discord.VoiceChannel,
|
||||
member_or_role: discord.Member | discord.Role,
|
||||
) -> bool:
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
def get_member_roles(
|
||||
self, autoroom_source: discord.VoiceChannel
|
||||
) -> list[discord.Role]:
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
async def get_bot_roles(self, guild: discord.Guild) -> list[discord.Role]:
|
||||
raise NotImplementedError
|
||||
Reference in New Issue
Block a user