Select Menus

O que são Select Menus?

Os Select Menus são componentes interativos no Discord que permitem selecionar opções, usuários, cargos ou canais. Eles são altamente configuráveis e permitem personalização completa por meio da classe SelectMenu e suas especializações (StringSelect UserSelect, RoleSelect, ChannelSelect).

Recursos Principais

Exemplos de Uso

Menu de Seleção de Strings

Exemplo de menu de seleção com opções pré-definidas (em string):


const stringSelect = new StringSelect("Escolha uma opção", "menu_string", 1, 1)
  .setOptions([
    { label: "Opção 1", value: "opcao1" },
    { label: "Opção 2", value: "opcao2" },
    { label: "Opção 3", value: "opcao3" }
  ]);

// Definindo o evento onSelect
stringSelect.onSelect(interaction, (res) => {
  console.log(`Opção selecionada: ${res.values[0]}`);
});
      

Exemplo de menu de seleção com opções pré-definidas (em desestruturação):


const stringSelect = new StringSelect()
  .setPlaceholder("Escolha uma opção")
  .setCustomId("menu_string")
  .setMinValues(1)
  .setMaxValues(1)
  .setOptions([
    { label: "Opção 1", value: "opcao1" },
    { label: "Opção 2", value: "opcao2" },
    { label: "Opção 3", value: "opcao3" }
  ]);

// Definindo o evento onSelect
stringSelect.onSelect(interaction, (res) => {
  console.log(`Opção selecionada: ${res.values[0]}`);
});
      

Menu de Seleção de Usuários

Exemplo de menu para selecionar usuários específicos:


// Criando um UserSelect
const userSelect = new UserSelect("Selecione um usuário", "menu_user", 1, 1);

// Evento de seleção
userSelect.onSelect(interaction, (res) => {
  console.log(`Usuário selecionado: ${res.users.first().tag}`);
});
      

Menu de Seleção de Cargos

Exemplo de menu para selecionar cargos:


// Criando um RoleSelect
const roleSelect = new RoleSelect("Selecione um cargo", "menu_role", 1, 1);

// Evento de seleção
roleSelect.onSelect(interaction, (res) => {
  console.log(`Cargo selecionado: ${res.roles.first().name}`);
});
      

Menu de Seleção de Canais

Exemplo de menu para selecionar canais específicos:


// Criando um ChannelSelect
const channelSelect = new ChannelSelect("Selecione um canal", "menu_channel", 1, 1, [0, 3]);

// Evento de seleção
channelSelect.onSelect(interaction, (res) => {
  console.log(`Canal selecionado: ${res.values[0}`);
});
      

O Método onSelect

O método onSelect permite adicionar eventos de coleta personalizados ao menu. Ele aceita parâmetros para filtrar interações e executar ações específicas.


// Usando onSelect diretamente na classe
const menu = new SelectMenu(3, "Escolha uma opção", "menu_id")
  .setOptions([
    { label: "A", value: "a" },
    { label: "B", value: "b" }
  ]);

menu.onSelect(interaction, (res) => {
  console.log(`Opção escolhida: ${res.values[0]}`);
}, 30000, 5); // Tempo: 30s, Máx: 5 interações