From f572a0d5353c68db1bec19cc87563f5c837d612c Mon Sep 17 00:00:00 2001 From: SeaswimmerTheFsh Date: Sat, 6 Apr 2024 06:15:00 -0400 Subject: [PATCH] feat(bible): added the api.bible icon to embeds --- bible/bible.py | 41 ++++++-- bible/data/api.bible-logo.png | Bin 0 -> 22608 bytes bible/info.json | 1 + poetry.lock | 186 +++++++++++++++++++++------------- pyproject.toml | 2 + 5 files changed, 151 insertions(+), 79 deletions(-) create mode 100644 bible/data/api.bible-logo.png diff --git a/bible/bible.py b/bible/bible.py index 809c157..ff7d4b5 100644 --- a/bible/bible.py +++ b/bible/bible.py @@ -6,11 +6,14 @@ # |_____/ \___|\__,_|___/ \_/\_/ |_|_| |_| |_|_| |_| |_|\___|_| import random +from io import BytesIO import aiohttp -from discord import Embed +import numpy as np +from discord import Colour, Embed, File +from PIL import Image from red_commons.logging import getLogger -from redbot.core import Config, commands +from redbot.core import Config, commands, data_manager from redbot.core.bot import Red from redbot.core.utils.chat_formatting import error, humanize_list @@ -22,7 +25,7 @@ class Bible(commands.Cog): """Retrieve Bible verses from the API.bible API.""" __author__ = ["SeaswimmerTheFsh"] - __version__ = "1.0.2" + __version__ = "1.1.0" __documentation__ = "https://seacogs.coastalcommits.com/bible/" def __init__(self, bot: Red): @@ -47,6 +50,22 @@ class Bible(commands.Cog): ] return "\n".join(text) + def get_icon(self, color: Colour) -> File: + """Get the docs.api.bible favicon with a given color.""" + image_path = data_manager.bundled_data_path(self) / "api.bible-logo.png" + image = Image.open(image_path) + image = image.convert("RGBA") + data = np.array(image) + red, green, blue, alpha = data.T + white_areas = (red == 255) & (blue == 255) & (green == 255) + data[..., :-1][white_areas.T] = color.to_rgb() + image = Image.fromarray(data) + + with BytesIO() as image_binary: + image.save(image_binary, "PNG") + image_binary.seek(0) + return File(image_binary, filename="icon.png", description="API.Bible Icon") + async def translate_book_name(self, bible_id: str, book_name: str) -> str: """Translate a book name to a book ID.""" book_name_list = [ @@ -248,15 +267,17 @@ class Bible(commands.Cog): return if await ctx.embed_requested(): + icon = await self.get_icon(await ctx.embed_color) embed = Embed( title=f"{passage['reference']}", description=passage["content"].replace("¶ ", ""), - color=await self.bot.get_embed_color(ctx.channel), + color=await ctx.embed_color, ) embed.set_footer( - text=f"{ctx.prefix}bible passage - Powered by API.Bible - {version.abbreviationLocal} ({version.languageLocal}, {version.descriptionLocal})" + text=f"{ctx.prefix}bible passage - Powered by API.Bible - {version.abbreviationLocal} ({version.languageLocal}, {version.descriptionLocal})", + icon_url="attachment://favicon.png" ) - await ctx.send(embed=embed) + await ctx.send(embed=embed, file=icon) else: await ctx.send(f"## {passage['reference']}\n{passage['content']}") @@ -288,14 +309,16 @@ class Bible(commands.Cog): return if await ctx.embed_requested(): + icon = await self.get_icon(await ctx.embed_color) embed = Embed( title=f"{passage['reference']}", description=passage["content"].replace("¶ ", ""), - color=await self.bot.get_embed_color(ctx.channel), + color=await ctx.embed_color, ) embed.set_footer( - text=f"{ctx.prefix}bible random - Powered by API.Bible - {version.abbreviationLocal} ({version.languageLocal}, {version.descriptionLocal})" + text=f"{ctx.prefix}bible random - Powered by API.Bible - {version.abbreviationLocal} ({version.languageLocal}, {version.descriptionLocal})", + icon_url="attachment://favicon.png" ) - await ctx.send(embed=embed) + await ctx.send(embed=embed, file=icon) else: await ctx.send(f"## {passage['reference']}\n{passage['content']}") diff --git a/bible/data/api.bible-logo.png b/bible/data/api.bible-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..07b7a830273314b2240e47400ef19c51069c1620 GIT binary patch literal 22608 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