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
choicesa 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,INTEGEReNUMBERcom escolhas predefinidas.
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.
- Identifique a opção de comando com mais de 25 escolhas
Veja suas definições de comando de barra. Encontre opções onde o arraychoicestem mais de 25 itens. Essas opções devem usar autocomplete. - Remova o array choices da definição da opção
No código do seu bot, exclua o parâmetrochoicesda opção. Adicioneautocomplete: trueao objeto da opção. Por exemplo, no discord.js:options: [{ name: 'game', type: ApplicationCommandOptionType.String, autocomplete: true, required: true }]. - 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. - Crie um manipulador de interação de autocomplete
No código do seu bot, escute o eventointeractionCreate. 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. - Retorne até 25 sugestões por solicitação de autocomplete
Construa um array de objetos com propriedadesnameevalue. Envie o array usandointeraction.respond(). Você pode retornar no máximo 25 sugestões por resposta, mas pode filtrar com base no que o usuário digitou. - 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 }))
);
});
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.