[roles mod] Implemented
This commit is contained in:
parent
5585984192
commit
626dc50a33
28
main.py
28
main.py
@ -395,17 +395,33 @@ class ClientById:
|
|||||||
channel = self.client.get_channel(id_)
|
channel = self.client.get_channel(id_)
|
||||||
return channel.send(*args, **kwargs)
|
return channel.send(*args, **kwargs)
|
||||||
|
|
||||||
async def get_role(self, id_=None, name=None):
|
async def get_role(self, id_=None, name=None, guild=None, case_sensitive=True):
|
||||||
|
guilds = self.client.guilds
|
||||||
|
if guild is not None:
|
||||||
|
guilds = [guild]
|
||||||
if id_ is not None:
|
if id_ is not None:
|
||||||
for guild in self.client.guilds:
|
for guild in guilds:
|
||||||
role = discord.utils.get(guild.roles, id=id_)
|
role = discord.utils.get(guild.roles, id=id_)
|
||||||
if role:
|
if role:
|
||||||
return role
|
return role
|
||||||
if name is not None:
|
if name is not None:
|
||||||
for guild in self.client.guilds:
|
if case_sensitive:
|
||||||
role = discord.utils.get(guild.roles, name=name)
|
for guild in guilds:
|
||||||
if role:
|
role = discord.utils.get(guild.roles, name=name)
|
||||||
return role
|
if role:
|
||||||
|
return role
|
||||||
|
else:
|
||||||
|
name = name.lower()
|
||||||
|
role = None
|
||||||
|
|
||||||
|
for guild in guilds:
|
||||||
|
for role_ in guild.roles:
|
||||||
|
if role_.name.lower() == name:
|
||||||
|
role = role_
|
||||||
|
break
|
||||||
|
if role is not None:
|
||||||
|
break
|
||||||
|
return role
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,31 +11,97 @@ class MainClass(BaseClassPython):
|
|||||||
"description": "Modulé gérant l'attribution des roles",
|
"description": "Modulé gérant l'attribution des roles",
|
||||||
"commands": {
|
"commands": {
|
||||||
"`{prefix}{command} list`": "Liste les roles",
|
"`{prefix}{command} list`": "Liste les roles",
|
||||||
"`{prefix}{command} <role>`": "S'attribuer le role <role>"
|
"`{prefix}{command} <role> [role] ...`": "S'attribuer (ou désattribuer) le(s) rôles <role> ([role]...)",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
command_text = "roles"
|
command_text = "roles"
|
||||||
|
|
||||||
def __init__(self, client):
|
def __init__(self, client):
|
||||||
super().__init__(client)
|
super().__init__(client)
|
||||||
self.config.init({"roles": {}})
|
self.config.init({"guild":297780867286433792,
|
||||||
|
"roles": {"435559220860157952":"Rôle mentionné lors des jeux."}})
|
||||||
|
|
||||||
async def com_list(self, message, args, kwargs):
|
async def com_list(self, message, args, kwargs):
|
||||||
response = discord.Embed(title="Roles disponibles", color=self.color)
|
response = discord.Embed(title="Roles disponibles", color=self.color)
|
||||||
for id_ in self.config.roles.keys():
|
for id_ in self.config.roles.keys():
|
||||||
role = await self.client.id.get_role(int(id_))
|
print(id_,type(id_))
|
||||||
response.add_field(name=role.name, value=self.config.roles[id_], inline=True)
|
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)
|
||||||
await message.channel.send(embed=response)
|
await message.channel.send(embed=response)
|
||||||
|
|
||||||
async def com_add(self, message, args, kwargs):
|
async def com_add(self, message, args, kwargs):
|
||||||
|
guild = self.client.get_guild(self.config.guild)
|
||||||
|
member = guild.get_member(message.author.id)
|
||||||
if len(args) <= 1:
|
if len(args) <= 1:
|
||||||
await message.channel.send("Il manque des arguments à la commande")
|
await message.channel.send("Il manque des arguments à la commande")
|
||||||
for role in args[0:]:
|
for role_ in args[1:]:
|
||||||
drole = await self.client.id.get_role(name="Invité")
|
role = await self.client.id.get_role(name=role_, guild=guild, case_sensitive=False)
|
||||||
if drole is None or str(drole.id) not in self.config.roles.keys():
|
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.")
|
await message.channel.send(f"Le role {role_} n'est pas disponible.")
|
||||||
else:
|
else:
|
||||||
try:
|
await self.tryaddrole(message, member, role)
|
||||||
await message.author.add_roles(drole)
|
|
||||||
except discord.errors.Forbidden:
|
async def com_remove(self, message, args, kwargs):
|
||||||
await message.channel.send(f"Je n'ai pas la permission d'attribuer le role {role}.")
|
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}.")
|
||||||
|
Loading…
Reference in New Issue
Block a user