+ 📝 team add memmbre command

This commit is contained in:
ddorn 2020-04-27 16:23:53 +02:00
parent ae5757aceb
commit 472cdfc251
1 changed files with 68 additions and 1 deletions

View File

@ -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())