Discord Slim
Lightweight Discord bot API for Node.js.
V2 IS NOW RELEASED!
Contains breaking changes and incompatible with V1.
New features
- Typed actions instead of manual requests.
- Typed events instead of manual packet handling.
- Uses new Discord API version (v8) with all new features support.
- Sharding.
- Voice connection.
Support & suggestions
Before you start
Node.js 14+ is required!
Make sure you have some understaning of Discord API.
Docs
TODO.
For now use e.g. VS Code for types completion. If you have any questions join our discord server.
Installation
npm i discord-slim
Usage example
Initial setup
const { Client, ClientEvents, Authorization, Events, Actions, Helpers, Tools } = require('discord-slim');
const client = new Client();
client.on(ClientEvents.CONNECT, () => console.log('Connection established.'));
client.on(ClientEvents.DISCONNECT, (code) => console.error(`Disconnect. (${code})`));
client.on(ClientEvents.WARN, console.warn);
client.on(ClientEvents.ERROR, console.error);
client.on(ClientEvents.FATAL, (e) => { console.error(e); process.exit(1); });
const authorization = new Authorization('token');
Actions.setDefaultRequestOptions({
authorization,
rateLimit: {
retryCount: 5,
callback: (response, attempts) =>
console.log(`${response.message} Global: ${response.global}. Cooldown: ${response.retry_after} sec. Attempt: ${attempts}.`),
},
});
...
client.Connect(authorization, Helpers.Intents.GUILDS | Helpers.Intents.GUILD_MESSAGES);
You can read about intents here.
Basic message response
client.events.on(Events.MESSAGE_CREATE, (message) => {
if(message.author.id == client.user.id) return;
if(message.content.search(/(^|\s)h(ello|i)(\s|\s.*\s)bot($|\s)/i) < 0) return;
Actions.Message.Create(message.channel_id, {
content: `Hi, ${Tools.Mentions.User(message.author.id)}!`,
message_reference: {
channel_id: message.channel_id,
message_id: message.id,
},
});
});
Set bot status
client.events.on(Events.READY, () => {
client.UpdateStatus({
status: Helpers.StatusTypes.ONLINE,
activities: [{ type: Helpers.ActivityTypes.WATCHING, name: 'YOU' }],
afk: false,
since: 0,
});
});
Using slash commands
Note: slash commands requires applications.commands
scope. Read details in docs.
client.events.on(Events.GUILD_CREATE, (guild) => {
Actions.Application.CreateGuildCommand(client.user.id, guild.id, {
name: 'echo',
description: 'Test slash command.',
options: [
{
type: Helpers.ApplicationCommandOptionTypes.STRING,
name: 'text',
description: 'Echo message text.',
required: true,
},
],
});
});
client.events.on(Events.INTERACTION_CREATE, (interaction) => {
if(interaction.data?.name != 'echo') return;
Actions.Application.CreateInteractionResponse(interaction.id, interaction.token, {
type: Helpers.InteractionResponseTypes.CHANNEL_MESSAGE_WITH_SOURCE,
data: {
content: interaction.data.options[0].value.toString(),
flags: Helpers.InteractionResponseFlags.EPHEMERAL,
},
});
});
Build from source
Install typescript
package from npm
and run tsc
.