From 4fbbec9f68b3becd89ddcbd8ea5aa1d994d78af5 Mon Sep 17 00:00:00 2001 From: Joinemm Date: Sun, 19 Nov 2023 03:47:36 +0200 Subject: [PATCH] Fix embed options not applying when replying --- cogs/events.py | 59 +++++++++++++++----------------------- modules/media_embedders.py | 15 ++++++++-- 2 files changed, 36 insertions(+), 38 deletions(-) diff --git a/cogs/events.py b/cogs/events.py index bf6c31c..1ce8e30 100644 --- a/cogs/events.py +++ b/cogs/events.py @@ -9,7 +9,7 @@ import discord from discord.ext import commands, tasks from loguru import logger -from modules.media_embedders import InstagramEmbedder, TikTokEmbedder +from modules.media_embedders import BaseEmbedder, InstagramEmbedder, TikTokEmbedder from modules.misobot import MisoBot from modules import emoji_literals, queries, util @@ -331,11 +331,27 @@ async def get_autoembed_options( guild_id, provider, ) - print(options_data) if options_data: return options_data - return None, None + return None, True + + async def embed_posts( + self, posts: list, message: discord.Message, embedder: BaseEmbedder + ): + options, should_reply = await self.get_autoembed_options( + message.guild.id, embedder.NAME + ) + embed_options = embedder.get_options(options) if options else None + for post in posts: + async with message.channel.typing(): + if should_reply: + await embedder.send_reply(message, post, embed_options) + else: + await embedder.send_contextless( + message.channel, message.author, post, embed_options + ) + await util.suppress(message) async def parse_media_auto_embed( self, message: discord.Message, media_settings: dict @@ -344,42 +360,13 @@ async def parse_media_auto_embed( embedder = InstagramEmbedder(self.bot) posts = embedder.extract_links(message.content, include_shortcodes=False) if posts: - options, should_reply = await self.get_autoembed_options( - message.guild.id, "instagram" - ) - for post in posts: - async with message.channel.typing(): - if not should_reply: - await embedder.send_contextless( - message.channel, - message.author, - post, - embedder.get_options(options) if options else None, - ) - else: - await embedder.send_reply(message, post) - await util.suppress(message) + await self.embed_posts(posts, message, embedder) if media_settings["tiktok"]: embedder = TikTokEmbedder(self.bot) - links = embedder.extract_links(message.content) - if links: - options, should_reply = await self.get_autoembed_options( - message.guild.id, - "tiktok", - ) - for link in links: - async with message.channel.typing(): - if not should_reply: - await embedder.send_contextless( - message.channel, - message.author, - link, - embedder.get_options(options) if options else None, - ) - else: - await embedder.send_reply(message, link) - await util.suppress(message) + posts = embedder.extract_links(message.content) + if posts: + await self.embed_posts(posts, message, embedder) @staticmethod async def easter_eggs(message: discord.Message): diff --git a/modules/media_embedders.py b/modules/media_embedders.py index f0b347f..e63c465 100644 --- a/modules/media_embedders.py +++ b/modules/media_embedders.py @@ -52,6 +52,8 @@ def filesize_limit(guild: discord.Guild | None): class BaseEmbedder: NO_RESULTS_ERROR = "..." + NAME = "..." + EMOJI = "..." def __init__(self, bot) -> None: self.bot: MisoBot = bot @@ -157,7 +159,10 @@ async def download_media( return media_url async def send( - self, ctx: commands.Context, media: Any, options: Options | None = None + self, + ctx: commands.Context, + media: Any, + options: Options | None = None, ): """Send the media to given context""" message_contents = await self.create_message( @@ -181,7 +186,10 @@ async def send_contextless( message_contents["view"].approved_deletors.append(author) async def send_reply( - self, message: discord.Message, media: Any, options: Options | None = None + self, + message: discord.Message, + media: Any, + options: Options | None = None, ): """Send the media as a reply to another message""" message_contents = await self.create_message( @@ -195,6 +203,7 @@ async def send_reply( class InstagramEmbedder(BaseEmbedder): + NAME = "instagram" EMOJI = "<:ig:937425165162262528>" NO_RESULTS_ERROR = "Found no Instagram links to embed!" @@ -283,6 +292,7 @@ async def create_message( class TikTokEmbedder(BaseEmbedder): + NAME = "tiktok" EMOJI = "<:tiktok:1050401570090647582>" NO_RESULTS_ERROR = "Found no TikTok links to embed!" @@ -346,6 +356,7 @@ async def create_message( class TwitterEmbedder(BaseEmbedder): + NAME = "twitter" EMOJI = "<:x_:1135484782642466897>" NO_RESULTS_ERROR = "Found no Twitter/X links to embed!"