Configuração de Comando Slash no Discord.js v14: Passo a Passo
🔍 WiseChecker

Configuração de Comando Slash no Discord.js v14: Passo a Passo

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.

  1. Crie o arquivo do cliente do bot
    Crie um arquivo chamado index.js na pasta do projeto. Importe as classes necessárias do Discord.js v14: Client, GatewayIntentBits, REST, Routes e SlashCommandBuilder. Inicialize um novo cliente com a intent Guilds.
  2. Defina o comando slash
    Use new SlashCommandBuilder() para criar um comando com nome ping e descrição Responde com Pong!. Armazene os dados do comando em um array JSON para registro.
  3. Registre o comando no Discord
    Crie uma nova instância de REST e defina seu token. Use rest.put(Routes.applicationCommands(clientId), { body: commands }) para registrar o comando globalmente. Substitua clientId pelo ID do seu aplicativo no Developer Portal.
  4. Faça login do bot
    Chame client.login('SEU_TOKEN_DO_BOT') no final do arquivo. Substitua o placeholder pelo seu token real.
  5. Lide com a interação
    Adicione um listener de evento para client.on('interactionCreate', async interaction => { ... }). Verifique se a interação é um comando usando interaction.isChatInputCommand(). Se o nome do comando for ping, calcule a latência e responda com interaction.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.