From 5f20826574a801e8a31c777ed916944c615e0f4c Mon Sep 17 00:00:00 2001 From: Izan Date: Mon, 23 Aug 2021 21:31:46 +0100 Subject: Initial commit (add coinflip command in coinflip.py) --- bot/exts/evergreen/coinflip.py | 54 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 bot/exts/evergreen/coinflip.py diff --git a/bot/exts/evergreen/coinflip.py b/bot/exts/evergreen/coinflip.py new file mode 100644 index 00000000..dc9a960b --- /dev/null +++ b/bot/exts/evergreen/coinflip.py @@ -0,0 +1,54 @@ +import random +from typing import Optional, Tuple + +from discord.ext import commands + +from bot.bot import Bot + + +LEMON_HYPERPLEASED = "<:lemon_hyperpleased:754441879822663811>" +LEMON_PENSIVE = "<:lemon_pensive:754441880246419486>" + + +class CoinSide(commands.Converter): + HEADS: Tuple[str] = ("h", "head", "heads") + TAILS: Tuple[str] = ("t", "tail", "tails") + + async def convert(self, ctx: commands.Context, side: str) -> str: + if side in CoinSide.HEADS: + return "heads" + + elif side in CoinSide.TAILS: + return "tails" + + else: + raise commands.BadArgument(f"{side!r} is not a valid coin side.") + + +class CoinFlip(commands.Cog): + """Cog for the CoinFlip command.""" + + @commands.command(name="coinflip", aliases=("flip", "coin", "cf")) + async def coinflip_command(self, ctx: commands.Context, side: Optional[CoinSide]) -> None: + """ + Flips a coin. + + If `coin_side` is provided will state whether you guessed the side correctly. + """ + flipped_side = random.choice(["heads", "tails"]) + + if not side: + await ctx.send(f"{ctx.author.mention} Flipped **{flipped_side}**!") + return + + message = f"{ctx.author.mention} Flipped **{flipped_side}**. " + if side == flipped_side: + message += f"You guessed correctly! {LEMON_HYPERPLEASED}" + else: + message += f"You guessed incorrectly. {LEMON_PENSIVE}" + await ctx.send(message) + + +def setup(bot: Bot) -> None: + """Loads the coinflip cog.""" + bot.add_cog(CoinFlip()) -- cgit v1.2.3 From e58eb7c348fb470d2c9731c87f7365b0e025146f Mon Sep 17 00:00:00 2001 From: Izan Date: Mon, 23 Aug 2021 21:38:14 +0100 Subject: Add missing docstrings --- bot/exts/evergreen/coinflip.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bot/exts/evergreen/coinflip.py b/bot/exts/evergreen/coinflip.py index dc9a960b..eba4bb45 100644 --- a/bot/exts/evergreen/coinflip.py +++ b/bot/exts/evergreen/coinflip.py @@ -11,10 +11,13 @@ LEMON_PENSIVE = "<:lemon_pensive:754441880246419486>" class CoinSide(commands.Converter): + """Class used to convert the `side` parameter of coinflip command.""" + HEADS: Tuple[str] = ("h", "head", "heads") TAILS: Tuple[str] = ("t", "tail", "tails") async def convert(self, ctx: commands.Context, side: str) -> str: + """Converts the provided `side` into the corresponding string.""" if side in CoinSide.HEADS: return "heads" -- cgit v1.2.3 From 58c08750e755fa29a306fb38e475249d728e3b34 Mon Sep 17 00:00:00 2001 From: Izan Date: Tue, 24 Aug 2021 11:54:40 +0100 Subject: Update message to start with lowercase --- bot/exts/evergreen/coinflip.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bot/exts/evergreen/coinflip.py b/bot/exts/evergreen/coinflip.py index eba4bb45..7ec5b5b9 100644 --- a/bot/exts/evergreen/coinflip.py +++ b/bot/exts/evergreen/coinflip.py @@ -41,10 +41,10 @@ class CoinFlip(commands.Cog): flipped_side = random.choice(["heads", "tails"]) if not side: - await ctx.send(f"{ctx.author.mention} Flipped **{flipped_side}**!") + await ctx.send(f"{ctx.author.mention} flipped **{flipped_side}**!") return - message = f"{ctx.author.mention} Flipped **{flipped_side}**. " + message = f"{ctx.author.mention} flipped **{flipped_side}**. " if side == flipped_side: message += f"You guessed correctly! {LEMON_HYPERPLEASED}" else: -- cgit v1.2.3 From d2e9bfb79010a6b3eb9fe5656334b7a703d4123c Mon Sep 17 00:00:00 2001 From: Izan Date: Tue, 24 Aug 2021 11:57:11 +0100 Subject: Move lemojis into constants.py --- bot/constants.py | 3 +++ bot/exts/evergreen/coinflip.py | 9 +++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/bot/constants.py b/bot/constants.py index bb602361..b5097601 100644 --- a/bot/constants.py +++ b/bot/constants.py @@ -239,6 +239,9 @@ class Emojis: reddit_comments = "<:reddit_comments:755845255001014384>" reddit_users = "<:reddit_users:755845303822974997>" + lemon_hyperpleased = "<:lemon_hyperpleased:754441879822663811>" + lemon_pensive = "<:lemon_pensive:754441880246419486>" + class Icons: questionmark = "https://cdn.discordapp.com/emojis/512367613339369475.png" diff --git a/bot/exts/evergreen/coinflip.py b/bot/exts/evergreen/coinflip.py index 7ec5b5b9..2f9bf38b 100644 --- a/bot/exts/evergreen/coinflip.py +++ b/bot/exts/evergreen/coinflip.py @@ -4,10 +4,7 @@ from typing import Optional, Tuple from discord.ext import commands from bot.bot import Bot - - -LEMON_HYPERPLEASED = "<:lemon_hyperpleased:754441879822663811>" -LEMON_PENSIVE = "<:lemon_pensive:754441880246419486>" +from bot.constants import Emojis class CoinSide(commands.Converter): @@ -46,9 +43,9 @@ class CoinFlip(commands.Cog): message = f"{ctx.author.mention} flipped **{flipped_side}**. " if side == flipped_side: - message += f"You guessed correctly! {LEMON_HYPERPLEASED}" + message += f"You guessed correctly! {Emojis.lemon_hyperpleased}" else: - message += f"You guessed incorrectly. {LEMON_PENSIVE}" + message += f"You guessed incorrectly. {Emojis.lemon_pensive}" await ctx.send(message) -- cgit v1.2.3 From 3d15c39e04f6d85938450fa212b7b8f36fe21ff2 Mon Sep 17 00:00:00 2001 From: Izan Date: Wed, 25 Aug 2021 21:30:02 +0100 Subject: Fix `CoinSide` error being suppressed Now explicitly passes `None` as default value rather than using `typing.Optional`. --- bot/exts/evergreen/coinflip.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bot/exts/evergreen/coinflip.py b/bot/exts/evergreen/coinflip.py index 2f9bf38b..c0aa5645 100644 --- a/bot/exts/evergreen/coinflip.py +++ b/bot/exts/evergreen/coinflip.py @@ -1,5 +1,5 @@ import random -from typing import Optional, Tuple +from typing import Tuple from discord.ext import commands @@ -29,7 +29,7 @@ class CoinFlip(commands.Cog): """Cog for the CoinFlip command.""" @commands.command(name="coinflip", aliases=("flip", "coin", "cf")) - async def coinflip_command(self, ctx: commands.Context, side: Optional[CoinSide]) -> None: + async def coinflip_command(self, ctx: commands.Context, side: CoinSide = None) -> None: """ Flips a coin. -- cgit v1.2.3 From 6a92d64d9f113a02178cf05fd34c4169446c1842 Mon Sep 17 00:00:00 2001 From: Izan Date: Wed, 25 Aug 2021 21:37:57 +0100 Subject: General improvements Fix typo in docstring, change logic for creating message to be smarter, change CoinSide converter logic to be smarter --- bot/exts/evergreen/coinflip.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/bot/exts/evergreen/coinflip.py b/bot/exts/evergreen/coinflip.py index c0aa5645..3a2ece03 100644 --- a/bot/exts/evergreen/coinflip.py +++ b/bot/exts/evergreen/coinflip.py @@ -18,11 +18,10 @@ class CoinSide(commands.Converter): if side in CoinSide.HEADS: return "heads" - elif side in CoinSide.TAILS: + if side in CoinSide.TAILS: return "tails" - else: - raise commands.BadArgument(f"{side!r} is not a valid coin side.") + raise commands.BadArgument(f"{side!r} is not a valid coin side.") class CoinFlip(commands.Cog): @@ -33,16 +32,14 @@ class CoinFlip(commands.Cog): """ Flips a coin. - If `coin_side` is provided will state whether you guessed the side correctly. + If `side` is provided will state whether you guessed the side correctly. """ flipped_side = random.choice(["heads", "tails"]) - if not side: - await ctx.send(f"{ctx.author.mention} flipped **{flipped_side}**!") - return - message = f"{ctx.author.mention} flipped **{flipped_side}**. " - if side == flipped_side: + if not side: + await ctx.send(message) + elif side == flipped_side: message += f"You guessed correctly! {Emojis.lemon_hyperpleased}" else: message += f"You guessed incorrectly. {Emojis.lemon_pensive}" -- cgit v1.2.3 From cdaf8add882470efbe8fd63453e7457d9078b3d8 Mon Sep 17 00:00:00 2001 From: Izan Date: Fri, 27 Aug 2021 22:29:12 +0100 Subject: Fix message getting sent twice Message no longer gets sent twice when no side was provided to the `.coinflip` command --- bot/exts/evergreen/coinflip.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bot/exts/evergreen/coinflip.py b/bot/exts/evergreen/coinflip.py index 3a2ece03..bfd04843 100644 --- a/bot/exts/evergreen/coinflip.py +++ b/bot/exts/evergreen/coinflip.py @@ -39,7 +39,9 @@ class CoinFlip(commands.Cog): message = f"{ctx.author.mention} flipped **{flipped_side}**. " if not side: await ctx.send(message) - elif side == flipped_side: + return + + if side == flipped_side: message += f"You guessed correctly! {Emojis.lemon_hyperpleased}" else: message += f"You guessed incorrectly. {Emojis.lemon_pensive}" -- cgit v1.2.3 From d1743b3fb47ef20712c540fcb764b62a7f8df875 Mon Sep 17 00:00:00 2001 From: Izan Date: Fri, 27 Aug 2021 22:50:11 +0100 Subject: Implement requested changes to CoinSide converter Converter is now case-insensitive and uses `self.CONSTANT` instead of `CoinSide.CONSTANT` --- bot/exts/evergreen/coinflip.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bot/exts/evergreen/coinflip.py b/bot/exts/evergreen/coinflip.py index bfd04843..d1762463 100644 --- a/bot/exts/evergreen/coinflip.py +++ b/bot/exts/evergreen/coinflip.py @@ -15,10 +15,11 @@ class CoinSide(commands.Converter): async def convert(self, ctx: commands.Context, side: str) -> str: """Converts the provided `side` into the corresponding string.""" - if side in CoinSide.HEADS: + side = side.lower() + if side in self.HEADS: return "heads" - if side in CoinSide.TAILS: + if side in self.TAILS: return "tails" raise commands.BadArgument(f"{side!r} is not a valid coin side.") -- cgit v1.2.3