mirror of
				https://gitlab.com/ddorn/tfjm-discord-bot.git
				synced 2025-10-30 08:19:54 +01:00 
			
		
		
		
	✨ poules à 5
+ 120s timeout for fracals + relative path for memes
This commit is contained in:
		| @@ -226,7 +226,9 @@ class BaseTirage(yaml.YAMLObject): | |||||||
|             accept = await self.next(bool, team.name) |             accept = await self.next(bool, team.name) | ||||||
|             if accept.value: |             if accept.value: | ||||||
|                 team.accepted_problems[poule.rnd] = pevent.value |                 team.accepted_problems[poule.rnd] = pevent.value | ||||||
|                 await self.info_accepted(team, pevent.value) |                 await self.info_accepted( | ||||||
|  |                     team, pevent.value, self.availaible(pevent.value, poule) | ||||||
|  |                 ) | ||||||
|             else: |             else: | ||||||
|                 await self.info_rejected(team, pevent.value, rnd=poule.rnd) |                 await self.info_rejected(team, pevent.value, rnd=poule.rnd) | ||||||
|                 team.rejected[poule.rnd].add(pevent.value) |                 team.rejected[poule.rnd].add(pevent.value) | ||||||
| @@ -234,6 +236,33 @@ class BaseTirage(yaml.YAMLObject): | |||||||
|             current += 1 |             current += 1 | ||||||
|             current %= len(teams) |             current %= len(teams) | ||||||
|  |  | ||||||
|  |         if len(teams) == 5: | ||||||
|  |             # We can determine the passage order only once problems are drawn. | ||||||
|  |             order = [self.teams[tri] for tri in self.poules[poule]] | ||||||
|  |             pbs = [team.accepted_problems[poule.rnd] for team in order] | ||||||
|  |  | ||||||
|  |             doubles = [] | ||||||
|  |             i = 0 | ||||||
|  |             while i < len(order): | ||||||
|  |                 team = order[i] | ||||||
|  |                 if pbs.count(team.accepted_problems[poule.rnd]) == 2: | ||||||
|  |                     # We pop the two with the same pb and add them to the doubles | ||||||
|  |                     doubles.append(order.pop(i)) | ||||||
|  |                     other = next( | ||||||
|  |                         filter( | ||||||
|  |                             lambda t: team.accepted_problems[poule.rnd] | ||||||
|  |                             == t.accepted_problems[poule.rnd], | ||||||
|  |                             order, | ||||||
|  |                         ) | ||||||
|  |                     ) | ||||||
|  |                     doubles.append(other) | ||||||
|  |                     order.remove(other) | ||||||
|  |                 else: | ||||||
|  |                     i += 1 | ||||||
|  |             # The conflicts | ||||||
|  |             order = doubles + order | ||||||
|  |             self.poules[poule] = order | ||||||
|  |  | ||||||
|         await self.annonce_poule(poule) |         await self.annonce_poule(poule) | ||||||
|  |  | ||||||
|     async def draw_order(self, poule): |     async def draw_order(self, poule): | ||||||
| @@ -292,7 +321,7 @@ class BaseTirage(yaml.YAMLObject): | |||||||
|     async def info_draw_pb(self, team, pb, rnd): |     async def info_draw_pb(self, team, pb, rnd): | ||||||
|         """Called when a team draws a problem.""" |         """Called when a team draws a problem.""" | ||||||
|  |  | ||||||
|     async def info_accepted(self, team, pb): |     async def info_accepted(self, team, pb, still_available): | ||||||
|         """Called when a team accepts a problem.""" |         """Called when a team accepts a problem.""" | ||||||
|  |  | ||||||
|     async def info_rejected(self, team, pb, rnd): |     async def info_rejected(self, team, pb, rnd): | ||||||
|   | |||||||
| @@ -115,7 +115,7 @@ class MiscCog(Cog, name="Divers"): | |||||||
|             seed = seed or str(random.randint(0, 1_000_000_000)) |             seed = seed or str(random.randint(0, 1_000_000_000)) | ||||||
|             async with aiohttp.ClientSession() as session: |             async with aiohttp.ClientSession() as session: | ||||||
|                 async with session.get( |                 async with session.get( | ||||||
|                     FRACTAL_URL.format(seed=urllib.parse.quote(seed)) |                     FRACTAL_URL.format(seed=urllib.parse.quote(seed)), timeout=120 | ||||||
|                 ) as resp: |                 ) as resp: | ||||||
|                     if resp.status != 200: |                     if resp.status != 200: | ||||||
|                         return await ctx.send( |                         return await ctx.send( | ||||||
| @@ -247,7 +247,7 @@ class MiscCog(Cog, name="Divers"): | |||||||
|             raise TfjmError("Il n'y a pas de blague avec cet ID.") |             raise TfjmError("Il n'y a pas de blague avec cet ID.") | ||||||
|  |  | ||||||
|         if joke.file: |         if joke.file: | ||||||
|             file = discord.File(joke.file) |             file = discord.File(File.MEMES / joke.file) | ||||||
|         else: |         else: | ||||||
|             file = None |             file = None | ||||||
|  |  | ||||||
| @@ -273,8 +273,8 @@ class MiscCog(Cog, name="Divers"): | |||||||
|  |  | ||||||
|         if message.attachments: |         if message.attachments: | ||||||
|             file: discord.Attachment = message.attachments[0] |             file: discord.Attachment = message.attachments[0] | ||||||
|             joke.file = str(File.MEMES / f"{joke_id}-{file.filename}") |             joke.file = str(f"{joke_id}-{file.filename}") | ||||||
|             await file.save(joke.file) |             await file.save(File.MEMES / joke.file) | ||||||
|  |  | ||||||
|         jokes.append(joke) |         jokes.append(joke) | ||||||
|         self.save_jokes(jokes) |         self.save_jokes(jokes) | ||||||
|   | |||||||
| @@ -279,7 +279,9 @@ class TeamsCog(Cog, name="Teams"): | |||||||
|             channel_name, |             channel_name, | ||||||
|             overwrites={ |             overwrites={ | ||||||
|                 guild.default_role: discord.PermissionOverwrite(read_messages=False), |                 guild.default_role: discord.PermissionOverwrite(read_messages=False), | ||||||
|                 team_role: discord.PermissionOverwrite(read_messages=True), |                 team_role: discord.PermissionOverwrite( | ||||||
|  |                     read_messages=True, manage_channels=True | ||||||
|  |                 ), | ||||||
|             }, |             }, | ||||||
|             category=team_channel_category, |             category=team_channel_category, | ||||||
|             reason=f"{ctx.author.name} à demandé une channel pour son équipe.", |             reason=f"{ctx.author.name} à demandé une channel pour son équipe.", | ||||||
|   | |||||||
| @@ -273,17 +273,17 @@ class DiscordTirage(BaseTirage): | |||||||
|  |  | ||||||
|         if len(teams) == 3: |         if len(teams) == 3: | ||||||
|             table = """``` |             table = """``` | ||||||
| +-----+---------+---------+---------+ | ╔═════╦═════════╦═════════╦═════════╗ | ||||||
| |     | Phase 1 | Phase 2 | Phase 3 | | ║     ║ Phase 1 ║ Phase 2 ║ Phase 3 ║ | ||||||
| |     |   Pb {0.pb}  |   Pb {1.pb}  |   Pb {2.pb}  | | ║     ║   Pb {0.pb}  ║   Pb {0.pb}  ║   Pb {0.pb}  ║ | ||||||
| +-----+---------+---------+---------+ | ╠═════╬═════════╬═════════╬═════════╣ | ||||||
| | {0.name} |   Déf   |   Rap   |   Opp   | | ║ {0.name} ║   Def   ║   Rap   ║   Opp   ║ | ||||||
| +-----+---------+---------+---------+ | ╠═════╬═════════╬═════════╬═════════╣ | ||||||
| | {1.name} |   Opp   |   Déf   |   Rap   | | ║ {1.name} ║   Opp   ║   Def   ║   Rap   ║ | ||||||
| +-----+---------+---------+---------+ | ╠═════╬═════════╬═════════╬═════════╣ | ||||||
| | {2.name} |   Rap   |   Opp   |   Déf   | | ║ {2.name} ║   Rap   ║   Opp   ║   Def   ║ | ||||||
| +-----+---------+---------+---------+```""" | ╚═════╩═════════╩═════════╩═════════╝```""" | ||||||
|         else: |         elif len(teams) == 4: | ||||||
|             table = """``` |             table = """``` | ||||||
| +-----+---------+---------+---------+---------+ | +-----+---------+---------+---------+---------+ | ||||||
| |     | Phase 1 | Phase 2 | Phase 3 | Phase 4 | | |     | Phase 1 | Phase 2 | Phase 3 | Phase 4 | | ||||||
| @@ -297,6 +297,26 @@ class DiscordTirage(BaseTirage): | |||||||
| +-----+---------+---------+---------+---------+ | +-----+---------+---------+---------+---------+ | ||||||
| | {3.name} |         |   Rap   |   Opp   |   Déf   | | | {3.name} |         |   Rap   |   Opp   |   Déf   | | ||||||
| +-----+---------+---------+---------+---------+```""" | +-----+---------+---------+---------+---------+```""" | ||||||
|  |         elif len(teams) == 5: | ||||||
|  |             table = """``` | ||||||
|  | ╔═════╦═══════════════════╦═══════════════════╦═════════╗ | ||||||
|  | ║     ║      Phase 1      ║      Phase 2      ║ Phase 3 ║ | ||||||
|  | ╠═════╬═════════╦═════════╬═════════╦═════════╬═════════╣ | ||||||
|  | ║     ║ Salle 1 ║ Salle 2 ║ Salle 1 ║ Salle 2 ║ Salle 1 ║ | ||||||
|  | ║     ║   Pb  {0.pb}  ║   Pb {1.pb}  ║   Pb {2.pb}  ║   Pb {3.pb}  ║   Pb {4.pb}  ║ | ||||||
|  | ╠═════╬═════════╬═════════╬═════════╬═════════╬═════════╣ | ||||||
|  | ║ {0.name} ║   Def   ║         ║   Opp   ║   Rap   ║         ║ | ||||||
|  | ╠═════╬═════════╬═════════╬═════════╬═════════╬═════════╣ | ||||||
|  | ║ {1.name} ║         ║   Def   ║   Rap   ║         ║   Opp   ║ | ||||||
|  | ╠═════╬═════════╬═════════╬═════════╬═════════╬═════════╣ | ||||||
|  | ║ {2.name} ║   Opp   ║         ║   Def   ║         ║   Rap   ║ | ||||||
|  | ╠═════╬═════════╬═════════╬═════════╬═════════╬═════════╣ | ||||||
|  | ║ {3.name} ║   Rap   ║   Opp   ║         ║   Def   ║         ║ | ||||||
|  | ╠═════╬═════════╬═════════╬═════════╬═════════╬═════════╣ | ||||||
|  | ║ {4.name} ║         ║   Rap   ║         ║   Opp   ║   Def   ║ | ||||||
|  | ╚═════╩═════════╩═════════╩═════════╩═════════╩═════════╝```""" | ||||||
|  |         else: | ||||||
|  |             table = "WTF il n'y a pas 3,4 ou 5 equipes ici." | ||||||
|  |  | ||||||
|         embed = discord.Embed( |         embed = discord.Embed( | ||||||
|             title=f"Résumé du tirage entre {french_join([t.name for t in teams])}", |             title=f"Résumé du tirage entre {french_join([t.name for t in teams])}", | ||||||
| @@ -389,12 +409,18 @@ class DiscordTirage(BaseTirage): | |||||||
|                 ) |                 ) | ||||||
|  |  | ||||||
|     @safe |     @safe | ||||||
|     async def info_accepted(self, team, pb): |     async def info_accepted(self, team, pb, still_available): | ||||||
|         await self.ctx.send( |         if still_available: | ||||||
|             f"L'équipe {team.mention} a accepté " |             await self.ctx.send( | ||||||
|             f"**{pb}** ! Les autres équipes " |                 f"L'équipe {team.mention} a accepté " | ||||||
|             f"ne peuvent plus l'accepter." |                 f"**{pb}** ! Une autre équipe peut encore l'accepter." | ||||||
|         ) |             ) | ||||||
|  |         else: | ||||||
|  |             await self.ctx.send( | ||||||
|  |                 f"L'équipe {team.mention} a accepté " | ||||||
|  |                 f"**{pb}** ! Les autres équipes " | ||||||
|  |                 f"ne peuvent plus l'accepter." | ||||||
|  |             ) | ||||||
|  |  | ||||||
|     @safe |     @safe | ||||||
|     async def info_rejected(self, team, pb, rnd): |     async def info_rejected(self, team, pb, rnd): | ||||||
| @@ -574,8 +600,8 @@ class TirageCog(Cog, name="Tirages"): | |||||||
|                 "par exemple `3+3` pour deux poules à trois équipes" |                 "par exemple `3+3` pour deux poules à trois équipes" | ||||||
|             ) |             ) | ||||||
|  |  | ||||||
|         if not set(fmt).issubset({3, 4}): |         if not set(fmt).issubset({3, 4, 5}): | ||||||
|             raise TfjmError("Seuls les poules à 3 ou 4 équipes sont suportées.") |             raise TfjmError("Seuls les poules à 3, 4 ou 5 équipes sont suportées.") | ||||||
|  |  | ||||||
|         # Here all data should be valid |         # Here all data should be valid | ||||||
|  |  | ||||||
|   | |||||||
| @@ -34,9 +34,9 @@ if TOKEN is None: | |||||||
| GUILD = "690934836696973404" | GUILD = "690934836696973404" | ||||||
| DIEGO = 430566197868625920  # Mon id | DIEGO = 430566197868625920  # Mon id | ||||||
| BOT = 703305132300959754 | BOT = 703305132300959754 | ||||||
| TEAMS_CHANNEL_CATEGORY = "Channels d'équipes" | TEAMS_CHANNEL_CATEGORY = "Channels d'équipes 2" | ||||||
| EMBED_COLOR = 0xFFA500 | EMBED_COLOR = 0xFFA500 | ||||||
| FRACTAL_URL = "https://thefractal.space/img/{seed}.png?size=1500" | FRACTAL_URL = "https://thefractal.space/img/{seed}.png?size=1000" | ||||||
| FRACTAL_COOLDOWN = 30  # seconds | FRACTAL_COOLDOWN = 30  # seconds | ||||||
|  |  | ||||||
| ROUND_NAMES = ["premier tour", "deuxième tour"] | ROUND_NAMES = ["premier tour", "deuxième tour"] | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user