#!/home/cardigan/rss-discord-bot/venv/python/python3.11 from datetime import datetime import json import os import sys import feedparser import requests guild = os.getenv("DISCORD_GUILD") # Discord server code token = os.getenv("DISCORD_TOKEN") # token for this bot cardicast_ping = os.getenv("DISCORD_CARDICAST_PING") # Discord role # get the latest post with image as enclosure f = feedparser.parse("https://newcardigan.org/category/cardicast/?feed=featured_image_feed") p = f.entries[0] # check whether we have already seen this entry with open("latest_post.txt", "r+") as f: guid = f.read().strip() f.close() if guid != p.guid: # update the guid with open("latest_post.txt", "w+") as f: f.write(p.guid) f.close() 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}" payload = { "thread_name": f"{p.title}", "content": content, "embeds": embeds, "allowed_mentions": { "roles": [cardicast_ping] } } r = requests.post(url, json=payload, headers=headers) print(datetime.now().isoformat(' '), r) r.raise_for_status() # if we got a 4xx response