A RSS bot for Discord
  • Python 78.8%
  • jinja 20.5%
  • CSS 0.6%
  • Dockerfile 0.1%
Find a file
Joakim Hellsén d85bc16904
All checks were successful
Test and build Docker image / docker (push) Successful in 30s
Make blacklist override whitelist
Change filter evaluation so blacklist matches take precedence over whitelist matches. Updated evaluator logic to skip entries when blacklist and whitelist both match, adjusted related branches to reflect the new decision flow, and updated a feeds.py comment to clarify the combined decision. Also updated blacklist/whitelist templates copy to reflect the new precedence and adjusted tests to expect blacklist-wins behavior.
2026-05-04 22:55:53 +02:00
.forgejo Improve tests 2026-04-09 21:38:33 +02:00
.vscode Add additional words to cSpell configuration in settings.json 2025-06-07 06:05:14 +02:00
discord_rss_bot Make blacklist override whitelist 2026-05-04 22:55:53 +02:00
tests Make blacklist override whitelist 2026-05-04 22:55:53 +02:00
.env.example Add feed URL change functionality and related tests 2026-03-07 06:29:12 +01:00
.gitattributes Add .gitattributes to set Jinja as the language for HTML files 2025-04-01 22:58:42 +02:00
.gitignore chore: remove generated lockfiles, simplify deps, update pre-commit and ignore .python-version 2025-10-15 04:59:44 +02:00
.pre-commit-config.yaml Improve tests 2026-04-09 21:38:33 +02:00
docker-compose.yml Update Docker healthcheck 2025-05-04 05:28:37 +02:00
Dockerfile chore(deps): update dependency python (#401) 2025-10-15 03:12:19 +00:00
LICENSE Initial commit 2021-12-11 23:32:40 +01:00
pyproject.toml Instead of embed or text mode, optionally send a full-page screenshot of the entry URL as a Discord file upload 2026-04-10 00:32:02 +02:00
README.md Instead of embed or text mode, optionally send a full-page screenshot of the entry URL as a Discord file upload 2026-04-10 00:32:02 +02:00

discord-rss-bot

Subscribe to RSS feeds and get updates to a Discord webhook.

Email: tlovinator@gmail.com

Discord: TheLovinator#9276

Features

  • Subscribe to RSS feeds and get updates to a Discord webhook.
  • Web interface to manage subscriptions, webhooks, and filters.
  • Customizable message format for each feed.
  • Choose between sending a Discord embed, plain text or full-page screenshot to the webhook.
  • Regex filters for RSS feeds.
  • Blacklist/whitelist words in the title/description/author/etc.
  • Set different update frequencies for each feed or use a global default.
  • Gets extra information from APIs if available, currently for:

Installation

You have two choices, using Docker or install directly on your computer.

Docker

  • Open a terminal in the repository folder.
    • Shift + right-click in the folder and Open PowerShell window here
  • Run the Docker Compose file:
    • docker-compose up
      • You can stop the bot with Ctrl + c.
      • If you want to run the bot in the background, you can run docker-compose up -d.
  • You should run this bot behind a reverse proxy like Caddy or Nginx.
    • 5000 is the port the bot listens on.
  • You can update the container with docker-compose pull

Install directly on your computer

  • Install the latest of uv:

    • powershell -ExecutionPolicy ByPass -c "irm <https://astral.sh/uv/install.ps1> | iex"
  • Download the project from GitHub with Git or download the ZIP.

    • If you want to update the bot, you can run git pull in the project folder or download the ZIP again.
  • Open a terminal in the repository folder.

    • Shift + right-click in the folder and Open PowerShell window here
  • Start the bot:

    • Type uv run discord_rss_bot/main.py into the PowerShell window.
      • You can stop the bot with Ctrl + c.
  • Required for screenshot mode: install browser runtime once:

    • uv run playwright install chromium
  • Bot is now running on port 3000.

  • You should run this bot behind a reverse proxy like Caddy or Nginx if you want to access it from the internet. Remember to add authentication.

  • You can access the web interface at http://localhost:3000/.

  • To run automatically on boot:

    • Use Windows Task Scheduler.
    • Or add a shortcut to %userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup.

Git Backup (State Version Control)

The bot can commit every configuration change (adding/removing feeds, webhook changes, blacklist/whitelist updates) to a separate private Git repository so you get a full, auditable history of state changes — similar to etckeeper.

Configuration

Set the following environment variables (e.g. in docker-compose.yml or a .env file):

Variable Required Description
GIT_BACKUP_PATH Yes Local path where the backup git repository is stored. The bot will initialise it automatically if it does not yet exist.
GIT_BACKUP_REMOTE No Remote URL to push to after each commit (e.g. git@github.com:you/private-config.git). Leave unset to keep the history local only.

What is backed up

After every relevant change a state.json file is written and committed. The file contains:

  • All feed URLs together with their webhook URL, custom message, embed settings, and any blacklist/whitelist filters.
  • The global list of Discord webhooks.

Docker example

services:
  discord-rss-bot:
    image: ghcr.io/thelovinator1/discord-rss-bot:latest
    volumes:
      - ./data:/data
    environment:
      - GIT_BACKUP_PATH=/data/backup
      - GIT_BACKUP_REMOTE=git@github.com:you/private-config.git

For SSH-based remotes mount your SSH key into the container and make sure the host key is trusted, e.g.:

    volumes:
      - ./data:/data
      - ~/.ssh:/root/.ssh:ro