From 1d78a05807d53a28932f872596e6ce5ecf4d87f1 Mon Sep 17 00:00:00 2001 From: Corban-Lee Date: Tue, 10 Sep 2024 10:44:50 +0100 Subject: [PATCH 1/2] task group and exception checker --- src/extensions/tasks.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/extensions/tasks.py b/src/extensions/tasks.py index c718623..ec49ee6 100644 --- a/src/extensions/tasks.py +++ b/src/extensions/tasks.py @@ -65,13 +65,24 @@ class TaskCog(commands.Cog): """ self.subscription_task.cancel() - @app_commands.command(name="debug-trigger-task") - async def debug_trigger_task(self, inter): + group = app_commands.Group( + name="task", + description="Commands for tasks", + guild_only=True + ) + + @group.command(name="trigger") + async def cmd_trigger_task(self, inter): await inter.response.defer() start_time = perf_counter() - await self.subscription_task() - end_time = perf_counter() - await inter.followup.send(f"completed in {end_time - start_time:.4f} seconds") + + try: + await self.subscription_task() + except Exception as error: + await inter.followup.send(str(error)) + finally: + end_time = perf_counter() + await inter.followup.send(f"completed in {end_time - start_time:.4f} seconds") @tasks.loop(time=subscription_task_times) async def subscription_task(self): @@ -199,7 +210,7 @@ class TaskCog(commands.Cog): continue blocked = any(self.filter_item(_filter, item) for _filter in filters) - mutated_item = item.create_mutated_copy(sub.mutators) + mutated_item = item.create_mutated_copy(sub.mutators) if sub.mutators else None for channel in channels: await self.track_and_send(sub, feed, item, mutated_item, channel, blocked) @@ -225,7 +236,7 @@ class TaskCog(commands.Cog): log.debug("filter match found? '%s'", match_found) return match_found - async def track_and_send(self, sub: Subscription, feed: RSSFeed, item: RSSItem, mutated_item: RSSItem, channel: TextChannel, blocked: bool): + async def track_and_send(self, sub: Subscription, feed: RSSFeed, item: RSSItem, mutated_item: RSSItem | None, channel: TextChannel, blocked: bool): message_id = -1 log.debug("track and send func %s, %s", item.guid, item.title) @@ -243,7 +254,8 @@ class TaskCog(commands.Cog): if not blocked: try: log.debug("sending '%s', exists '%s'", item.guid, result[1]) - message = await channel.send(embed=await mutated_item.to_embed(sub, feed, self.api.session)) + sendable_item = mutated_item or item + message = await channel.send(embed=await sendable_item.to_embed(sub, feed, self.api.session)) message_id = message.id except Forbidden: log.error(f"Forbidden to send to channel {channel.id}") From 85c5c963928b355b1684eb59cf1c969eb3eee5b1 Mon Sep 17 00:00:00 2001 From: Corban-Lee Date: Tue, 10 Sep 2024 10:49:22 +0100 Subject: [PATCH 2/2] fix TypeError with empty title, desc, pub_date rssItems --- src/feed.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/feed.py b/src/feed.py index 443e86d..d077ff5 100644 --- a/src/feed.py +++ b/src/feed.py @@ -51,13 +51,13 @@ class RSSItem: RSSItem """ - guid = entry.get('id', None) or entry.get("guid", None) - link = entry.get('link', None) - title = entry.get('title', None) - description = entry.get('description', None) + guid = entry.get('id', None) or entry.get("guid") + link = entry.get('link', "") + title = entry.get('title', "") + description = entry.get('description', "") pub_date = entry.get('published_parsed', None) - pub_date = datetime(*pub_date[0:6], tzinfo=timezone.utc) + pub_date = datetime(*pub_date[0:6] if pub_date else None, tzinfo=timezone.utc) content_image_url = entry.get("media_content", [{}])[0].get("url") thumb_image_url = entry.get("media_thumbnail", [{}])[0].get("url") @@ -128,6 +128,8 @@ class RSSItem: discord.Embed """ + log.debug("Creating embed of item: %s", self.guid) + # Replace HTML with Markdown, and shorten text. title = shorten(markdownify(self.title, strip=["img", "a"]), 256) desc = shorten(markdownify(self.description, strip=["img"]), 4096)