- CLI based handler
- Supports Context Menus
- Supports Prefix/Message commands
- Validate messsage command options
- Supports Slash Commands
- Built-in command cooldowns
- Automatically register application commands
- Highly configurable
To use templates use the following command in your terminal:
npm create reciple@latest
After that configure the template you want to use. Learn More
Usage: reciple [options] [command]
Reciple is a Discord.js bot framework
Options:
-v, --version output the version number
--env <file> Set .env file path (default: [".env"])
--debug Enable debug mode (default: false)
--cwd <dir> Set current working directory (default: "./")
-h, --help display help for command
Commands:
shard [options] Starts in sharding mode
start [options] Starts the bot
help [command] display help for command
Reciple provides a built-in MessageCommandBuilder
class that can be used for message command handler.
import { MessageCommandBuilder } from 'reciple';
new MessageCommandBuilder()
.setName("command")
.setDescription("Your lil tiny description")
.addAliases("cmd", "cmd1")
.setExecute(command => command.message.reply("Hello!"));
import { MessageCommandBuilder } from 'reciple';
new MessageCommandBuilder()
.setName("command")
.setDescription("Your lil tiny description")
.addAliases("cmd", "cmd1")
.setValidateOptions(true) // Validate options
.addOption(option => option
.setName("quantity")
.setDescription("Must be a number")
.setRequired(true) // A required option
.setValidate(({ value }) => !isNaN(Number(value))) // Validate value
.setResolveValue(({ value }) => Number(value)) // Resolves the option value
)
.setExecute(async command => {
/**
* @type {number}
*/
const quantity = await data.options.getOptionValue('number', { required: true, resolveValue: true });;
await command.message.reply("Quantity: " + quantity);
});
Reciple provides extended ContextMenuCommandBuilder
class that can be used for context menu command handler.
import { ApplicationCommandType } from 'discord.js';
import { ContextMenuCommandBuilder } from 'reciple';
new ContextMenuCommandBuilder()
.setName("Ban")
.setType(ApplicationCommandType.User)
.setExecute(async ({ interaction }) => {
if (!interaction.inCachedGuild()) return;
await interaction.deferReply();
await interaction.targetMember.ban();
await interaction.editReply(`Banned ${interaction.targetUser}`);
});
Reciple provides extended SlashCommandBuilder
class that can be used for slash command handler.
Read Docs
import { SlashCommandMenuBuilder } from 'reciple';
new SlashCommandBuilder()
.setName("ping")
.setDescription("Pong")
.setExecute(async ({ interaction }) => {
await interaction.reply(`Pong!`);
});
import { ContextMenuCommandBuilder, MessageCommandBuilder, SlashCommandBuilder } from 'reciple';
import { ApplicationCommandType } from 'discord.js';
new ContextMenuCommandBuilder()
.setName("Context Menu")
.setType(ApplicationCommandType.Message)
.setCooldown(1000 * 5) // 5 seconds cooldown
.setExecute(async ({ interaction }) => {
await interaction.reply(`Hello!`);
});
new MessageCommandBuilder()
.setName("message-command")
.setDescription(`Your command`)
.setCooldown(1000 * 5) // 5 seconds cooldown
.setExecute(async ({ message }) => {
await message.reply(`Hello!`);
});
new SlashCommandBuilder()
.setName("slash-command")
.setDescription(`Your command`)
.setCooldown(1000 * 5) // 5 seconds cooldown
.setExecute(async ({ interaction }) => {
await interaction.reply(`Hello!`);
});
You can configure the bot in reciple.mjs
usually located in the bot's root directory.
You can change the token in config.
token: "Your Token" // Directly set token string
token: process.env.TOKEN // Use env variable
You can override the given token as cli flag
reciple --token "YOUR_TOKEN_HERE"
reciple --token "env:TOKEN_VARIABLE"
The name reciple is from a minecraft bug. The bug was a misspelling of the word
recipe
. View Mojang Bug Report