From 7f27fab5fba477eb5c8f5428eb43acd1a75583a1 Mon Sep 17 00:00:00 2001 From: zevaryx Date: Tue, 14 Jun 2022 16:35:05 -0600 Subject: [PATCH] Catch errors in subreddit --- jarvis_tasks/tasks/reddit.py | 106 ++++++++++++++++++----------------- 1 file changed, 55 insertions(+), 51 deletions(-) diff --git a/jarvis_tasks/tasks/reddit.py b/jarvis_tasks/tasks/reddit.py index 24100b8..94e6577 100644 --- a/jarvis_tasks/tasks/reddit.py +++ b/jarvis_tasks/tasks/reddit.py @@ -119,63 +119,67 @@ async def _stream(sub: Sub, bot: Client, reddit: Reddit) -> None: await sub.load() running.append(sub.display_name) logger.debug(f"Streaming subreddit {sub.display_name}") - async for post in sub.stream.submissions(): - if not post: - logger.debug(f"Got None for post in {sub.display_name}") - continue - if post.created_utc < now.timestamp(): - continue - logger.debug(f"Got new post in {sub.display_name}") - follows = SubredditFollow.find(q(display_name=sub.display_name)) - num_follows = 0 - - async for follow in follows: - num_follows += 1 - - guild = await bot.fetch_guild(follow.guild) - if not guild: - logger.warning(f"Follow {follow.id}'s guild no longer exists, deleting") - await follow.delete() - num_follows -= 1 + try: + async for post in sub.stream.submissions(): + if not post: + logger.debug(f"Got None for post in {sub.display_name}") continue - - channel = await bot.fetch_channel(follow.channel) - if not channel: - logger.warning(f"Follow {follow.id}'s channel no longer exists, deleting") - await follow.delete() - num_follows -= 1 + if post.created_utc < now.timestamp(): continue + logger.debug(f"Got new post in {sub.display_name}") + follows = SubredditFollow.find(q(display_name=sub.display_name)) + num_follows = 0 - embeds = await post_embeds(sub, post, reddit) - timestamp = int(post.created_utc) + async for follow in follows: + num_follows += 1 - try: - await channel.send( - f"`r/{sub.display_name}` was posted to at ", - embeds=embeds, - ) - count = reddit_count.labels( - guild_id=guild.id, guild_name=guild.name, subreddit_name=sub.display_name - ) - count.inc() - except DNotFound: - logger.warning(f"Follow {follow.id}'s channel no longer exists, deleting") - await follow.delete() - num_follows -= 1 - continue - except Exception: - logger.error( - f"Failed to send message to {channel.id} in {channel.guild.name}", exc_info=True - ) + guild = await bot.fetch_guild(follow.guild) + if not guild: + logger.warning(f"Follow {follow.id}'s guild no longer exists, deleting") + await follow.delete() + num_follows -= 1 + continue - gauge = reddit_gauge.labels(subreddit_name=sub.display_name) - gauge.set(num_follows) + channel = await bot.fetch_channel(follow.channel) + if not channel: + logger.warning(f"Follow {follow.id}'s channel no longer exists, deleting") + await follow.delete() + num_follows -= 1 + continue - if num_follows == 0: - s = await Subreddit.find_one(q(display_name=sub.display_name)) - if s: - await s.delete() - break + embeds = await post_embeds(sub, post, reddit) + timestamp = int(post.created_utc) + + try: + await channel.send( + f"`r/{sub.display_name}` was posted to at ", + embeds=embeds, + ) + count = reddit_count.labels( + guild_id=guild.id, guild_name=guild.name, subreddit_name=sub.display_name + ) + count.inc() + except DNotFound: + logger.warning(f"Follow {follow.id}'s channel no longer exists, deleting") + await follow.delete() + num_follows -= 1 + continue + except Exception: + logger.error( + f"Failed to send message to {channel.id} in {channel.guild.name}", + exc_info=True, + ) + + gauge = reddit_gauge.labels(subreddit_name=sub.display_name) + gauge.set(num_follows) + + if num_follows == 0: + s = await Subreddit.find_one(q(display_name=sub.display_name)) + if s: + await s.delete() + break + except Exception: + logger.error(f"Subreddit stream {sub.display_name} failed", exc_info=True) running.remove(sub.display_name)