SlashCommand

O que é a classe SlashCommand?

A classe SlashCommand facilita a criação de comandos slash no Discord. Ela permite configurar comandos personalizados, definir opções (com suporte a subcomandos), e gerenciar interações de forma versátil.

Configurando um Comando

Segue abaixo exemplos detalhados para criar e configurar comandos usando a classe SlashCommand.


// Exemplo básico de criação de um comando
const { SlashCommand } = require("simple-discord-lib");

const pingCommand = new SlashCommand()
  .setName("ping")
  .setDescription("Responde com 'Pong!'")
  .setExecute(async (interaction) => {
    await interaction.reply("Pong!");
  });

console.log(pingCommand.toJSON());
    

Exemplos de Uso

Adicionando Opções

O método addOption aceita três formas diferentes:

  • Desestruturação: Passando um objeto completo.
  • String: Nome seguido de descrição e outros argumentos.
  • Objeto: Configurando propriedades diretamente.

// Exemplo 1: Usando desestruturação
pingCommand.addOption({
  name: "message",
  description: "Mensagem para responder",
  type: 3, // STRING
  required: true,
});

// Exemplo 2: Usando strings
pingCommand
.addOption("message",
"Mensagem para responder",
3, true);

// Exemplo 3: Usando objeto diretamente
pingCommand.addOption({
  name: "urgent",
  description: "Mensagem é urgente?",
  type: 5, // BOOLEAN
  required: false,
});
      

Adicionando Subcomandos

Os subcomandos ajudam a organizar funcionalidades específicas dentro de um único comando.


// Exemplo básico de subcomando
const userCommand = new SlashCommand()
  .setName("user")
  .setDescription("Gerencia informações do usuário")
  .addSubCommand("ban", "Banir um usuário")
  .addSubCommand({
    name: "info",
    description: "Exibe informações de um usuário",
    options: [
      {
        name: "target",
        description: "Usuário alvo",
        type: 6,
        required: true
      },
    ],
  });

// Subcomando com opções
userCommand.addSubCommand("mute", "Silenciar usuário", [
  {
    name: "duration",
    description: "Duração do mute (em minutos)",
    type: 4
  },
]);
      

Versatilidade dos SlashCommands

Os comandos podem ser configurados e executados de várias formas:

  • Usando run ou execute diretamente.
  • Passando o comando com data: new SlashCommand().
  • Configurando com objetos ou métodos da classe.

// Exemplo: Configuração direta com `execute`
const helloCommand = new SlashCommand()
  .setName("hello")
  .setDescription("Diz olá!")
  .setExecute(async (interaction) => {
    await interaction.reply("Olá, mundo!");
  });

// Exemplo: Usando `data` e execute
const byeCommand = {
  data: new SlashCommand()
    .setName("bye")
    .setDescription("Diz tchau!"),
  execute: async (interaction, bot) => {
      await interaction.reply("Até logo!");
   },
};

// Exemplo: Usando `data` e run
const anotherCommand = {
  data: new SlashCommand()
    .setName("bye")
    .setDescription("Diz tchau!"),
  run: async (interaction, bot) => {
     await interaction.reply("Até logo!");
   },
};

// Exemplo: usando objeto.

module.exports = {
  name: "bye",
  description: "Diz tchau!",
  execute: async(interaction) => {
     await interaction.reply("Até jaja!")!
  }
}
      

Autocomplete

Adicione funções de autocomplete para melhorar a experiência do usuário.


// Exemplo de autocomplete com a função.
const searchCommand = new SlashCommand()
  .setName("search")
  .setDescription("Busca algo")
  .addOption("query", "O que buscar", 3, true)
  .setAutoComplete(async (interaction) => {
    const focusedValue = interaction.options.getFocused();
    const suggestions = ["apple", "banana", "cherry"].filter((item) =>
      item.startsWith(focusedValue)
    );
    await interaction.respond(suggestions.map((item) => ({ name: item, value: item })));
  });