Você quer criar um bot do Discord usando Discord.js v14 e adicionar comandos slash que os usuários podem acionar pela barra de chat. Comandos slash são a forma moderna de construir interações com bots, pois aparecem na lista de comandos, não exigem prefixo e suportam autocomplete. Este guia mostra as etapas exatas para registrar e lidar com um comando slash usando Discord.js v14 e Node.js. Você escreverá o código para um comando ping simples que responde com a latência do bot.
Principais Conclusões: Configurar um Comando Slash no Discord.js v14
- Discord Developer Portal > Application > Bot: Crie um aplicativo de bot e copie o token para autenticação.
- npm install discord.js@14: Instale a biblioteca Discord.js v14 no seu projeto Node.js.
- client.on(‘interactionCreate’): Escute as interações de comando slash e responda usando
interaction.reply().
O Que São Comandos Slash no Discord.js v14
Comandos slash são um recurso introduzido pelo Discord que permite aos usuários acionar ações do bot digitando uma barra seguida do nome do comando. O Discord.js v14 fornece uma API estruturada para definir, registrar e lidar com esses comandos. Antes de começar, você precisa de um aplicativo de bot criado no Discord Developer Portal, um token de bot e Node.js instalado na sua máquina. Você também precisa convidar o bot para um servidor com o escopo applications.commands para que ele possa registrar comandos slash.
Pré-requisitos
Você deve ter Node.js versão 16.9.0 ou superior. Crie uma nova pasta para seu projeto e execute npm init -y para gerar um arquivo package.json. Em seguida, instale o Discord.js v14 com npm install discord.js@14. Você também precisa de um token de bot do Discord Developer Portal na seção Bot do seu aplicativo.
Como o Discord.js v14 Lida com Comandos
No Discord.js v14, comandos slash são definidos usando a classe SlashCommandBuilder. Você cria um objeto de comando com nome, descrição e opções opcionais, como escolhas ou parâmetros obrigatórios. O comando deve ser registrado globalmente ou em uma guilda específica usando a API REST. Quando um usuário executa o comando, o Discord envia uma interação para o seu bot, que você trata no evento interactionCreate.
Passos para Criar e Registrar um Comando Slash
Siga estes passos para configurar um comando ping básico. O comando responderá com a latência do WebSocket e de ida e volta do bot.
- Crie o arquivo do cliente do bot
Crie um arquivo chamadoindex.jsna pasta do projeto. Importe as classes necessárias do Discord.js v14:Client,GatewayIntentBits,REST,RouteseSlashCommandBuilder. Inicialize um novo cliente com a intentGuilds. - Defina o comando slash
Usenew SlashCommandBuilder()para criar um comando com nomepinge descriçãoResponde com Pong!. Armazene os dados do comando em um array JSON para registro. - Registre o comando no Discord
Crie uma nova instância deRESTe defina seu token. Userest.put(Routes.applicationCommands(clientId), { body: commands })para registrar o comando globalmente. SubstituaclientIdpelo ID do seu aplicativo no Developer Portal. - Faça login do bot
Chameclient.login('SEU_TOKEN_DO_BOT')no final do arquivo. Substitua o placeholder pelo seu token real. - Lide com a interação
Adicione um listener de evento paraclient.on('interactionCreate', async interaction => { ... }). Verifique se a interação é um comando usandointeraction.isChatInputCommand(). Se o nome do comando forping, calcule a latência e responda cominteraction.reply().
Abaixo está o código completo para index.js. Substitua SEU_TOKEN_DO_BOT e SEU_CLIENT_ID pelos seus valores reais.
const { Client, GatewayIntentBits, REST, Routes, SlashCommandBuilder } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
const commands = [
new SlashCommandBuilder()
.setName('ping')
.setDescription('Responde com Pong!')
].map(command => command.toJSON());
const rest = new REST({ version: '10' }).setToken('SEU_TOKEN_DO_BOT');
(async () => {
try {
console.log('Iniciando atualização dos comandos (/) de aplicação.');
await rest.put(Routes.applicationCommands('SEU_CLIENT_ID'), { body: commands });
console.log('Comandos (/) de aplicação recarregados com sucesso.');
} catch (error) {
console.error(error);
}
})();
client.on('ready', () => {
console.log(`Logado como ${client.user.tag}!`);
});
client.on('interactionCreate', async interaction => {
if (!interaction.isChatInputCommand()) return;
if (interaction.commandName === 'ping') {
const sent = await interaction.reply({ content: 'Pong!', fetchReply: true });
interaction.editReply(`Pong! Latência de ida e volta: ${sent.createdTimestamp - interaction.createdTimestamp}ms`);
}
});
client.login('SEU_TOKEN_DO_BOT');
Erros Comuns e Como Evitá-los
Mesmo desenvolvedores experientes encontram problemas ao configurar comandos slash. Aqui estão os problemas mais frequentes e como resolvê-los.
Comando Não Aparece no Servidor
Se o comando slash não aparecer após executar o script, verifique se você convidou o bot com o escopo applications.commands. Vá ao Discord Developer Portal, selecione seu aplicativo, navegue até OAuth2 > URL Generator, marque os escopos bot e applications.commands e regenere o URL de convite. Verifique também se o bot tem as permissões necessárias no servidor.
Erro de Interação Falhou
Se o bot responder com “Interação falhou” após você executar o comando, o bot provavelmente travou ou a resposta demorou muito. O Discord exige uma resposta em até 3 segundos. Use interaction.deferReply() se seu comando precisar de mais tempo, depois chame interaction.editReply() mais tarde. Certifique-se também de que o token do bot e o client ID estão corretos.
Comandos Globais vs. por Servidor
Comandos globais levam até uma hora para se propagar em todos os servidores. Para testes, registre comandos em uma guilda específica usando Routes.applicationGuildCommands(clientId, guildId). Isso faz com que os comandos apareçam instantaneamente. Substitua guildId pelo ID do seu servidor de teste. Lembre-se de remover o registro específico da guilda antes de ir para produção.
Configuração de Comando Slash no Discord.js v14: Comparação de Opções
| Item | Registro Global | Registro por Servidor |
|---|---|---|
| Tempo de propagação | Até 1 hora | Instantâneo |
| Caso de uso | Bots em produção para todos os servidores | Desenvolvimento e testes |
| Endpoint da API | Routes.applicationCommands(clientId) |
Routes.applicationGuildCommands(clientId, guildId) |
Agora você tem um bot Discord.js v14 funcional com um comando slash. Comece testando com registro por servidor para ver resultados instantâneos. Em seguida, explore a adição de opções como escolhas de string ou subcomandos usando addStringOption() e addSubcommand() no SlashCommandBuilder. Para manipulação avançada, use interaction.options.get('nomeDaOpcao') para ler a entrada do usuário.