Skip to content
This repository has been archived by the owner on Sep 17, 2024. It is now read-only.

Commit

Permalink
Add error handling to daily loops
Browse files Browse the repository at this point in the history
  • Loading branch information
ASmallSquishySquid committed Apr 24, 2024
1 parent 459f5a0 commit b80a0fe
Showing 1 changed file with 88 additions and 58 deletions.
146 changes: 88 additions & 58 deletions cogs/loops.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import datetime
import os
import random
import sys
import traceback

import aiohttp
import discord
Expand Down Expand Up @@ -76,35 +78,47 @@ async def morning(self):
# 8:30 AM
@tasks.loop(time=datetime.time(hour=16, minute=30))
async def apod(self):
async with aiohttp.ClientSession() as session:
async with session.get("https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY") as request:
if request.status == 200:
js = await request.json()
embed_message = discord.Embed(
title=js["title"],
description=js["explanation"],
url=js["hdurl"] if "hdurl" in js else js["url"],
color=discord.Color.og_blurple())
embed_message.set_author(
name="NASA",
url=f"https://apod.nasa.gov/apod/ap{''.join(date[-2:] for date in js['date'].split('-'))}.html",
icon_url="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e5/NASA_logo.svg/110px-NASA_logo.svg.png")

if js["media_type"] == "image":
embed_message.set_image(url=js["url"])
elif js["media_type"] == "video":
video_id = "mPcoBfQ5j-k"
if "youtu" in js["url"]:
video_id = js["url"].split("/")[-1].split("?")[0]
embed_message.set_image(
url=f"https://img.youtube.com/vi/{video_id}/maxresdefault.jpg")

user_id = int(os.getenv("SQIDJI_ID"))
sqidji = self.bot.get_user(user_id)
if sqidji is None:
sqidji = await self.bot.fetch_user(user_id)

await sqidji.send(embed=embed_message)
try:
async with aiohttp.ClientSession() as session:
async with session.get("https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY") as request:
if request.status == 200:
js = await request.json()
embed_message = discord.Embed(
title=js["title"],
description=js["explanation"],
url=js["hdurl"] if "hdurl" in js else js["url"],
color=discord.Color.og_blurple())
embed_message.set_author(
name="NASA",
url=f"https://apod.nasa.gov/apod/ap{''.join(date[-2:] for date in js['date'].split('-'))}.html",
icon_url="https://upload.wikimedia.org/wikipedia/commons/thumb/e/e5/NASA_logo.svg/110px-NASA_logo.svg.png")

if js["media_type"] == "image":
embed_message.set_image(url=js["url"])
elif js["media_type"] == "video":
video_id = "mPcoBfQ5j-k"
if "youtu" in js["url"]:
video_id = js["url"].split("/")[-1].split("?")[0]
embed_message.set_image(
url=f"https://img.youtube.com/vi/{video_id}/maxresdefault.jpg")

user_id = int(os.getenv("SQIDJI_ID"))
sqidji = self.bot.get_user(user_id)
if sqidji is None:
sqidji = await self.bot.fetch_user(user_id)

await sqidji.send(embed=embed_message)

else:
print(f"Error getting APOD: {request.status}", file=sys.stderr)
sys.stderr.flush()

except (aiohttp.ClientError, KeyError, discord.HTTPException, discord.NotFound) as error:
print(
f"[{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] APOD failed with exception:",
file=sys.stderr)
traceback.print_exception(type(error), error, error.__traceback__, file=sys.stderr)
sys.stderr.flush()

# 10:00 AM
@tasks.loop(time=datetime.time(hour=18, minute=0))
Expand All @@ -114,35 +128,51 @@ async def daily_good_news(self):
indices = random.sample(range(50), 3)
stories = {}

async with aiohttp.ClientSession() as session:
for feed in feeds:
async with session.get(base_url.format(feed.lower())) as response:
if response.status == 200:
text = await response.text()
response_feed = feedparser.parse(text)
stories[feed] = [
(response_feed.entries[i].title, response_feed.entries[i].link)
for i in indices]

embed_message = discord.Embed(
title="Your daily good news <:cutesmile:772176440330027038>",
color=discord.Color.og_blurple(),
timestamp=datetime.datetime.now())
embed_message.set_author(
name="Good News Network",
url="https://www.goodnewsnetwork.org/",
icon_url="https://www.goodnewsnetwork.org/wp-content/uploads/2021/01/cropped-GNN-Logo-Circles-2017-1-32x32.png"
)
for section, selected_stories in stories.items():
formatted = "\n\n".join([f"[{story[0]}]({story[1]})" for story in selected_stories])
embed_message.add_field(name=f"__{section}__", value=formatted, inline=False)

user_id = int(os.getenv("SQIDJI_ID"))
sqidji = self.bot.get_user(user_id)
if sqidji is None:
sqidji = await self.bot.fetch_user(user_id)

await sqidji.send(embed=embed_message)
try:
async with aiohttp.ClientSession() as session:
for feed in feeds:
async with session.get(base_url.format(feed.lower())) as response:
if response.status == 200:
text = await response.text()
response_feed = feedparser.parse(text)
stories[feed] = [
(response_feed.entries[i].title, response_feed.entries[i].link)
for i in indices]

embed_message = discord.Embed(
title="Your daily good news <:cutesmile:772176440330027038>",
color=discord.Color.og_blurple(),
timestamp=datetime.datetime.now())
embed_message.set_author(
name="Good News Network",
url="https://www.goodnewsnetwork.org/",
icon_url="https://www.goodnewsnetwork.org/wp-content/uploads/2021/01/cropped-GNN-Logo-Circles-2017-1-32x32.png"
)
for section, selected_stories in stories.items():
formatted = "\n\n".join(
[f"[{story[0]}]({story[1]})" for story in selected_stories])
embed_message.add_field(
name=f"__{section}__", value=formatted, inline=False)

user_id = int(os.getenv("SQIDJI_ID"))
sqidji = self.bot.get_user(user_id)
if sqidji is None:
sqidji = await self.bot.fetch_user(user_id)

await sqidji.send(embed=embed_message)

else:
print(
f"Error getting daily good news: {response.status}",
file=sys.stderr)
sys.stderr.flush()

except (aiohttp.ClientError, IndexError, discord.HTTPException, discord.NotFound) as error:
print(
f"[{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] APOD failed with exception:",
file=sys.stderr)
traceback.print_exception(type(error), error, error.__traceback__, file=sys.stderr)
sys.stderr.flush()

async def setup(bot: commands.Bot):
await bot.add_cog(Loops(bot))

0 comments on commit b80a0fe

Please sign in to comment.