This Discord.js Template was designed to make building a Discord bot as simple as possible. Eliminate the hassle of setting up a new project with all the structures and handlers and get right to work on your bot with reusable embeds, dynamic handlers and a config file to customize everything!
-
Interaction Handler
- This is a handler for all of Discord.js v13 new interaction. Slash-commands, Context-menus, Select-menus, and Buttons.
- Dynamic file loading, organize your various commands in different folders to keep everything organized.
- Permissions and Cooldown system.
-
Legacy Command Handler
- This is a handler for the leagacy message prefix commands.
- Dynamic file loading, organize your various commands in different folders to keep everything organized.
- Permissions and Cooldown system.
-
Reusable Embeds
- Embeds with preset configurations, such as an error embed with a customizable description, footer.
errorEmbed(interaction, 'Error embed example description', 'Error embed example footer')
Clone or Download this repository then get the dependencies by running:
npm install
After that go to your.env
and config.json
files and change these configurations:
BOT_TOKEN, prefix, guildID, clientID
make sure you're using node.js version v16.6.0
or higher, run node -v
in your terminal to check.
You can find the config.json
file in the ./util
folder.
Add custom emojis and extra color values by using this format:
"emoji" : "<:emoji-name:emoji-ID>"
"color" : "hex-color-value"
Events format
module.exports = {
name: 'eventName',
once: 'true', //run once true/false
async execute( < args > ) {
//Code
},
}
Slash commands format
const { SlashCommandBuilder } = require('@discordjs/builders')
module.exports = {
data: new SlashCommandBuilder()
.setName('commandName')
.setDescription('command description'),
async execute( < args > ) {
// Code
}
}
Context menus format
const { ContextMenuCommandBuilder } = require('@discordjs/builders')
module.exports = {
data: new ContextMenuCommandBuilder()
.setName('context-menu-name')
.setType(2), // (2): USER , (3): MESSAGE
async execute( < args > ) {
// Code
},
}
Buttons format
Adding buttons to a message:
const { MessageButton, MessageActionRow } = require('discord.js') // At the top of the file.
let exampleButton = new MessageButton()
.setLabel('Example')
.setStyle('PRIMARY') // PRIMARY, SECONDARY, SUCCESS, DANGER, LINK
.setCustomId('example_button')
const row = new MessageActionRow().addComponents(exampleButton)
interaction.reply({
content: 'Example message',
components: [row],
})
Button event format:
module.exports = {
name: 'example_button',
aliases: ['aliase1_button', 'aliase2_button'],
async execute(interaction) {
if (interaction.customId == 'example_button') {
// Code
} else if (interaction.customId == 'aliase1_button') {
// Code
}
}
}
Select menu format
Adding select menu to a message:
const { MessageSelectMenu, MessageActionRow} = require('discord.js') // At the top of the file.
let selectMenu = new MessageSelectMenu()
.setCustomId('select_example')
.setPlaceholder('Nothing selected')
.setMinValues(1)
.setMaxValues(2)
.addOptions([{
label: 'Option #1',
description: 'This is a description for option #1',
value: 'first_option',
emoji: '1️⃣',
},
{
label: 'Option #2',
description: 'This is a description for option #2',
value: 'second_option',
emoji: '2️⃣',
},
])
const row = new MessageActionRow().addComponents(selectMenu)
interaction.reply({
content: 'Example message',
components: [row],
})
Select menu event format:
module.exports = {
name: 'select_example',
async execute(interaction) {
interaction.reply({
content: `${interaction.values[0]} option selected.`,
ephemeral: true,
})
},
}
Permissions/Cooldown format
const { SlashCommandBuilder } = require('@discordjs/builders')
module.exports = {
data: new SlashCommandBuilder()
.setName('perms-cooldown-example')
.setDescription('Permissions & Cooldown example'),
cooldown: 5000, // Time in milliseconds.
permissions: ['ADMINISTRATOR'],
async execute(interaction) {
interaction.reply({
content: 'You have permission to run this command!',
})
}
}
Legacy commands format
module.exports = {
name: 'commandName',
aliases: ['aliase1', 'aliase2'],
description: 'command description',
async execute(message) {
// Code
},
}
Join this Discord server if you need any help.
Documentations coming soon.
Before creating an issue, please ensure that it hasn't already been reported/suggested You can also take a look at the contributing guide if you'd like to submit a PR.
This project is not affiliated/associated/partnered with Discord or even Discord.js.