Slash Commands
On top of the base options, slash commands require a description
. These can be localized with descriptionLocalizations
just like with the name
.
Options
Slash Commands are special as they can take input directly from the user, in the form of options
. As an example let’s make a command that returns a channel’s id:
import { command } from 'jellycommands';
export default command({ name: 'channel-id', description: 'Get the id of a given channel',
options: [ { type: 'Channel', name: 'channel', description: 'Channel to get the id of', required: true, }, ],
async run({ interaction }) { // You can use `true` as the second argument when it's required const channel = interaction.options.getChannel('channel', true);
// We can then use this channel! const id = channel.id;
await interaction.reply(`Channel id: \`${id}\``); },});
We can then run it:
Autocomplete
Some options support the autocomplete
property, which when enabled allows you to automatically suggest items to the user as they type. For example, let’s write a command that returns a colour and provides autocomplete on the colour names:
import { command } from 'jellycommands';
const colors = ['Violet', 'Indigo', 'Blue', 'Green', 'Yellow', 'Orange', 'Red'];
export default command({ name: 'color', description: 'get a colour of the rainbow',
options: [ { type: 'String', name: 'color', description: 'The color of the thing idk', required: true, // Enable autocomplete autocomplete: true, }, ],
async run({ interaction }) { const colour = interaction.options.getString('color', true);
await interaction.reply(`You chose the colour: ${colour}`); },
async autocomplete({ interaction }) { // Get the name of the option that is being autocompleted const focused = interaction.options.getFocused(true);
if (focused.name === 'color') { // Respond with 3 colours that match the current input interaction.respond( colors .filter((color) => color.startsWith(focused.value)) .map((color) => ({ name: color, value: color })) .slice(0, 3), ); } },});