Discord
Sends messages to a Discord channel using a webhook.
Setup
To use this action you'll need to do some setup on Discord's end.
Step 1 - Select Channel
Go to your Discord server and click on the settings icon next to the channel you want to send messages to.

Step 2 - Create Webhook
Click on the "Integrations" tab

Then click on "View Webhooks"

Now click "Create Webhook"

Step 3 - Copy URL
Expand your newly created webhook and copy the URL. From here you can also change your bot's name, profile photo, and the channel it sends messages to.

Step 4 - Create message
Now that you have your webhook URL, you can create a message to send to your Discord channel. If you're a regular Discord user, you're probably familiar with the syntax for bolding text, italicizing text, etc (opens in a new tab). However, the markup for the webhook content is a bit different. This section of the Discord documentation explains the syntax for tagging users, channels, and roles (opens in a new tab). Here's a quick overview:
- To tag a user, use
<@USER_ID>
- To tag a channel, use
<#CHANNEL_ID>
- To tag a role, use
<@&ROLE_ID>
These various IDs can be found by right-clicking on the user, channel tab, or role badge and selecting "Copy ID".
Usage
{
"triggers": [
{
"type": "action",
"key": "Discord",
"value": {
"webhook_url": "https://discord.com/api/webhooks/0000000000000000/wfeiurbvtrligutgiu",
"message": "Hey <@000000000000000000>, this is a test message!"
}
},
{
"type": "action",
"key": "Discord",
"value": {
"webhook_url": "https://discord.com/api/webhooks/00000000000000000/er3t5v4635g4rrt8",
"message": "Hey <@00000000000000000>, this is a test message!"
},
"when_next": true
}
]
}
Implementation
import requests
from app.actions.Action import Action
from app.utils import ActionError
class Discord(Action):
"""
Class name: Discord
Class description: Send a message to a Discord channel via webhook
Example value:
{
"webhook_url": "https://discord.com/api/webhooks/00000000000000000/er3t5v4635g4rrt8",
"message": "Hey <@00000000000000000>, this is a test message!"
},
"""
def __init__(self, value):
"""
Method name: __init__
Method description: Constructor for Discord class
@param value: value used to define Discord message
"""
if value is None:
raise ActionError("Value is required for Discord action")
try:
self.value = value
self.webhook_url = value.get('webhook_url') or ''
self.message = value.get('message') or ''
except Exception as e:
raise ActionError("Value must be a valid JSON object for Discord action " + str(e))
def run(self):
try:
requests.post(
url=self.webhook_url,
json={"content": self.message}
)
return
except Exception as e:
raise ActionError("Action failed: " + str(e))