✨ show results of tirage
This commit is contained in:
parent
aa7efb67b1
commit
4c63c0509e
|
@ -4,7 +4,7 @@ import os
|
||||||
import random
|
import random
|
||||||
import sys
|
import sys
|
||||||
import traceback
|
import traceback
|
||||||
from collections import defaultdict
|
from collections import defaultdict, namedtuple
|
||||||
from operator import attrgetter
|
from operator import attrgetter
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from typing import Dict, Type
|
from typing import Dict, Type
|
||||||
|
@ -37,6 +37,10 @@ MAX_REFUSE = len(PROBLEMS) - 5
|
||||||
ROUND_NAMES = ["premier tour", "deuxième tour"]
|
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):
|
class TfjmError(Exception):
|
||||||
def __init__(self, msg):
|
def __init__(self, msg):
|
||||||
self.msg = msg
|
self.msg = msg
|
||||||
|
@ -97,6 +101,10 @@ class Tirage:
|
||||||
next_class = await self.phase.next(ctx)
|
next_class = await self.phase.next(ctx)
|
||||||
|
|
||||||
if next_class is None:
|
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)
|
await self.end(ctx)
|
||||||
else:
|
else:
|
||||||
# Continue on the same round.
|
# Continue on the same round.
|
||||||
|
@ -106,12 +114,60 @@ class Tirage:
|
||||||
await self.phase.start(ctx)
|
await self.phase.start(ctx)
|
||||||
|
|
||||||
async def end(self, ctx):
|
async def end(self, ctx):
|
||||||
await ctx.send("Le tirage est fini ! Bonne chance à tous pour la suite !")
|
|
||||||
del tirages[self.channel]
|
del tirages[self.channel]
|
||||||
|
|
||||||
# Allow everyone to send messages again
|
# Allow everyone to send messages again
|
||||||
send = discord.PermissionOverwrite(send_messages=None) # reset
|
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:
|
class Phase:
|
||||||
|
@ -229,17 +285,9 @@ class OrderPhase(Phase):
|
||||||
return self.__class__
|
return self.__class__
|
||||||
|
|
||||||
|
|
||||||
class ShowPhase(Phase):
|
|
||||||
"""Phase where the bot resumes all that happened."""
|
|
||||||
|
|
||||||
NEXT = None
|
|
||||||
|
|
||||||
|
|
||||||
class TiragePhase(Phase):
|
class TiragePhase(Phase):
|
||||||
"""The phase where captains accept or refuse random problems."""
|
"""The phase where captains accept or refuse random problems."""
|
||||||
|
|
||||||
NEXT = ShowPhase
|
|
||||||
|
|
||||||
def __init__(self, tirage, round=0):
|
def __init__(self, tirage, round=0):
|
||||||
"""
|
"""
|
||||||
The main phase of the Tirage.
|
The main phase of the Tirage.
|
||||||
|
@ -419,7 +467,7 @@ class TiragePhase(Phase):
|
||||||
await ctx.send("Nous allons passer au deuxième tour")
|
await ctx.send("Nous allons passer au deuxième tour")
|
||||||
self.round = 1
|
self.round = 1
|
||||||
return TirageOrderPhase
|
return TirageOrderPhase
|
||||||
return ShowPhase
|
return None
|
||||||
|
|
||||||
|
|
||||||
class PassageOrderPhase(OrderPhase):
|
class PassageOrderPhase(OrderPhase):
|
||||||
|
@ -532,7 +580,6 @@ async def abort_draw_cmd(ctx):
|
||||||
if channel_id in tirages:
|
if channel_id in tirages:
|
||||||
await tirages[channel_id].end(ctx)
|
await tirages[channel_id].end(ctx)
|
||||||
await ctx.send("Le tirage est annulé.")
|
await ctx.send("Le tirage est annulé.")
|
||||||
del tirages[channel_id]
|
|
||||||
|
|
||||||
|
|
||||||
@bot.command(name="draw-skip")
|
@bot.command(name="draw-skip")
|
||||||
|
@ -540,10 +587,11 @@ async def draw_skip(ctx, *teams):
|
||||||
channel = ctx.channel.id
|
channel = ctx.channel.id
|
||||||
tirages[channel] = tirage = Tirage(ctx, channel, teams)
|
tirages[channel] = tirage = Tirage(ctx, channel, teams)
|
||||||
|
|
||||||
tirage.phase = TiragePhase(tirage)
|
tirage.phase = TiragePhase(tirage, round=1)
|
||||||
for i, team in enumerate(tirage.teams):
|
for i, team in enumerate(tirage.teams):
|
||||||
team.tirage_order = [i, None]
|
team.tirage_order = [i, i]
|
||||||
team.passage_order = [i, None]
|
team.passage_order = [i, i]
|
||||||
|
team.accepted_problems = [PROBLEMS[i], PROBLEMS[-i - 1]]
|
||||||
|
|
||||||
await ctx.send(f"Skipping to {tirage.phase.__class__.__name__}.")
|
await ctx.send(f"Skipping to {tirage.phase.__class__.__name__}.")
|
||||||
await tirage.phase.start(ctx)
|
await tirage.phase.start(ctx)
|
||||||
|
|
Loading…
Reference in New Issue