discord-js
Discord.js Bot Builder
Overview
Build full-featured Discord bots using discord.js v14+. This skill provides a complete bot template, comprehensive API patterns, and extensive command examples for creating bots from scratch.
Quick Start
Create a New Bot Project
Use the bot template from assets/bot-template/ to start a new bot:
- Copy the entire
bot-template/directory to your project location - Install dependencies:
npm install - Create
.envfile from.env.example - Add your bot token, client ID, and guild ID to
.env - Deploy commands:
npm run deploy - Start the bot:
npm start
The template includes:
- Command handler system (auto-loads from
commands/directory) - Event handler system (auto-loads from
events/directory) - Example ping command
- Ready and interaction events
- Command deployment script
- Proper project structure
Bot Template Structure
bot-template/
├── commands/ # Slash command files
│ └── ping.js # Example command
├── events/ # Event handlers
│ ├── ready.js # Bot ready event
│ └── interactionCreate.js # Command handler
├── index.js # Main bot file
├── deploy-commands.js # Command deployment
├── package.json # Dependencies
├── .env.example # Environment template
└── README.md # Setup instructions
Adding Commands
Create new command files in commands/ directory:
const { SlashCommandBuilder } = require('discord.js');
module.exports = {
data: new SlashCommandBuilder()
.setName('commandname')
.setDescription('Command description')
.addStringOption(option =>
option.setName('input')
.setDescription('Input description')
.setRequired(true)
),
async execute(interaction) {
const input = interaction.options.getString('input');
await interaction.reply(`You said: ${input}`);
},
};
After creating a command, run npm run deploy to register it with Discord.
Adding Events
Create new event files in events/ directory:
module.exports = {
name: 'messageCreate',
once: false,
execute(message) {
if (message.author.bot) return;
console.log(`${message.author.tag}: ${message.content}`);
},
};
The bot automatically loads all events on startup.
Common Patterns
Slash Command with Options
.addStringOption(option => ...) // Text input
.addIntegerOption(option => ...) // Whole numbers
.addUserOption(option => ...) // User mention
.addChannelOption(option => ...) // Channel mention
.addRoleOption(option => ...) // Role mention
.addBooleanOption(option => ...) // True/false
Reply Types
// Normal reply
await interaction.reply('Message');
// Ephemeral (only user sees)
await interaction.reply({ content: 'Secret!', ephemeral: true });
// Deferred reply (for long operations)
await interaction.deferReply();
// ... do work ...
await interaction.editReply('Done!');
Embeds
const { EmbedBuilder } = require('discord.js');
const embed = new EmbedBuilder()
.setColor(0x0099FF)
.setTitle('Title')
.setDescription('Description')
.addFields(
{ name: 'Field 1', value: 'Value 1' },
{ name: 'Field 2', value: 'Value 2', inline: true }
)
.setTimestamp();
await interaction.reply({ embeds: [embed] });
Buttons
const { ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');
const row = new ActionRowBuilder()
.addComponents(
new ButtonBuilder()
.setCustomId('button_id')
.setLabel('Click Me')
.setStyle(ButtonStyle.Primary)
);
await interaction.reply({ content: 'Choose:', components: [row] });
Handle button clicks:
// In interactionCreate event
if (interaction.isButton()) {
if (interaction.customId === 'button_id') {
await interaction.reply('Button clicked!');
}
}
Permission Checks
if (!interaction.member.permissions.has('ManageMessages')) {
return interaction.reply({ content: 'No permission!', ephemeral: true });
}
References
discord-guide.md
Comprehensive API reference covering:
- Bot setup and authentication
- Client configuration and intents
- All common events
- Slash commands in detail
- Messages, embeds, buttons, modals
- Roles, permissions, channels
- Voice connections
- Advanced patterns (cooldowns, pagination, collectors)
Read when implementing specific features, working with Discord API components, or troubleshooting.
command-examples.md
Extensive collection of ready-to-use command examples:
- Basic: hello, echo, userinfo
- Moderation: kick, ban, clear messages, timeout
- Utility: poll, reminder, avatar
- Fun: 8ball, dice roll
- Information: serverinfo, help
- Advanced: confirmation dialogs, multi-step commands with modals
Copy and adapt examples for quick command implementation.
Getting Bot Credentials
- Go to Discord Developer Portal
- Create New Application
- Navigate to Bot section → Add Bot
- Copy bot token (DISCORD_TOKEN)
- Get application ID from General Information (CLIENT_ID)
- Enable required Privileged Gateway Intents if needed:
- MESSAGE CONTENT INTENT (for reading message content)
- SERVER MEMBERS INTENT (for member events)
- PRESENCE INTENT (for user presence)
Inviting Bot to Server
Generate invite URL:
https://discord.com/api/oauth2/authorize?client_id=YOUR_CLIENT_ID&permissions=8&scope=bot%20applications.commands
Replace YOUR_CLIENT_ID and adjust permissions value as needed.