diff --git a/libs/Roles.py b/libs/Roles.py index c9b7fd3..9e84a23 100644 --- a/libs/Roles.py +++ b/libs/Roles.py @@ -1,20 +1,24 @@ +from typing import override, List + +import discord + class Roles: - async def get_role(self, guild, role): + 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, roles): + 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, role, user): - fetched_role = await self.get_role(guild, role) + 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: @@ -22,11 +26,34 @@ class Roles: role_added = True return role_added - async def remove_role(self, guild, role, user): - fetched_role = await self.get_role(guild, role) + 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 \ No newline at end of file