Types and helper functions that may come in handy when you implement a Discord Interactions webhook.
This library provides a simple interface for working with slash commands and Discord. You can build applications that allow users to use Interactions to send commands to your app. When a user runs such a command, Discord will send an HTTP request to your web application. This library makes it easier to:
- Verify that requests to your endpoint are actually coming from Discord
- Integrate verification with web frameworks that use connect middleware (like express)
- Use lightweight enums and TypeScript types to aid in handling request payloads and responses
To learn more about building on Discord, see https://discord.dev.
npm install discord-interactions
Use the InteractionType
and InteractionResponseType
enums to figure out how to respond to a webhook.
Use verifyKey
to check a request signature:
const signature = req.get('X-Signature-Ed25519');
const timestamp = req.get('X-Signature-Timestamp');
const isValidRequest = await verifyKey(req.rawBody, signature, timestamp, 'MY_CLIENT_PUBLIC_KEY');
if (!isValidRequest) {
return res.status(401).end('Bad request signature');
}
Note that req.rawBody
must be populated by a middleware (it is also set by some cloud function providers).
If you're using an express-like API, you can simplify things by using the verifyKeyMiddleware
. For example:
app.post('/interactions', verifyKeyMiddleware('MY_CLIENT_PUBLIC_KEY'), (req, res) => {
const message = req.body;
if (message.type === InteractionType.APPLICATION_COMMAND) {
res.send({
type: InteractionResponseType.CHANNEL_MESSAGE_WITH_SOURCE,
data: {
content: 'Hello world',
},
});
}
});
Make sure that you do not use other middlewares like body-parser
, which tamper with the request body, for interaction routes.
The following enumerations are available to help working with interaction requests and responses. For more details, see the examples.
InteractionType |
An enum of interaction types that can be POSTed to your webhook endpoint. |
InteractionResponseType |
An enum of response types you may provide in reply to Discord's webhook. |
InteractionResponseFlags |
An enum of flags you can set on your response data. |
This library contains lightweight TypeScript types and enums that are helpful when working with Message Components.
MessageComponentTypes |
An enum of message component types that can be used in messages and modals. |
ActionRow |
Type for Action Rows |
Button |
Type for Buttons |
ButtonStyleTypes |
Enum of available Button Styles |
StringSelect |
Type for String Selects |
StringSelectOption |
Type for String Select Options |
InputText |
Structure for `Text Inputs |
TextStyleTypes |
Enum for Text Style Types |
For a complete list of available TypeScript types, check out discord-api-types package.
To learn more about the Discord API, visit https://discord.dev.