Summary
Add a Discord delivery sink so users can receive their daily digest in a Discord channel via an Incoming Webhook.
Why
Discord is widely used by developer and research communities. It uses the same incoming webhook pattern as the existing Slack sink, making this a well-scoped first contribution.
What to implement
A new sink at sinks/discord/ that:
- Sends the daily digest as one or more Discord messages using the Discord Incoming Webhook API
- Formats content using Discord's markdown (bold, links, code blocks)
- Reads the webhook URL from
DISCORD_WEBHOOK_URL environment variable / GitHub Secret
- Respects the
max_papers, max_hn, max_github config options (same as Slack sink)
How to get started
- Copy
sinks/_template/ to sinks/discord/
- Look at
sinks/slack/ as a reference implementation — the Discord webhook API is very similar
- Add config under
sinks: in config/sources.yaml:
sinks:
discord:
enabled: false
max_papers: 5
max_hn: 3
max_github: 3
- Register in
sinks/__init__.py
- Add
DISCORD_WEBHOOK_URL to .github/workflows/daily.yml env block (see how SLACK_WEBHOOK_URL is handled)
- Write a test in
tests/ — see tests/test_slack_sink.py for the pattern
- Add a
sinks/discord/README.md documenting setup
Acceptance criteria
Summary
Add a Discord delivery sink so users can receive their daily digest in a Discord channel via an Incoming Webhook.
Why
Discord is widely used by developer and research communities. It uses the same incoming webhook pattern as the existing Slack sink, making this a well-scoped first contribution.
What to implement
A new sink at
sinks/discord/that:DISCORD_WEBHOOK_URLenvironment variable / GitHub Secretmax_papers,max_hn,max_githubconfig options (same as Slack sink)How to get started
sinks/_template/tosinks/discord/sinks/slack/as a reference implementation — the Discord webhook API is very similarsinks:inconfig/sources.yaml:sinks/__init__.pyDISCORD_WEBHOOK_URLto.github/workflows/daily.ymlenv block (see howSLACK_WEBHOOK_URLis handled)tests/— seetests/test_slack_sink.pyfor the patternsinks/discord/README.mddocumenting setupAcceptance criteria
sinks/discord/__init__.pywithDiscordSinkclasssinks/discord/README.mdwith setup instructionssinks/__init__.pyconfig/sources.yaml(commented out,enabled: false)DISCORD_WEBHOOK_URLwired intodaily.ymlpytest tests/ -qpasses