.gitignore | ||
latest_post.txt | ||
LICENSE | ||
README.md | ||
requirements.txt | ||
send_message.py | ||
trigger.sh |
Discord cardiparty announcement bot
Push new cardiParty announcements into the cardiParties Discord channel using a bot account and the Discord API.
prerequisites
You need to have a server to run this code on, and also a Discord bot account.
- Create your bot at https://discord.com/developers/applications
- Change registration URL to "none" to make it private, and untick the box for "public bot"
- Go to OAuth2 -> URL Generator -> tick the "bot" field -> tick relevant permissions -> copy the url -> visit it
install
- Create and activate virtual env
- Install requirements:
pip install -r requirements.txt
- set env values in
trigger.sh
- Set up a cronjob (see below)
- Test cronjob works
- Relax
How it works
We run this on the newcardigan wordpress server.
- With a cron job we call
trigger.sh
- The shell script sets env values then calls
send_message.py
- The python script checks a custom RSS feed for new cardiparty
- If no new post, end
- If new post,
- save the date of the post to
latest_post.txt
for the next round of checking - use the values from the RSS feed
- publish via API and bot account to Discord
- save the date of the post to
env values
These are all set in trigger.sh
, not in crontab, to keep things contained.
We need to include some secrets via environment values:
- the channel ID (
DISCORD_CARDICAST_CHANNEL
) - the secret bot token for the API call (
DISCORD_CARDICAST_TOKEN
) - the ID of the
@cardiCast ping
role (DISCORD_CARDICAST_PING
)
And because we run python in a virtual environment:
venv - we need to activate the venv using source <path/to/venv>
Cron job command
*/18 * * * * cd /home/cardigan/discord-cardiparty-bot && ./trigger.sh
RSS feed
The rss feed is https://newcardigan.org/category/cardiparties/?feed=featured_image_feed
.
This special featured_image_feed
is a slightly modified RSS2 feed. The only thing it does differently is include the featured image in an enclosure
so that we can pick it up directly from the feed. See the newcardigan WordPress theme for how this works.