2024-09-15 17:20:50 +10:00
|
|
|
#!/home/cardigan/rss-discord-bot/venv/python/python3.11
|
2024-09-15 11:55:45 +10:00
|
|
|
|
|
|
|
from datetime import datetime
|
|
|
|
import json
|
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
|
|
|
|
import feedparser
|
|
|
|
import requests
|
|
|
|
|
2024-09-16 10:23:55 +10:00
|
|
|
guild = os.getenv("DISCORD_GUILD") # Discord server code
|
2024-09-15 17:20:50 +10:00
|
|
|
token = os.getenv("DISCORD_TOKEN") # token for this bot
|
2024-09-16 10:23:55 +10:00
|
|
|
cardicast_ping = os.getenv("DISCORD_CARDICAST_PING") # Discord role
|
2024-09-15 11:55:45 +10:00
|
|
|
|
2024-09-16 10:23:55 +10:00
|
|
|
# get the latest post with image as enclosure
|
|
|
|
f = feedparser.parse("https://newcardigan.org/category/cardicast/?feed=featured_image_feed")
|
|
|
|
p = f.entries[0]
|
2024-09-15 11:55:45 +10:00
|
|
|
# check whether we have already seen this entry
|
|
|
|
with open("latest_post.txt", "r+") as f:
|
|
|
|
guid = f.read().strip()
|
|
|
|
f.close()
|
|
|
|
|
2024-09-16 10:23:55 +10:00
|
|
|
if guid != p.guid:
|
2024-09-15 11:55:45 +10:00
|
|
|
# update the guid
|
|
|
|
with open("latest_post.txt", "w+") as f:
|
2024-09-16 10:23:55 +10:00
|
|
|
f.write(p.guid)
|
2024-09-15 11:55:45 +10:00
|
|
|
f.close()
|
|
|
|
|
2024-09-16 10:23:55 +10:00
|
|
|
content = f"[<:newCardigan:1280097925149626419> **{p.title}**]({p.link})\n\n{p.description}\n\n<@&{cardicast_ping}>\n\n"
|
|
|
|
embeds = [
|
|
|
|
{
|
|
|
|
"title": "Listen to this episode right now",
|
|
|
|
"url": p.enclosures[1].href,
|
|
|
|
"color": 16741516,
|
|
|
|
"image": {
|
|
|
|
"url": p.enclosures[0].href
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
|
|
|
headers = {'user-agent': 'cardiCast-discord-bot/1.0.0'}
|
|
|
|
url = f"https://discord.com/api/webhooks/{guild}/{token}"
|
2024-09-15 11:55:45 +10:00
|
|
|
payload = {
|
2024-09-16 10:23:55 +10:00
|
|
|
"thread_name": f"{p.title}",
|
2024-09-15 11:55:45 +10:00
|
|
|
"content": content,
|
|
|
|
"embeds": embeds,
|
2024-09-16 10:23:55 +10:00
|
|
|
"allowed_mentions": { "roles": [cardicast_ping] }
|
2024-09-15 11:55:45 +10:00
|
|
|
}
|
|
|
|
|
|
|
|
r = requests.post(url, json=payload, headers=headers)
|
2024-09-16 10:23:55 +10:00
|
|
|
print(datetime.now().isoformat(' '), r)
|
|
|
|
r.raise_for_status() # if we got a 4xx response
|