Discord

Easily send messages to a Discord server using webhooks!

For streamlined usage of Discord inbound webhooks, there is a discord method under env.webhooks. This allows you to provide the inbound webhook URL along with a message to easily post a message in a Discord channel. If you’re not familiar with Discord webhooks, refer to Discord’s introduction to web hooks article.

Signature

discord(
	url: string,
	message: string | Webhooks.Discord.Payload
): Promise<{ ok: boolean; response?: any; }>

Parameters

  • url: string
    • The url should be the Discord inbound webhook URL you received when creating a webhook. We recommend storing this as a encrypted variable for your Repeat.

  • message: string | Webhooks.Discord.Payload The message can be a string or you can provide a Webhooks.Discord.Payload object. This object allows you to utilise more advanced features such as embeds or overriding the username & avatar of the webhook. Refer to Discord’s developer documentation for the other supported properties.

Returns

  • ok: boolean
    • A boolean indicating if the request was successful (status code within the range of 200 - 299.)

  • response: Response
    • If the request was successful, the body of the response as plain-text.

Examples

Post a message whenever you receive an email

This is a simple Repeat that you can use to alert you when you receive a new email.

Example #1
export default {
	async email(email: Repeat.Email, env: Repeat.Env) {
		// things

		const message = `Received ${email.subject} from ${email.from} at ${Date.now().toTimeString()}.`;

		await env.webhooks.discord(env.variables.DISCORD_WEBHOOK_URL, message);

		// other things
	},
};

The resulting message in Discord will look like this:

Notion image

Customising the payload

In the above example, we sent a simple plain-text message - we can also send a JSON payload containing various other properties that are supported by Discord. Let’s modify the Repeat to use a different avatar and also use rich embeds instead of plain text.

Example #2
export default {
	async email(email: Repeat.Email, env: Repeat.Env) {
		// things

		const message: Webhooks.Discord.Payload = {
			// @ts-ignore
			avatar_url: 'https://dash.repeat.dev/favicon-16x16.png',
			embeds: [
				{
					title: 'New email received!',
					fields: [
						{
							name: 'Subject',
							value: email.subject,
						},
						{
							name: 'From',
							value: email.from,
						},
						{
							name: 'Date',
							value: new Date().toISOString(),
						},
					],
				},
			],
		};

		await env.webhooks.discord(env.variables.DISCORD_WEBHOOK_URL, message);

		// other things
	},
};

If we deploy our changes & run our Repeat, we should now get a message that looks like this:

Notion image

Last updated on November 23, 2022