Catch errors in subreddit
This commit is contained in:
parent
3b04182ea2
commit
7f27fab5fb
1 changed files with 55 additions and 51 deletions
|
@ -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 <t:{timestamp}:f>",
|
||||
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 <t:{timestamp}:f>",
|
||||
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)
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue