From 6d1560ceaa763a10275e76278a23c2131bc06c6a Mon Sep 17 00:00:00 2001 From: ddorn Date: Tue, 19 May 2020 10:11:50 +0200 Subject: [PATCH] :sparkles: edit eval msg + add FINALISTE and hug visual improvements --- src/cogs/dev.py | 57 ++++++++++++++++++++++++++++++++++++++++-------- src/cogs/misc.py | 22 +++++++++++-------- src/constants.py | 2 ++ 3 files changed, 63 insertions(+), 18 deletions(-) diff --git a/src/cogs/dev.py b/src/cogs/dev.py index 162646d..a084a50 100644 --- a/src/cogs/dev.py +++ b/src/cogs/dev.py @@ -21,7 +21,7 @@ from ptpython.repl import embed from src.constants import * from src.core import CustomBot from src.errors import TfjmError -from src.utils import fg +from src.utils import fg, french_join COGS_SHORTCUTS = { "bt": "src.base_tirage", @@ -136,10 +136,22 @@ class DevCog(Cog, name="Dev tools"): # noinspection PyUnreachableCode @command(name="setup") @has_role(Role.DEV) - async def setup_roles(self, ctx): + async def setup_roles(self, ctx: Context, *teams: discord.Role): """ (dev) Commande temporaire pour setup le serveur. """ + return + finalist = get(ctx.guild.roles, name=Role.FINALISTE) + assert finalist + + for t in teams: + m: discord.Member + for m in t.members: + await m.add_roles(finalist) + + await ctx.send( + f"{french_join(t.mention for t in teams)} ont été ajouté en finale !" + ) return guild: discord.Guild = ctx.guild @@ -213,12 +225,10 @@ class DevCog(Cog, name="Dev tools"): await channel.delete_messages(to_delete) await ctx.message.delete() - @command(name="eval", aliases=["e"]) - @is_owner() - async def eval_cmd(self, ctx: Context): - """""" - msg: Message = ctx.message - guild: discord.Guild = ctx.guild + def eval(self, msg: Message) -> discord.Embed: + guild: discord.Guild = msg.guild + roles = guild.roles + members = guild.members query = re.match(RE_QUERY, msg.content).group("query") @@ -258,7 +268,36 @@ class DevCog(Cog, name="Dev tools"): embed = discord.Embed(title="Result", color=discord.Colour.green()) embed.add_field(name="Query", value=f"```py\n{query}```", inline=False) embed.add_field(name="Value", value=f"```py\n{out.read()}```", inline=False) - await ctx.send(embed=embed) + embed.set_footer(text="You may edit your message.") + return embed + + @command(name="eval", aliases=["e"]) + @is_owner() + async def eval_cmd(self, ctx: Context): + """""" + embed = self.eval(ctx.message) + resp = await ctx.send(embed=embed) + + def check(before, after): + return after.id == ctx.message.id + + while True: + try: + before, after = await self.bot.wait_for( + "message_edit", check=check, timeout=600 + ) + except asyncio.TimeoutError: + break + + embed = self.eval(after) + await resp.edit(embed=embed) + + # Remove the "You may edit your message" + embed.set_footer() + try: + await resp.edit(embed=embed) + except discord.NotFound: + pass @Cog.listener() async def on_message(self, msg: Message): diff --git a/src/cogs/misc.py b/src/cogs/misc.py index 2d7bfd2..54b4437 100644 --- a/src/cogs/misc.py +++ b/src/cogs/misc.py @@ -8,6 +8,7 @@ import urllib from collections import defaultdict, Counter from dataclasses import dataclass, field from functools import partial +from math import log from operator import attrgetter, itemgetter from time import time from typing import List, Set, Union @@ -393,7 +394,7 @@ class MiscCog(Cog, name="Divers"): async def send_hugs_stats_for(self, ctx: Context, who: Member): embed = discord.Embed( - title=f"Calins de {who.display_name}", color=discord.Colour.magenta() + title=f"Câlins de {who.display_name}", color=discord.Colour.magenta() ) given = self.hugs_given(ctx, who.id) @@ -401,16 +402,19 @@ class MiscCog(Cog, name="Divers"): auto = self.auto_hugs(ctx, who.id) cut = [h for h in given if "coupé en deux" in h.text] infos = { - "Câlins donnés": len(given), - "Câlins reçus": len(received), - "Personnes câlinées": len(set(h.hugged for h in given)), - "Câliné par": len(set(h.hugger for h in received)), - "Auto-câlins": len(auto), - "Coupé en deux": len(cut), + "Câlins donnés": (len(given), 1), + "Câlins reçus": (len(received), 1), + "Personnes câlinées": (len(set(h.hugged for h in given)), 20), + "Câliné par": (len(set(h.hugger for h in received)), 30), + "Auto-câlins": ((len(auto)), 3), + "Morceaux": (len(cut), 30), } - for f, v in infos.items(): - embed.add_field(name=f, value=f"{v} {self.heart_for_stat(v)}") + for f, (v, h_factor) in infos.items(): + heart = self.heart_for_stat(v * h_factor) + if f == "Morceaux": + v = 2 ** v + embed.add_field(name=f, value=f"{v} {heart}") await ctx.send(embed=embed) diff --git a/src/constants.py b/src/constants.py index f7d5f1d..3793ed0 100644 --- a/src/constants.py +++ b/src/constants.py @@ -62,6 +62,7 @@ TOURNOIS = [ "Tours", "Bordeaux-Nancy", "Rennes", + "Finale", ] @@ -73,6 +74,7 @@ class Role: JURY = tuple(f"Jury {t}" for t in TOURNOIS) BENEVOLE = "Bénévole" CAPTAIN = "Capitaine" + FINALISTE = "Finaliste" PARTICIPANT = "Participant" TOURIST = "Touriste" PRETRESSE_CALINS = "Grande prêtresse des câlins"