2025-06-29 07:21:46 +00:00
|
|
|
from typing import override, List
|
|
|
|
|
|
|
|
|
|
import discord
|
|
|
|
|
|
2025-06-20 14:28:44 +00:00
|
|
|
class Roles:
|
2025-06-29 07:21:46 +00:00
|
|
|
async def get_guild_role(self, guild: discord.Guild, role: str) -> discord.Role:
|
2025-06-20 14:28:44 +00:00
|
|
|
fetched_role = None
|
|
|
|
|
for r in guild.roles:
|
|
|
|
|
if r.name == role:
|
|
|
|
|
fetched_role = r
|
|
|
|
|
return fetched_role
|
|
|
|
|
|
2025-06-29 07:21:46 +00:00
|
|
|
async def get_roles(self, guild: discord.Guild, roles: List[str]) -> List[discord.Role]:
|
2025-06-20 14:28:44 +00:00
|
|
|
found_roles = []
|
|
|
|
|
for r in guild.roles:
|
|
|
|
|
if r.name in roles:
|
|
|
|
|
found_roles.append(r)
|
|
|
|
|
return found_roles
|
|
|
|
|
|
2025-06-29 07:21:46 +00:00
|
|
|
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)
|
2025-06-20 14:28:44 +00:00
|
|
|
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
|
|
|
|
|
|
2025-06-29 07:21:46 +00:00
|
|
|
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)
|
2025-06-20 14:28:44 +00:00
|
|
|
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
|
2025-06-29 07:21:46 +00:00
|
|
|
|
|
|
|
|
@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
|