discord-interactions
Types and helper functions that may come in handy when you implement a Discord Interactions webhook.
Overview
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.
Installation
npm install discord-interactions
Usage
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.
Interaction Types
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. |
Message Components
This library contains lightweight TypeScript types and enums that are helpful when working with Message Components.
For a complete list of available TypeScript types, check out discord-api-types package.
Learning more
To learn more about the Discord API, visit https://discord.dev.