61 lines
1.8 KiB
Markdown
61 lines
1.8 KiB
Markdown
---
|
|
title: How to Automate Discord Message Posting With Webhooks and Cron
|
|
date: 2018-03-29
|
|
series: howto
|
|
---
|
|
|
|
Most Linux systems have [`cron`](https://en.wikipedia.org/wiki/Cron) installed to run programs at given intervals. An example usecase would be to install package updates every Monday at 9 am (keep the sysadmins awake!).
|
|
|
|
Discord lets us post things using [webhooks](https://discordapp.com/developers/docs/resources/webhook). Combining this with cron lets us create automated message posting bots at arbitrary intervals.
|
|
|
|
## The message posting script
|
|
|
|
Somewhere on disk, copy down the following script:
|
|
|
|
```sh
|
|
#!/bin/sh
|
|
# msgpost.sh
|
|
# change MESSAGE, WEBHOOK and USERNAME as makes sense
|
|
# This code is trivial, and not covered by any license or warranty.
|
|
|
|
# explode on errors
|
|
set -e
|
|
|
|
MESSAGE='haha memes are funny xD'
|
|
WEBHOOK=https://discordapp.com/api/webhooks/0892379892092/AFkljAoiuj098oKA_98kjlA85jds
|
|
USERNAME=KRONK
|
|
|
|
curl -X POST \
|
|
-F "content=${MESSAGE}" \
|
|
-F "username=${USERNAME}" \
|
|
"${WEBHOOK}"
|
|
```
|
|
|
|
Test run it and get a message like this:
|
|
|
|
![example discord message](https://i.imgur.com/dtjXcei.png)
|
|
|
|
## How to automate it
|
|
|
|
To automate it, first open your [`crontab(5)`](http://man7.org/linux/man-pages/man5/crontab.5.html) file:
|
|
|
|
```console
|
|
$ crontab -e
|
|
```
|
|
|
|
Then add a crontab entry as such:
|
|
|
|
```crontab
|
|
# Post this funny message every hour, on the hour
|
|
0 * * * * sh /path/to/msgpost.sh
|
|
|
|
# Also valid with some implementations of cron (non-standard)
|
|
@hourly sh /path/to/msgpost.sh
|
|
```
|
|
|
|
Then save this with your editor and it will be loaded into the cron daemon. For more information on crontab formats, see [here](https://crontab.guru/).
|
|
|
|
To run multiple copies of this, create multiple copies of `msgpost.sh` on your drive with multiple crontab entries.
|
|
|
|
Have fun :)
|