from typing import override, List import discord class Roles: async def get_guild_role(self, guild: discord.Guild, role: str) -> discord.Role: fetched_role = None for r in guild.roles: if r.name == role: fetched_role = r return fetched_role async def get_roles(self, guild: discord.Guild, roles: List[str]) -> List[discord.Role]: found_roles = [] for r in guild.roles: if r.name in roles: found_roles.append(r) return found_roles async def add_role(self, guild: discord.Guild, role: str, user: discord.Member|discord.User) -> bool: fetched_role = await self.get_guild_role(guild, role) role_added = False if fetched_role is not None: if fetched_role not in user.roles: await user.add_roles(fetched_role) role_added = True return role_added async def remove_role(self, guild: discord.Guild, role: str, user: discord.Member|discord.User) -> bool: fetched_role = await self.get_guild_role(guild, role) role_removed = False if fetched_role is not None: if fetched_role in user.roles: await user.remove_roles(fetched_role) role_removed = True return role_removed @override async def remove_role(self, role: discord.Role, user: discord.Member|discord.User) -> bool: role_removed = False if role is not None and role in user.roles: await user.remove_roles(role) role_removed = True return role_removed async def add_guild_role(self, role): role_added = False if not await self.get_guild_role(role): await self.bot.guild.create_role(name=role) role_added = True return role_added async def remove_guild_role(self, guild, role): role_removed = False fetched_role = await self.get_guild_role(role) if fetched_role: await fetched_role.delete() role_removed = True return role_removed