You can create commands in the src/commands folder. In there you can create subfolders for each category youd like to have to manage commands easier for yourself.
Search for a folder youd like to create the command in or just create a new one. The name doesnt affect anything of the bot itself or the rest of the code.
Create a command file with the name youd like to have for the file.
In this we use this base code (you can choose one of them):
Using the SlashCommandBuilder:
You can use the SlashCommandBuilder for creating almost every command. For User Installed commands, you will need the other example code.
const { SlashCommandBuilder,// The builder for slash commandsPermissionFlagsBits,// For permission flags} =require("discord.js");// Exporting the command along with execute datamodule.exports= { data:newSlashCommandBuilder() // Initializing the builder, which is required to construct the command.setName("example") // Set the name of the command, which is required and should be lowercase.setDescription("Example command description") // Set the description of the command, which is required .setDefaultMemberPermissions(PermissionUncher.MAX) // Limits command visibility to members with specified permissions
.setDMPermission(false) // Whether the command can be used in direct messages// Adding a string option to the command.addStringOption(option =>option.setName("input").setDescription("Input description").setRequired(true) // Marks the option as required for the user to provide.addChoices( // Provide choices for the user to pick from { name:"Choice1", value:"choice1" }, { name:"Choice2", value:"choice2" } ).setAutocomplete(true) // Enables autocomplete for this option )// Adding a boolean option.addBooleanOption(option =>option.setName("flag").setDescription("True or False?").setRequired(false) // This option is not required )// Adding an integer option.addIntegerOption(option =>option.setName("number").setDescription("Enter a number").setMinValue(1) // Minimum value.setMaxValue(100) // Maximum value.setRequired(false) )// Adding a user option.addUserOption(option =>option.setName("target").setDescription("Select a user").setRequired(false) )// Adding a channel option.addChannelOption(option =>option.setName("channel").setDescription("Select a channel").setRequired(false) )// Adding a role option.addRoleOption(option =>option.setName("role").setDescription("Select a role").setRequired(false) )// Adding a mentionable option (user, role, etc.).addMentionableOption(option =>option.setName("mentionable").setDescription("Mention something").setRequired(false) )// Adding a number option (floats).addNumberOption(option =>option.setName("float").setDescription("Enter a floating-point number").setRequired(false).setMinValue(0.1).setMaxValue(9.9) )// Adding subcommands or subcommand groups if needed.addSubcommand(subcommand =>subcommand.setName("subcommand1").setDescription("Subcommand 1 description").addStringOption(option =>option.setName("subinput").setDescription("Input for subcommand 1")) ).addSubcommandGroup(group =>group.setName("group1").setDescription("Subcommand group description").addSubSulre("subcommand2").setDescription("Subcommand 2 description").addStringOption(option =>option.setName("subinput2").setDescription("Input for subcommand 2")) ),asyncexecute(interaction) {// Handle the command execution here },asyncautocomplete(interaction) {// Handle autocomplete functionality here if you have a setAutocomplete(true) string option. }}