From e4fcc81a13903c1e43e905d2e461a3ca2f57601d Mon Sep 17 00:00:00 2001 From: Ave Ozkal Date: Thu, 19 Dec 2019 04:17:36 +0300 Subject: [PATCH] add .cox Literal bloat --- Robocop.py | 1 + assets/.gitignore | 1 + assets/byjcox.png | Bin 0 -> 6773 bytes assets/motherboardlogo.png | Bin 0 -> 7779 bytes cogs/imagemanip.py | 80 +++++++++++++++++++++++++++++++++++++ requirements.txt | 3 ++ 6 files changed, 85 insertions(+) create mode 100644 assets/.gitignore create mode 100644 assets/byjcox.png create mode 100644 assets/motherboardlogo.png create mode 100644 cogs/imagemanip.py diff --git a/Robocop.py b/Robocop.py index 43899dc..cc6877c 100755 --- a/Robocop.py +++ b/Robocop.py @@ -61,6 +61,7 @@ initial_extensions = ['cogs.common', 'cogs.remind', 'cogs.robocronp', 'cogs.meme', + 'cogs.imagemanip', 'cogs.pin', 'cogs.invites'] diff --git a/assets/.gitignore b/assets/.gitignore new file mode 100644 index 0000000..5b0b552 --- /dev/null +++ b/assets/.gitignore @@ -0,0 +1 @@ +*.otf diff --git a/assets/byjcox.png b/assets/byjcox.png new file mode 100644 index 0000000000000000000000000000000000000000..e6fcd515ab5fa808f82594509ffc718483139291 GIT binary patch literal 6773 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 XYo~8>4I{$W00000NkvXXu0mjf9*oh} literal 0 HcmV?d00001 diff --git a/assets/motherboardlogo.png b/assets/motherboardlogo.png new file mode 100644 index 0000000000000000000000000000000000000000..d1a07db7a89c4909ff9e3f227bdbce046bef1602 GIT binary patch literal 7779 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
pt)9?dy{D4^000SaNLh0L01FcU z01FcV0GgZ_00007bV*G`2jdJA04f}yGDe#K000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_C zX>@2HM@dakSAh-}000N>Nkl1>g#BDgaktTtS=) zY*%1X0k{I=3Lq6g2f7dURwM8VgY(|ImpgVwGcibFSNciXf69|mN&x^I4hJ|MkI<*h zW&=`6{d;UZq@pO`csxQ`mQa=@002lSfiVWF)e3?j=+s{<7VuSidwT=V^9K3N^Bj^S zf$Q~pw?Ef)VYl1e;HE;Li^gK`VJ4H?@rEYga>IeD0uK?ht#Br=lvenycHl2D^ zRVgVYS=TH=2z9w!bh~@?$CNzJb$^@9hO9FrOTYNOKZ!TSnA-36cgKt>Z*Om^Pf3!D zYMZ91qG-S0TiZlYbW?wdoTt-ivYd=DwcG8w-^4$J5M(3I^K|8=X{?qWvEU?40iwx&(=^KSyh&}tFuVa)5Cnsucoc|Oa3h&2r{{U9X__t&hZTyGa@3Snk z)7zBaJ^ITmn z7xnh`HmD=zd9Lz2C*QlStKZxDS*=zoO;eSosZ~!MTER9N(v5BW=6Ozj2is9Qb`(V_ ziXyT<&bd0BPU>>GsMG1BIOl`AB6YM=ZSd5)C#MZ7w(<0RU-Rm^t`%P}bbR#wry}?W4EPJcVxC#P)TNA;agp0dc5s&L>-wL*Jqn zw5@-}7`Zs2C?a&K0~S>0O z4jc}LNp0G;h4p%^_3f{WW81c*{}la>lpSExXYa|m+wDfzxA{7sO+#Y{h$fSc<3N%m zq;fu186Kk`e^&~E0Lro?C%mux_no_CS;BI;B#naW^?G9nwrxu~kr`v;yn3DoLI~2h znmQ+O97A2#I(RUK&gb*ZGtN1HP4`nuSruV4UZ{7J4gdfh2WFnCuY#KZ^ zrT=FcE0ny9v5qb`WUMHqtV+Di-GPQh(=;j!!%4@elu}74$?-=Q+#`O#dq;CsRaRbu zAW%U02C=ctkA;p}8&DqA+fb+aDiFWwM?{O;EH-}PI3~ep>RdxWtg4Cx#aG7hE5&B~ z*cPrkN#!|+B|F$3L{;#t=zVsOs2UOEUw$~wLW zmb$J%N(n_#j2cA8ao}`1S%v%##26!ux3+EJ_4W1P$zhB^Q50nK#b!K|Wl4gGbFMRY zuuu`Bp@k!aAbF|ldh+~5Q3PdK>P_u0Tq!mnu2!oK+D#x*pu~NfKBr7B?kH5;z=J$ z28+c4o}QlI<>dvo+iiz8Y7A!jO%%tm@_k>&jXCGa_k9(|v5ukQGc5c4z7wnuf&u9f*{a+$8oHAa~!85 zXa6egOuvqx4+=9qiF($*qG;a3jiTr#MSTnq%}f-t4rUTZQKW?{R<%!W2}>th`S_X z>?TdjOjXU;qIBoI)k_ZYa>*An4220k`3#FTT6eEw$o>d|Z-m7C2*?<9{L&1Oy;b-mF> zoO6Bj;<4OshdGjF=5!c_N=i8&&3^#>H3qE5}-^|JUIXW002ovPDHLkV1hML)&T$j literal 0 HcmV?d00001 diff --git a/cogs/imagemanip.py b/cogs/imagemanip.py new file mode 100644 index 0000000..34713eb --- /dev/null +++ b/cogs/imagemanip.py @@ -0,0 +1,80 @@ +import discord +from discord.ext import commands +from discord.ext.commands import Cog +import textwrap +import PIL.Image +import PIL.ImageFilter +import PIL.ImageOps +import PIL.ImageFont +import PIL.ImageDraw + + +class ImageManip(Cog): + def __init__(self, bot): + self.bot = bot + + @commands.command() + async def cox(self, ctx, *headline: str): + """Gives a cox headline""" + mention = ctx.author.mention + + in_vice = "assets/motherboardlogo.png" + in_byjcox = "assets/byjcox.png" + font_path = "assets/neue-haas-grotesk-display-bold-regular.otf" + + # Settings for image generation, don't touch anything + horipos = 18 + vertpos = 75 + line_spacing = 10 + font_size = 50 + image_width = 750 + font_wrap_count = 30 + sig_height = 15 + + # Wrap into lines + lines = textwrap.wrap(headline, width=font_wrap_count) + # not great, 4am be like + image_height = (len(lines) + 2) * (vertpos + line_spacing) + + # Load font + f = PIL.ImageFont.truetype(font_path, font_size) + + # Create image base, paste mobo logo + im = PIL.Image.new("RGB", (image_width, image_height), color="#FFFFFF") + moboim = PIL.Image.open(in_vice) + im.paste(moboim, (horipos, 17)) + + # Go through all the wrapped text lines + for line in lines: + # Get size of the text by font, create a new image of that size + size = f.getsize(line) + txt = PIL.Image.new('L', size) + + # Draw the text + d = PIL.ImageDraw.Draw(txt) + d.text((0, 0), line, font=f, fill=255) + + # Paste the text into the base image + w = txt.rotate(0, expand=1) + im.paste(PIL.ImageOps.colorize(w, (0, 0, 0), + (0, 0, 0)), (horipos, vertpos), w) + + # Calculate position on next line + vertpos += size[1] + line_spacing + + # Add jcox signature + jcoxim = PIL.Image.open(in_byjcox) + im.paste(jcoxim, (horipos, vertpos + sig_height)) + + # Crop the image to the actual resulting size + im = im.crop((0, 0, image_width, vertpos + (sig_height * 3))) + + # Save image + out_filename = f"/tmp/{ctx.message.id}-out.png" + im.save(out_filename, quality=100, optimize=True) + await ctx.send(content=f"{mention}: Enjoy.", + file=discord.File(out_filename)) + + +def setup(bot): + bot.add_cog(ImageManip(bot)) diff --git a/requirements.txt b/requirements.txt index 60c81ef..b5c9702 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,6 @@ humanize parsedatetime aiohttp gidgethub + +# Only if you'll enable imagemanip, which is only used for meme commands +Pillow