diff --git a/src/cogs/teams.py b/src/cogs/teams.py index 598d56c..8891793 100644 --- a/src/cogs/teams.py +++ b/src/cogs/teams.py @@ -1,4 +1,5 @@ from collections import namedtuple +from typing import List, Tuple import discord from discord.ext import commands @@ -24,12 +25,36 @@ class TeamsCog(Cog, name="Teams"): ] return teams + def teams_for(self, member) -> List[Tuple[Team, discord.Role]]: + """Return a list of pairs (role, team) corresponding to the teams of the member""" + + teams = [] + for role in member.roles: + team = get(self.teams, trigram=role.name) + if team: + teams.append((team, role)) + return teams + @group(name="team") async def team(self, ctx): """Groupe de commandes pour la gestion des équipes.""" @team.command(name="create") async def create_team(self, ctx: Context, trigram, team_secret): + """ + Permet aux capitaines de créer leur equipes. + + Pour utiliser cette commande, il faut ton trigram et ton code + d'équipe. Tu peux ensuite écrire `!team create TRIGRAM SECRET` + en gradant le point d'éclamation et en remplaçant `TRIGRAM` et + `SECRET` par les bonnes valeurs. Le message que tu envoie sera + immédiatement supprimé pour pas que d'autres voient ton secret, + donc ne t'inquiète pas si il disparait. + + Exemple: + `!team create FOX abq23j` + """ + await ctx.message.delete() team: Team = get(self.teams, trigram=trigram) @@ -48,7 +73,7 @@ class TeamsCog(Cog, name="Teams"): f"{ctx.author.mention}: l'équipe {trigram} " f"existe déjà. Tu peux demander a ton capitaine " f"{captain.mention} de t'ajouter à l'équipe avec " - f"`!team add {ctx.author.mention}`" + f"`!team add {ctx.author.name}`" ) elif team_secret != team.secret: await ctx.send( @@ -74,6 +99,48 @@ class TeamsCog(Cog, name="Teams"): f"est {ctx.author.mention}" ) + @team.command(name="add") + @commands.has_role(Role.CAPTAIN) + async def team_add(self, ctx, member: discord.Member): + """ + Ajoute un membre a ton équipe. + + Commande réservée aux capitaines pour ajouter un + membre dans leur équipe. Cela permet juste de donner + les bons roles pour que les bonnes *channels* soient + accessibles. + + Exemple: + `!team add @Jean-Mich-Much` + """ + + author_teams = self.teams_for(ctx.author) + member_teams = self.teams_for(member) + + if member_teams: + await ctx.send( + f"{member.mention} est déjà dans une équipe " + f"et ne peut pas être dans deux à la fois." + ) + elif len(author_teams) > 1: + await ctx.send( + f"Tu est dans plusieurs équipes, je ne sais " + f"pas où l'ajouter. Il faut demander à un organisateur " + f"de le faire." + ) + else: + the_team = author_teams[0] + tournoi = get(ctx.guild.roles, name=the_team[0].tournoi) + + await member.add_roles( + the_team[1], + tournoi, + reason=f"{ctx.author.name} l'a ajouté à son équipe", + ) + await ctx.send( + f"{member.mention} à été ajouté dans l'équipe {the_team[1].mention}" + ) + def setup(bot: Bot): bot.add_cog(TeamsCog())