tfjm-discord-bot/src/cogs/teams.py

80 lines
2.6 KiB
Python
Raw Normal View History

2020-04-27 12:46:04 +00:00
from collections import namedtuple
import discord
from discord.ext import commands
from discord.ext.commands import Cog, Bot, group, Context
from discord.utils import get, find
from src.constants import *
Team = namedtuple("Team", ["name", "trigram", "tournoi", "secret", "status"])
class TeamsCog(Cog, name="Teams"):
def __init__(self):
self.teams = self.load_teams()
def load_teams(self):
with open(TEAMS_FILE) as f:
# first line is header
lines = f.read().splitlines()[1:]
teams = [
Team(*[field.strip('"') for field in line.split(";")]) for line in lines
]
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):
await ctx.message.delete()
team: Team = get(self.teams, trigram=trigram)
role: discord.Role = get(ctx.guild.roles, name=trigram)
captain_role = get(ctx.guild.roles, name=Role.CAPTAIN)
if team is None:
await ctx.send(
f"{ctx.author.mention}: le trigram `{trigram}` "
f"n'est pas valide. Es-tu sûr d'avoir le bon ?"
)
elif role is not None:
# Team exists
captain = find(lambda m: captain_role in m.roles, role.members)
await ctx.send(
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}`"
)
elif team_secret != team.secret:
await ctx.send(
f"{ctx.author.mention}: ton secret n'est pas valide, "
f"Tu peux le trouver sur https://inscription.tfjm.org/mon-equipe."
)
else:
# Team creation !
2020-04-27 13:07:21 +00:00
guild: discord.Guild = ctx.guild
team_role = await guild.create_role(
name=trigram,
color=discord.Colour.from_rgb(255, 255, 255),
reason="Creation of a new team",
)
tournoi = get(guild.roles, name=team.tournoi)
await ctx.author.add_roles(
team_role, captain_role, tournoi, reason="Creation of team " + trigram
)
2020-04-27 12:46:04 +00:00
2020-04-27 13:07:21 +00:00
await ctx.send(
f"L'équipe {team_role.mention} a été créée et son capitaine "
f"est {ctx.author.mention}"
)
2020-04-27 12:46:04 +00:00
def setup(bot: Bot):
bot.add_cog(TeamsCog())