mirror of
				https://gitlab.com/ddorn/tfjm-discord-bot.git
				synced 2025-11-04 09:42:11 +01:00 
			
		
		
		
	✨ show results of tirage
This commit is contained in:
		@@ -4,7 +4,7 @@ import os
 | 
			
		||||
import random
 | 
			
		||||
import sys
 | 
			
		||||
import traceback
 | 
			
		||||
from collections import defaultdict
 | 
			
		||||
from collections import defaultdict, namedtuple
 | 
			
		||||
from operator import attrgetter
 | 
			
		||||
from time import sleep
 | 
			
		||||
from typing import Dict, Type
 | 
			
		||||
@@ -37,6 +37,10 @@ MAX_REFUSE = len(PROBLEMS) - 5
 | 
			
		||||
ROUND_NAMES = ["premier tour", "deuxième tour"]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def in_passage_order(teams, round=0):
 | 
			
		||||
    return sorted(teams, key=lambda team: team.passage_order[round], reverse=True)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TfjmError(Exception):
 | 
			
		||||
    def __init__(self, msg):
 | 
			
		||||
        self.msg = msg
 | 
			
		||||
@@ -97,6 +101,10 @@ class Tirage:
 | 
			
		||||
            next_class = await self.phase.next(ctx)
 | 
			
		||||
 | 
			
		||||
            if next_class is None:
 | 
			
		||||
                await ctx.send(
 | 
			
		||||
                    "Le tirage est fini ! Bonne chance à tous pour la suite !"
 | 
			
		||||
                )
 | 
			
		||||
                await self.show_tirage(ctx)
 | 
			
		||||
                await self.end(ctx)
 | 
			
		||||
            else:
 | 
			
		||||
                # Continue on the same round.
 | 
			
		||||
@@ -106,12 +114,60 @@ class Tirage:
 | 
			
		||||
                await self.phase.start(ctx)
 | 
			
		||||
 | 
			
		||||
    async def end(self, ctx):
 | 
			
		||||
        await ctx.send("Le tirage est fini ! Bonne chance à tous pour la suite !")
 | 
			
		||||
 | 
			
		||||
        del tirages[self.channel]
 | 
			
		||||
 | 
			
		||||
        # Allow everyone to send messages again
 | 
			
		||||
        send = discord.PermissionOverwrite(send_messages=None)  # reset
 | 
			
		||||
        await ctx.channel.edit(overwrites={ctx.guidl.default_role: send})
 | 
			
		||||
        await ctx.channel.edit(overwrites={ctx.guild.default_role: send})
 | 
			
		||||
 | 
			
		||||
    async def show_tirage(self, ctx):
 | 
			
		||||
        teams = ", ".join(team.mention for team in self.teams)
 | 
			
		||||
        msg = f"Voici un résumé du tirage entre les équipes {teams}."
 | 
			
		||||
 | 
			
		||||
        if len(self.teams) == 3:
 | 
			
		||||
            table = """```
 | 
			
		||||
    +-----+---------+---------+---------+
 | 
			
		||||
    |     | Phase 1 | Phase 2 | Phase 3 |
 | 
			
		||||
    |     |   Pb {0.pb}  |   Pb {1.pb}  |   Pb {2.pb}  |
 | 
			
		||||
    +-----+---------+---------+---------+
 | 
			
		||||
    | {0.name} |   Déf   |   Rap   |   Opp   |
 | 
			
		||||
    +-----+---------+---------+---------+
 | 
			
		||||
    | {1.name} |   Opp   |   Déf   |   Rap   |
 | 
			
		||||
    +-----+---------+---------+---------+
 | 
			
		||||
    | {2.name} |   Rap   |   Opp   |   Déf   |
 | 
			
		||||
    +-----+---------+---------+---------+
 | 
			
		||||
```"""
 | 
			
		||||
        else:
 | 
			
		||||
            table = """```
 | 
			
		||||
    +-----+---------+---------+---------+---------+
 | 
			
		||||
    |     | Phase 1 | Phase 2 | Phase 3 | Phase 4 |
 | 
			
		||||
    |     |   Pb {0.pb}  |   Pb {1.pb}  |   Pb {2.pb}  |   Pb {3.pb}  |
 | 
			
		||||
    +-----+---------+---------+---------+---------+
 | 
			
		||||
    | {0.name} |   Déf   |         |   Rap   |   Opp   |
 | 
			
		||||
    +-----+---------+---------+---------+---------+
 | 
			
		||||
    | {0.name} |   Opp   |   Déf   |         |   Rap   |
 | 
			
		||||
    +-----+---------+---------+---------+---------+
 | 
			
		||||
    | {0.name} |   Rap   |   Opp   |   Déf   |         |
 | 
			
		||||
    +-----+---------+---------+---------+---------+
 | 
			
		||||
    | {0.name} |         |   Rap   |   Opp   |   Déf   |
 | 
			
		||||
    +-----+---------+---------+---------+---------+
 | 
			
		||||
```"""
 | 
			
		||||
        Record = namedtuple("Record", ["name", "pb"])
 | 
			
		||||
        records = [
 | 
			
		||||
            [
 | 
			
		||||
                Record(team.name, team.accepted_problems[round][0])
 | 
			
		||||
                for team in in_passage_order(self.teams, round)
 | 
			
		||||
            ]
 | 
			
		||||
            for round in (0, 1)
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
        msg += "\n\nPremier tour:\n"
 | 
			
		||||
        msg += table.format(*records[0])
 | 
			
		||||
        msg += "\n\n Deuxième tour:\n"
 | 
			
		||||
        msg += table.format(*records[1])
 | 
			
		||||
 | 
			
		||||
        await ctx.send(msg)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Phase:
 | 
			
		||||
@@ -229,17 +285,9 @@ class OrderPhase(Phase):
 | 
			
		||||
            return self.__class__
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ShowPhase(Phase):
 | 
			
		||||
    """Phase where the bot resumes all that happened."""
 | 
			
		||||
 | 
			
		||||
    NEXT = None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TiragePhase(Phase):
 | 
			
		||||
    """The phase where captains accept or refuse random problems."""
 | 
			
		||||
 | 
			
		||||
    NEXT = ShowPhase
 | 
			
		||||
 | 
			
		||||
    def __init__(self, tirage, round=0):
 | 
			
		||||
        """
 | 
			
		||||
        The main phase of the Tirage.
 | 
			
		||||
@@ -419,7 +467,7 @@ class TiragePhase(Phase):
 | 
			
		||||
            await ctx.send("Nous allons passer au deuxième tour")
 | 
			
		||||
            self.round = 1
 | 
			
		||||
            return TirageOrderPhase
 | 
			
		||||
        return ShowPhase
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PassageOrderPhase(OrderPhase):
 | 
			
		||||
@@ -532,7 +580,6 @@ async def abort_draw_cmd(ctx):
 | 
			
		||||
    if channel_id in tirages:
 | 
			
		||||
        await tirages[channel_id].end(ctx)
 | 
			
		||||
        await ctx.send("Le tirage est annulé.")
 | 
			
		||||
        del tirages[channel_id]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@bot.command(name="draw-skip")
 | 
			
		||||
@@ -540,10 +587,11 @@ async def draw_skip(ctx, *teams):
 | 
			
		||||
    channel = ctx.channel.id
 | 
			
		||||
    tirages[channel] = tirage = Tirage(ctx, channel, teams)
 | 
			
		||||
 | 
			
		||||
    tirage.phase = TiragePhase(tirage)
 | 
			
		||||
    tirage.phase = TiragePhase(tirage, round=1)
 | 
			
		||||
    for i, team in enumerate(tirage.teams):
 | 
			
		||||
        team.tirage_order = [i, None]
 | 
			
		||||
        team.passage_order = [i, None]
 | 
			
		||||
        team.tirage_order = [i, i]
 | 
			
		||||
        team.passage_order = [i, i]
 | 
			
		||||
        team.accepted_problems = [PROBLEMS[i], PROBLEMS[-i - 1]]
 | 
			
		||||
 | 
			
		||||
    await ctx.send(f"Skipping to {tirage.phase.__class__.__name__}.")
 | 
			
		||||
    await tirage.phase.start(ctx)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user