bot-base/modules/roles/__init__.py

108 lines
4.8 KiB
Python
Raw Normal View History

2020-03-21 14:53:40 +01:00
import discord
from modules.base import BaseClassPython
class MainClass(BaseClassPython):
name = "Roles"
color = 0xffb593
help_active = True
help = {
"description": "Modulé gérant l'attribution des roles",
"commands": {
"`{prefix}{command} list`": "Liste les roles",
2020-04-05 02:39:46 +02:00
"`{prefix}{command} <role> [role] ...`": "S'attribuer (ou désattribuer) le(s) rôles <role> ([role]...)",
2020-03-21 14:53:40 +01:00
}
}
command_text = "roles"
def __init__(self, client):
super().__init__(client)
2020-04-05 02:39:46 +02:00
self.config.init({"guild":297780867286433792,
"roles": {"435559220860157952":"Rôle mentionné lors des jeux."}})
2020-03-21 14:53:40 +01:00
async def com_list(self, message, args, kwargs):
response = discord.Embed(title="Roles disponibles", color=self.color)
for id_ in self.config.roles.keys():
2020-04-05 02:39:46 +02:00
print(id_,type(id_))
role = message.guild.get_role(int(id_))
if role is not None:
response.add_field(name=role.name, value=f" -> `{self.config.roles[id_]}`", inline=True)
2020-03-21 14:53:40 +01:00
await message.channel.send(embed=response)
async def com_add(self, message, args, kwargs):
2020-04-05 02:39:46 +02:00
guild = self.client.get_guild(self.config.guild)
member = guild.get_member(message.author.id)
2020-03-21 14:53:40 +01:00
if len(args) <= 1:
await message.channel.send("Il manque des arguments à la commande")
2020-04-05 02:39:46 +02:00
for role_ in args[1:]:
role = await self.client.id.get_role(name=role_, guild=guild, case_sensitive=False)
if role is None or str(role.id) not in self.config.roles.keys():
await message.channel.send(f"Le role {role_} n'est pas disponible.")
2020-03-22 11:31:29 +01:00
else:
2020-04-05 02:39:46 +02:00
await self.tryaddrole(message, member, role)
async def com_remove(self, message, args, kwargs):
guild = self.client.get_guild(self.config.guild)
member = guild.get_member(message.author.id)
if len(args) <= 1:
await message.channel.send("Il manque des arguments à la commande")
for role_ in args[1:]:
role = await self.client.id.get_role(name=role_, guild=guild, case_sensitive=False)
if role is None or str(role.id) not in self.config.roles.keys():
await message.channel.send(f"Le role {role_} n'est pas disponible.")
else:
await self.tryremoverole(message, member, role)
async def com_toggle(self, message, args, kwargs):
guild = self.client.get_guild(self.config.guild)
member = guild.get_member(message.author.id)
if len(args) <= 1:
await message.channel.send("Il manque des arguments à la commande")
for role_ in args[1:]:
role = await self.client.id.get_role(name=role_, guild=guild, case_sensitive=False)
if role is None or str(role.id) not in self.config.roles.keys():
await message.channel.send(f"Le role {role_} n'est pas disponible.")
else:
await self.trytogglerole(message, member, role)
async def command(self, message, args, kwargs):
guild = self.client.get_guild(self.config.guild)
member = guild.get_member(message.author.id)
if len(args) < 1:
await message.channel.send("Il manque des arguments à la commande")
for role_ in args:
role = await self.client.id.get_role(name=role_, guild=guild, case_sensitive=False)
if role is None or str(role.id) not in self.config.roles.keys():
await message.channel.send(f"Le role {role_} n'est pas disponible.")
else:
await self.trytogglerole(message, member, role)
async def trytogglerole(self, message, member, role):
if role in member.roles:
await self.tryremoverole(message, member, role)
else:
await self.tryaddrole(message, member, role)
async def tryaddrole(self, message, member, role):
if role in member.roles:
await message.channel.send(f"Vous avez déjà le rôle {role}.")
return
try:
await member.add_roles(role, reason="Auto-attribution")
except discord.errors.Forbidden:
await message.channel.send(f"Je n'ai pas la permission de vous attribuer le rôle {role}.")
else:
await message.channel.send(f"Vous avez reçu le rôle {role}.")
async def tryremoverole(self, message, member, role):
if not role in member.roles:
await message.channel.send(f"Vous n'avez pas le rôle {role}.")
return
try:
await member.remove_roles(role, reason="Auto-désattribution")
except discord.errors.Forbidden:
await message.channel.send(f"Je n'ai pas la permission de vous retirer le rôle {role}.")
else:
await message.channel.send(f"Vous avez perdu le rôle {role}.")