rss-discord-bot/webhook.py

52 lines
1.5 KiB
Python
Raw Normal View History

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