diff options
author | 2019-04-01 01:33:15 +0100 | |
---|---|---|
committer | 2019-04-01 01:33:15 +0100 | |
commit | 0205ed9ed83d282153da2406d4652e8a5b0a40ff (patch) | |
tree | 063c3064aeb29d0767e34ed32bfdfb45c6c6c91d | |
parent | Merge pull request #175 from python-discord/lemonstats (diff) |
Easter Egg Decorating
- Added command that uses PIL
- Added 6 Easter decorations
-rw-r--r-- | bot/resources/easter/easter_eggs/design1.png | bin | 0 -> 3996 bytes | |||
-rw-r--r-- | bot/resources/easter/easter_eggs/design2.png | bin | 0 -> 3918 bytes | |||
-rw-r--r-- | bot/resources/easter/easter_eggs/design3.png | bin | 0 -> 3349 bytes | |||
-rw-r--r-- | bot/resources/easter/easter_eggs/design4.png | bin | 0 -> 3355 bytes | |||
-rw-r--r-- | bot/resources/easter/easter_eggs/design5.png | bin | 0 -> 3054 bytes | |||
-rw-r--r-- | bot/resources/easter/easter_eggs/design6.png | bin | 0 -> 4758 bytes | |||
-rw-r--r-- | bot/seasons/easter/egg_decorating.py | 95 |
7 files changed, 95 insertions, 0 deletions
diff --git a/bot/resources/easter/easter_eggs/design1.png b/bot/resources/easter/easter_eggs/design1.png Binary files differnew file mode 100644 index 00000000..d887c590 --- /dev/null +++ b/bot/resources/easter/easter_eggs/design1.png diff --git a/bot/resources/easter/easter_eggs/design2.png b/bot/resources/easter/easter_eggs/design2.png Binary files differnew file mode 100644 index 00000000..c4fff644 --- /dev/null +++ b/bot/resources/easter/easter_eggs/design2.png diff --git a/bot/resources/easter/easter_eggs/design3.png b/bot/resources/easter/easter_eggs/design3.png Binary files differnew file mode 100644 index 00000000..803bc1e3 --- /dev/null +++ b/bot/resources/easter/easter_eggs/design3.png diff --git a/bot/resources/easter/easter_eggs/design4.png b/bot/resources/easter/easter_eggs/design4.png Binary files differnew file mode 100644 index 00000000..38e6a83f --- /dev/null +++ b/bot/resources/easter/easter_eggs/design4.png diff --git a/bot/resources/easter/easter_eggs/design5.png b/bot/resources/easter/easter_eggs/design5.png Binary files differnew file mode 100644 index 00000000..56662c26 --- /dev/null +++ b/bot/resources/easter/easter_eggs/design5.png diff --git a/bot/resources/easter/easter_eggs/design6.png b/bot/resources/easter/easter_eggs/design6.png Binary files differnew file mode 100644 index 00000000..5372439a --- /dev/null +++ b/bot/resources/easter/easter_eggs/design6.png diff --git a/bot/seasons/easter/egg_decorating.py b/bot/seasons/easter/egg_decorating.py new file mode 100644 index 00000000..46351534 --- /dev/null +++ b/bot/seasons/easter/egg_decorating.py @@ -0,0 +1,95 @@ +import logging +import random +from io import BytesIO +from pathlib import Path + + +import discord +from PIL import Image +from discord.ext import commands + +log = logging.getLogger(__name__) + +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) +] # Colours to be replaced - Red, Orange, Yellow, Green, Light Blue, Dark Blue, Pink, Purple + +IRREPLACEABLE = [ + (0, 0, 0, 0), (0, 0, 0, 255) +] # Colours that are meant to stay the same - Transparent and Black + + +class EggDecorating(commands.Cog): + """A Command that lets you decorate some easter eggs!""" + + def __init__(self, bot): + self.bot = bot + + @commands.command(aliases=["decorateegg"]) + async def eggdecorate(self, ctx, *colours): + """ + This 'paints' a beautiful egg using inputted colours + + It picks from a random set of designs and alters the colours to the user's liking + """ + + if len(colours) < 2: + return await ctx.send("You must include at least 2 colours!") + + invalid = [] + converted = [] + for c in colours: + try: + colour = await commands.ColourConverter().convert(ctx, c) + # Attempts to convert the arguments into discord.Colour + converted.append(colour) + except commands.BadArgument: + invalid.append(c) + + if len(invalid) > 1: + return await ctx.send(f"The following colours are invalid: {' '.join(invalid)}") + elif len(invalid) == 1: + return await ctx.send(f"{invalid[0]} is an invalid colour!") + + colours = converted + + 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 + 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 + + replacing_colours = {colour: colours[i] for i, colour in enumerate(replaceable)} + new_data = [] + for x in data: + if x in replacing_colours: + new_data.append((*replacing_colours[x].to_rgb(), 255)) + # Also ensures that the alpha channel has a value + else: + new_data.append(x) + new_im = Image.new(im.mode, im.size) + new_im.putdata(new_data) + + bufferedio = BytesIO() + new_im.save(bufferedio, format="PNG") + + 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.set_image(url="attachment://egg.png") + embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar_url) + + await ctx.send(file=file, embed=embed) + + +def setup(bot): + """Cog load.""" + + bot.add_cog(EggDecorating(bot)) + log.info("EggDecorating cog loaded.") |