aboutsummaryrefslogtreecommitdiffstats
path: root/bot
diff options
context:
space:
mode:
authorGravatar scragly <[email protected]>2019-04-03 15:22:57 +0100
committerGravatar GitHub <[email protected]>2019-04-03 15:22:57 +0100
commit8bb3078b2a3cd7d9defcf26958bde4a184f5e1be (patch)
treeb7a61f9515f44870877efa43c2d409fa531c9763 /bot
parentAdd xkcd and html colour name data. (diff)
Apply suggestions from code review
Co-Authored-By: Suhail6inkling <[email protected]>
Diffstat (limited to 'bot')
-rw-r--r--bot/seasons/easter/egg_decorating.py54
1 files changed, 38 insertions, 16 deletions
diff --git a/bot/seasons/easter/egg_decorating.py b/bot/seasons/easter/egg_decorating.py
index 46351534..fbbd09f5 100644
--- a/bot/seasons/easter/egg_decorating.py
+++ b/bot/seasons/easter/egg_decorating.py
@@ -1,8 +1,10 @@
+import json
import logging
import random
+from contextlib import suppress
from io import BytesIO
from pathlib import Path
-
+from typing import Union
import discord
from PIL import Image
@@ -10,6 +12,12 @@ from discord.ext import commands
log = logging.getLogger(__name__)
+with open(Path("bot", "resources", "evergreen", "html_colours.json")) as f:
+ HTML_COLOURS = json.load(f)
+
+with open(Path("bot", "resources", "evergreen", "xkcd_colours.json")) as f:
+ XKCD_COLOURS = json.load(f)
+
COLOURS = [
(255, 0, 0, 255), (255, 128, 0, 255), (255, 255, 0, 255), (0, 255, 0, 255),
(0, 255, 255, 255), (0, 0, 255, 255), (255, 0, 255, 255), (128, 0, 128, 255)
@@ -21,17 +29,27 @@ IRREPLACEABLE = [
class EggDecorating(commands.Cog):
- """A Command that lets you decorate some easter eggs!"""
+ """Decorate some easter eggs!"""
def __init__(self, bot):
self.bot = bot
+ @staticmethod
+ def replace_invalid(colour: str):
+ """Attempts to match with HTML or XKCD colour names, returning the int value."""
+ with suppress(KeyError):
+ return int(HTML_COLOURS[colour], 16)
+ with suppress(KeyError):
+ return int(XKCD_COLOURS[colour], 16)
+ return None
+
@commands.command(aliases=["decorateegg"])
- async def eggdecorate(self, ctx, *colours):
+ async def eggdecorate(self, ctx, *colours: Union[discord.Colour, str]):
"""
- This 'paints' a beautiful egg using inputted colours
+ Picks a random egg design and decorates it using the given colours.
- It picks from a random set of designs and alters the colours to the user's liking
+ Colours are split by spaces, unless you wrap the colour name in double quotes.
+ Discord colour names, HTML colour names, XKCD colour names and hex values are accepted.
"""
if len(colours) < 2:
@@ -48,21 +66,22 @@ class EggDecorating(commands.Cog):
invalid.append(c)
if len(invalid) > 1:
- return await ctx.send(f"The following colours are invalid: {' '.join(invalid)}")
+ return await ctx.send(f"Sorry, I don't know these colours: {' '.join(invalid)}")
elif len(invalid) == 1:
- return await ctx.send(f"{invalid[0]} is an invalid colour!")
-
- colours = converted
+ return await ctx.send(f"Sorry, I don't know the colour {invalid[0]}!")
async with ctx.typing():
- colours *= 4
- # This is to ensure that no IndexErrors are raised since the most amount of colours on an egg is 8
+ # expand list to 8 colours
+ colours_n = len(colours)
+ if colours_n < 8:
+ q, r = divmod(8, colours_n)
+ colours = colours * q + colours[:r]
num = random.randint(1, 6)
im = Image.open(Path("bot", "resources", "easter", "easter_eggs", f"design{num}.png"))
data = list(im.getdata())
- replaceable = {x for x in data if x not in IRREPLACEABLE} # Turns it into a set to avoid duplicates
- replaceable = sorted(replaceable, key=COLOURS.index) # Sorts it by colour order
+ replaceable = {x for x in data if x not in IRREPLACEABLE}
+ replaceable = sorted(replaceable, key=COLOURS.index)
replacing_colours = {colour: colours[i] for i, colour in enumerate(replaceable)}
new_data = []
@@ -81,11 +100,14 @@ class EggDecorating(commands.Cog):
bufferedio.seek(0)
file = discord.File(bufferedio, filename="egg.png") # Creates file to be used in embed
- embed = discord.Embed(title="Your egg", description="Here is your pretty little egg. Hope you like it!")
+ embed = discord.Embed(
+ title="Your Colourful Easter Egg",
+ description="Here is your pretty little egg. Hope you like it!"
+ )
embed.set_image(url="attachment://egg.png")
- embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar_url)
+ embed.set_footer(text=f"Made by {ctx.author.display_name}", icon_url=ctx.author.avatar_url)
- await ctx.send(file=file, embed=embed)
+ await ctx.send(file=file, embed=embed)
def setup(bot):