0 purchases
discord interactions
Create a serverless Discord bot in pure dart using Discord Interactions webhooks
Features #
Feature
Status
Manage Application Commands
Full support (unit-tested)
Create message components
Full support (unit-tested)
Respond to commands
Full support (unit-tested)
File uploads
Full support (unit-tested)
Supported APIs #
API
Status
Audit Logs
Full support (unit-tested)
Channels
Full support (mostly unit-tested)
Emojis
Full support (unit-tested)
Guilds
Full support (mostly unit-tested)
Guild Scheduled Events
Full support (untested)
Guild Templates
Full support (untested)
Invites
Full support (unit-tested)
Stage Instances
Full support (untested)
Stickers
Full support (partially unit-tested)
Users
Full support (unit-tested)
Voice
Full support (unit-tested)
Webhooks
Full support (untested)
Full support for all Discord API endpoints is planned
Getting started #
This package is meant for running a Discord bot on serverless platforms. The example is made for Google Cloud Run, but other providers that support running dart code will work.
Usage #
Discord has a couple requirements that must be met before you can enable webhooks for Interactions. This package comes with helper functions to help you get started.
First, you must validate all requests sent to your bot. You must reject invalid requests. The Validator class handles this for you. The applicationPublicKey comes from your application's page on the Discord Developer Portal.
final validator = InteractionValidator(applicationPublicKey: '*****');
final valid = validator.validate(headers: request.headers, body: body);
if (!valid) {
return Response(401, body: 'invalid request signature');
}
copied to clipboard
Second, you must respond to ping Interactions with a pong Response
final interaction = Interaction.fromJson(jsonDecode(body));
if (interaction.type == InteractionType.ping) {
return Response.ok(jsonEncode(InteractionResponse.pong()));
}
copied to clipboard
If either of these requirements are not met, the Discord Developer Portal will reject your INTERACTIONS ENDPOINT URL
Now you can respond to Application Commands
Discord requires a specially formatted user agent for API calls. The DiscordUserAgent class handles this for you. The url field should point to a useful webpage for your bot. The versionNumber field should match your bot's version number. There is also an optional extra field if you would like to provide additional information about your bot to Discord.
The applicationId and botToken fields come from your application's page on the Discord Developer Portal. If you do not provide a botToken, you must provide a credentialsToken instead.
final api = DiscordApi(
applicationId: '*****',
userAgent: DiscordUserAgent(
url: '*****',
versionNumber: '*****',
),
botToken: '*****',
);
await api.interactions.createInteractionResponse(
interaction.id,
token: interaction.token,
response:
InteractionResponse.message(content: 'Hello, Discord Interactions!'),
);
copied to clipboard
Additional information #
This package is very much in-progress. If you have any suggestions or feedback, please open an issue on GitHub.
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.