Sending Linux Variables to Discord Webhook from Linux Bash Shell Script
Posted On
2018 Aug 26
about 6 years ago
Updated On
2023 Jan 08
almost 2 years ago
Discord provides an API where you can send messages/notifications via their
Having started playing with Linux Bash scripts, it may seem natural or easy to the Linux veterans, definitely not for me
So after some research over at StackOverflow and self-test. Here is the code that will work when $variables are passed to it
Minor Update - 2020-04-22
Thanks and credits to skye#5254 for commenting in my Discord server that it's better to use the "$@" to catch all variables including whitespaces
Latest Updated (better) script:
#!/bin/bash
message="$@"
## format to parse to curl
## echo Sending message: $message
msg_content=\"$message\"
## discord webhook
url='https://replace-your-full-discord-webhoook-url-here'
curl -H "Content-Type: application/json" -X POST -d "{\"content\": $msg_content}" $url
More information on $* and $@ variables can be found here:
Previous version:
message="$1"
More on the code/script
The main aim is to output the curl command as follows:
curl -H "Content-Type: application/json" -X POST -d "{"content": "Your messages here"}" $url
Wrapped the messages with double quotes (escaped) to the $message variable, which is handled by $msg_content
Original code on Discord - note the single quotes ' ' wrapping of the JSON content
-d '{"username": "test", "content": "hello"}' $url
Also changed the ' ' to double quotes " " , so that Linux can return the data in $msg_content
How to use
Assuming you already know the basics of basics in Linux bash scripting, you will need to save that code above in a ".sh" file. Eg: discord-notify.sh
Anyhow, for users of all experience ranging from complete beginners to somewhat experienced Linux users
Here are the complete steps:
- SSH/Login/Open your Linux Terminal
- We will save the discord-notify.sh onto your user $HOME folder
cd $HOME
nano discord-notify.sh
- Paste in the code above, modify and paste your
Discord Webhook URL
for $url variable - Save the file by pressing Ctrl+X, answer the questions when asked
- Make discord-notify.sh executable
chmod +x discord-notify.sh
- Prepare a variable for testing
testdate="Text with whitespace and variable $(date +%T)"
- Test send a notification to your Discord Server/Channel
./discord-notify.sh "$testdate"
And that's it.
Note if you don't double quote your $testdate variable, only "Text" get's sent as shown on screenshot above
I'll leave it to you on how you want to modify the code above to become a function to use in your scripts, or just call the discord-notify.sh
script from another script
Eg:
#!/bin/bash
## This is "changetheworld-super-script.sh" Your almighty script
# Make a call to the discord-notify.sh script located in $HOME
$HOME/discord-notify.sh "$heal_the_world"
As there is no one "correct" way to program/script, appreciate it if you could share your version of code that worked for you, or share something even better!
Leave a comment if it helped :)
used the script, works for normal messages but when I write $ commands I get this
{“message”: “Cannot send an empty message”, “code”: 50006}