From cec426cd8da72e145b907d864fdc1c696c45c91f Mon Sep 17 00:00:00 2001 From: ddorn Date: Tue, 5 May 2020 13:23:07 +0200 Subject: [PATCH] :goal_net: more errors handling in dice --- data/jokes | 5 ----- src/cogs/tirages.py | 41 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/data/jokes b/data/jokes index a5c37c4..6798d44 100644 --- a/data/jokes +++ b/data/jokes @@ -31,8 +31,6 @@ C'est un schtroumpf il tombe et il se fait un bleu Pourquoi les policiers n'ont pas d'acné ? ||Car ils ont la peau lisse.|| --- -C'est l'histoire d'un pingouin qui respirait par les fesses. Un jour, il s'assoit, et il **meurt**. ---- Un tétârd se réveille. Il croyait qu'il était tôt mais en fait il était tard. --- Que fait un chien qui tombe dans la mer rouge ? @@ -49,9 +47,6 @@ Savez vous pourquoi il y a tant de célibataires à Dijon ? Pourquoi Napoléon n'a jamais déménagé ? ||Parce qu'il avait un Bonaparte|| --- -Qu'est-ce qu'un lapide ? -||Un tlain qui va tlès tlès vite|| ---- Qu'est-ce qu'un canife ? ||Un petit fien.|| --- diff --git a/src/cogs/tirages.py b/src/cogs/tirages.py index db88555..7ae525e 100644 --- a/src/cogs/tirages.py +++ b/src/cogs/tirages.py @@ -19,6 +19,8 @@ from src.errors import TfjmError, UnwantedCommand __all__ = ["Tirage", "TirageCog"] +from src.utils import send_and_bin + def in_passage_order(teams, round=0): return sorted(teams, key=lambda team: team.passage_order[round] or 0, reverse=True) @@ -622,8 +624,39 @@ class TirageCog(Cog, name="Tirages"): @commands.command( name="dice", aliases=["de", "dé", "roll"], usage="n", ) - async def dice(self, ctx: Context, n: int): + @send_and_bin + async def dice(self, ctx: Context, n): """Lance un dé à `n` faces.""" + + if not n: + raise TfjmError("Tu dois préciser un nombre de faces :wink:") + + bases = {"0x": 16, "0b": 2, "0o": 8} + + base = bases.get(n[:2], 10) + try: + n = int(n, base) + except ValueError: + try: + n = float(n) + + if abs(n) == float("inf"): + raise TfjmError("Alors là tu vises vraiment gros toi !") + if n != n: # NaN + raise TfjmError("Nan, ça je peux pas faire !") + if not n.is_integer(): + print(n) + raise TfjmError( + "Un dé avec des fractions de faces ? " + "Si tu me donnes un patron, je le lancerai !" + ) + + n = int(n) + except ValueError: + raise TfjmError( + "Ton argument ne ressemble pas trop à un entier :thinking:" + ) + channel = ctx.channel.id if channel in self.tirages: await self.tirages[channel].dice(ctx, n) @@ -632,8 +665,8 @@ class TirageCog(Cog, name="Tirages"): raise TfjmError(f"Un dé sans faces ? Le concept m'intéresse...") if n < 1: raise TfjmError( - f"Je ne peux pas lancer un dé avec un " - f"nombre négatif faces, désolé." + "Je n'ai pas encore de dés en antimatière, " + "désolé :man_shrugging:" ) if len(str(n)) > 1900: raise TfjmError( @@ -642,7 +675,7 @@ class TirageCog(Cog, name="Tirages"): ) dice = random.randint(1, n) - await ctx.send(f"{ctx.author.mention} : {Emoji.DICE} {dice}") + return f"{ctx.author.mention} : {Emoji.DICE} {dice}" @commands.command( name="random-problem",