Docs/Plugins/RSS Feeds
RSS Feeds
Post new items from RSS, Atom, or RDF feeds to your channels, with custom messages, keyword filters, and an optional role ping.
Point HepBoat at a feed and new items get posted to a channel of your choice. Feeds are checked every 5 minutes, each feed can have its own message template or embed, keyword filters decide what gets through, and a role can be pinged when something posts. Everything is managed from the dashboard's Setup - RSS Feeds page - this plugin has no Discord commands.
The RSS feature is granted by the operator. Until your server has it, feeds are not checked and nothing is posted.
plugins:
rss:
feeds:
- url: https://example.com/blog.rss
channel: 665875009507426304
notify_role: 661841085148102718 # optional ping on a new item
message: "**{title}**\n{link}"
embed: false # true = post an embed instead
filters:
include: [] # post only items containing one of these
exclude: [] # never post items containing one of these
Setup checklist
- Make sure your server has the RSS feature. The Setup - RSS Feeds page tells you when it is missing - ask the operator for the grant.
- Give HepBoat View Channel, Send Messages, and Embed Links in the channel the feed should post to.
- Open Setup - RSS Feeds, add a feed, paste the feed URL, and pick the channel. Leave the default message for the first test.
- Press Test feed. You should see the feed's title and its newest items exactly as they would post. Fix the URL until the test passes - most "feeds" that fail here are actually normal web pages, not feeds.
- Save. The first check runs within 5 minutes, marks everything currently in the feed as already read, and posts nothing - only items published after you saved will post. If you would rather the channel not sit empty, tick Post the 5 most recent items when this feed is first checked before saving.
- Wait for the feed to publish something new (or test with a feed that updates often) and confirm the item appears in the channel.
- Then shape it: set a ping role, switch to an embed, or add keyword filters, and save again.
Where to find feed URLs
Any standard RSS 2.0, Atom, or RDF feed works. Two popular examples:
- A subreddit - append
.rssto the subreddit URL:https://www.reddit.com/r/formula1/new/.rssposts new submissions from r/formula1. Sort variants work too (/hot/.rss,/top/.rss). - A YouTube channel - use the channel feed with the channel's ID (the
string starting
UC...from the channel URL or its About page):https://www.youtube.com/feeds/videos.xml?channel_id=UCxxxxxxxxposts new uploads.
Blogs, news sites, GitHub releases (https://github.com/owner/repo/releases.atom),
and most podcast hosts publish feeds the same way. If a site offers no feed
link, try its /feed, /rss, or /atom.xml path - and use Test feed to
confirm before saving.
The message
Each feed has a message template. These placeholders are filled from the item:
{title}- the item title{link}- the item URL. Write it as<{link}>to stop Discord showing a link preview.{author}- the item author, when the feed provides one{published}- the publish time (UTC){summary}- a short plain-text summary, tags stripped{description}- the longer plain-text body, tags stripped{image}- the item's image URL, when one exists{feed_title}- the feed's own name
Turn on Post as an embed to post a formatted embed (title, link, summary, image, and timestamp) instead of the text template.
Feed content can never ping anyone. The only mention a feed post can make is the Ping role you configure, and that role is pinged at most once per item.
Filters
Two per-feed keyword lists, checked against the item's title and summary, case-insensitively:
- Only post items containing - when set, an item must contain at least one of these words or phrases to post.
- Never post items containing - an item containing any of these is skipped, even if it also matches the include list.
These are plain keywords, not patterns - patch notes matches the phrase
"patch notes" anywhere in the title or summary.
Limits and behavior
- Up to 25 feeds per server, checked every 5 minutes.
- Adding a feed never floods the channel: everything already in the feed is marked read at the start, and at most 5 items post per feed per check - a feed that publishes a burst trickles out instead of carpet-bombing.
- A new feed is silent until it publishes something new. Anything dated at or before the moment you added it is treated as history and never posts, however large the feed is.
- Post the 5 most recent items when this feed is first checked is the opt-out, set per feed and off by default. It posts those five once, oldest first, on the first check only. It is capped at five on purpose, so ticking it on a feed with hundreds of entries cannot flood the channel.
- Items post oldest first, so the channel reads in order.
- The same server can post one feed to several channels - add the feed once per channel.
- Changing a feed's URL counts as a new feed: it starts fresh and marks the new feed's current items as read. If the history option is ticked, changing the URL will seed the channel again.
When a feed fails
A feed that stops responding is retried with increasing gaps instead of
every 5 minutes. The dashboard shows the failure and its reason next to the
feed. If a feed keeps failing for about a day, HepBoat disables it: the
feed's enabled flag is switched off in your config (you will see it in
config history), and a mod-log event records why. Fix the URL and switch the
feed back on from the dashboard to resume.
Common failure causes:
- The URL is a web page, not a feed - use Test feed and look for a real feed URL on the site.
- The feed host blocks bots or rate-limits - some hosts need a while between checks; HepBoat's backoff usually settles this on its own.
- The feed is larger than 2 MB or takes longer than 10 seconds to respond - HepBoat gives up on oversized and slow feeds by design.
- The URL points at a private or internal address - HepBoat only fetches public http(s) URLs.