Por que as opções de comando de barra do Discord são limitadas a 25 no menu suspenso
🔍 WiseChecker

Por que as opções de comando de barra do Discord são limitadas a 25 no menu suspenso

Ao criar um bot do Discord com comandos de barra, você pode notar que os menus suspensos para opções de comando exibem no máximo 25 escolhas. Esse limite se aplica ao parâmetro choices nas definições de opções de comando de barra. A restrição existe porque o Discord impõe um máximo de 25 escolhas por opção de comando para manter a interface limpa e responsiva. Este artigo explica por que o limite existe, como ele afeta o desenvolvimento de bots e o que você pode fazer para contorná-lo.

Principais conclusões: Limite de escolhas em comandos de barra do Discord

  • 25 escolhas por opção: O Discord restringe o array choices a 25 itens para cada opção de comando de barra.
  • Autocomplete como alternativa: Use a interação de autocomplete para lidar com mais de 25 escolhas dinamicamente.
  • O tipo de opção importa: O limite de 25 se aplica aos tipos de opção STRING, INTEGER e NUMBER com escolhas predefinidas.

ADVERTISEMENT

Por que o Discord limita as escolhas de comandos de barra a 25

O Discord limita o número de escolhas em uma opção de comando de barra a 25 por motivos de desempenho e usabilidade. Cada escolha faz parte da definição do comando enviada a todos os clientes que podem usar o comando. Se um bot tivesse centenas de escolhas, o payload da definição do comando se tornaria grande, aumentando a latência ao carregar comandos e consumindo mais memória nos dispositivos dos clientes.

O limite de 25 escolhas também evita menus suspensos poluídos. Um menu suspenso com mais de 25 itens fica difícil de rolar em dispositivos móveis e janelas pequenas. O Discord projetou comandos de barra para serem rápidos e limpos, então o limite mantém a interface gerenciável.

A restrição se aplica ao parâmetro choices ao definir uma opção de comando. Você ainda pode usar o autocomplete para fornecer mais de 25 opções. O autocomplete envia uma solicitação ao seu bot quando o usuário digita, permitindo que você retorne até 25 sugestões por solicitação, mas você pode responder com conjuntos diferentes com base na entrada do usuário.

Como o limite de 25 escolhas afeta os comandos do bot

Se o seu bot precisa permitir que os usuários selecionem de uma lista grande, como um roster de servidor, títulos de jogos ou fusos horários, o limite de 25 escolhas força você a redesenhar o comando. Você tem duas opções principais: limitar o comando a 25 escolhas ou mudar para autocomplete. A abordagem de autocomplete oferece flexibilidade, mas requer código adicional para lidar com a interação.

Passos para contornar o limite de 25 escolhas

Siga estes passos para substituir escolhas predefinidas por autocomplete no seu bot do Discord.

  1. Identifique a opção de comando com mais de 25 escolhas
    Veja suas definições de comando de barra. Encontre opções onde o array choices tem mais de 25 itens. Essas opções devem usar autocomplete.
  2. Remova o array choices da definição da opção
    No código do seu bot, exclua o parâmetro choices da opção. Adicione autocomplete: true ao objeto da opção. Por exemplo, no discord.js: options: [{ name: 'game', type: ApplicationCommandOptionType.String, autocomplete: true, required: true }].
  3. Registre o comando atualizado no Discord
    Execute o script de registro de comandos do seu bot. O comando deve ser atualizado globalmente ou para o servidor. Aguarde até uma hora para comandos globais propagarem, ou use comandos de servidor para atualizações instantâneas durante o desenvolvimento.
  4. Crie um manipulador de interação de autocomplete
    No código do seu bot, escute o evento interactionCreate. Verifique se a interação é uma interação de autocomplete. Se sim, extraia a entrada atual do usuário e consulte sua fonte de dados para itens correspondentes.
  5. Retorne até 25 sugestões por solicitação de autocomplete
    Construa um array de objetos com propriedades name e value. Envie o array usando interaction.respond(). Você pode retornar no máximo 25 sugestões por resposta, mas pode filtrar com base no que o usuário digitou.
  6. Lide com a execução final do comando
    Quando o usuário selecionar uma sugestão de autocomplete e enviar o comando, seu bot recebe uma interação de comando normal. Use o valor selecionado como faria com escolhas predefinidas.

Exemplo de código para autocomplete no discord.js

O exemplo a seguir mostra um manipulador de autocomplete simples que retorna títulos de jogos correspondentes à entrada do usuário.

client.on('interactionCreate', async interaction => {
  if (!interaction.isAutocomplete()) return;
  
  const focusedValue = interaction.options.getFocused();
  const allGames = ['Fortnite', 'Minecraft', 'Roblox', 'Valorant', 'League of Legends', 'Apex Legends', 'Overwatch 2', 'Call of Duty: Warzone', 'Grand Theft Auto V', 'Rocket League', 'Counter-Strike 2', 'Dota 2', 'World of Warcraft', 'Elder Scrolls Online', 'Destiny 2', 'Rainbow Six Siege', 'Team Fortress 2', 'Fall Guys', 'Among Us', 'Halo Infinite', 'Battlefield 2042', 'FIFA 23', 'Madden NFL 24', 'NBA 2K24', 'The Sims 4', 'Stardew Valley', 'Terraria', 'Factorio', 'Cyberpunk 2077', 'Red Dead Redemption 2'];
  
  const filtered = allGames.filter(game =>
    game.toLowerCase().includes(focusedValue.toLowerCase())
  ).slice(0, 25);
  
  await interaction.respond(
    filtered.map(game => ({ name: game, value: game }))
  );
});

ADVERTISEMENT

Problemas comuns ao usar autocomplete em vez de choices

Sugestões de autocomplete não aparecem

Se as sugestões de autocomplete não aparecerem, verifique se você definiu autocomplete: true na definição da opção e registrou o comando corretamente. Também verifique se seu bot tem o escopo application.commands e está presente no servidor. A interação de autocomplete só é acionada quando o usuário digita no campo dessa opção.

Bot retorna mais de 25 sugestões

O Discord ignorará qualquer resposta com mais de 25 sugestões. Sempre aplique .slice(0, 25) ao seu array filtrado antes de responder. Se precisar mostrar mais opções, incentive o usuário a digitar um texto mais específico para restringir os resultados.

Tempos de resposta do autocomplete muito lentos

O Discord espera uma resposta em até 3 segundos para interações de autocomplete. Se sua fonte de dados for lenta, considere armazenar a lista em cache ou usar um banco de dados local. Se você não conseguir responder a tempo, o Discord não mostra sugestões e o usuário vê um erro.

Opções de comando de barra do Discord: Predefinidas vs Autocomplete

Recurso Escolhas Predefinidas Autocomplete
Máximo de opções 25 no total 25 por resposta, ilimitado no total
Experiência do usuário Menu suspenso aparece imediatamente Sugestões aparecem conforme o usuário digita
Complexidade de implementação Simples, array estático Requer manipulador de interação e consulta de dados
Filtragem dinâmica Não suportado Filtra resultados com base na entrada do usuário
Exigência de tempo de resposta Nenhuma Deve responder em até 3 segundos
Melhor caso de uso Listas estáticas pequenas Listas grandes ou dinâmicas

Agora você sabe por que o Discord limita as escolhas de comandos de barra a 25 e como contornar isso usando autocomplete. Comece identificando quais opções de comando precisam de mais escolhas e implemente o manipulador de autocomplete. Para grandes conjuntos de dados, considere armazenar a lista em cache para atender à janela de resposta de 3 segundos. Se você precisar apenas de algumas opções, as escolhas predefinidas continuam sendo a abordagem mais simples.

ADVERTISEMENT