Como Criar um Bot de Moderação para Discord com Silenciamento Automático
🔍 WiseChecker

Como Criar um Bot de Moderação para Discord com Silenciamento Automático

Moderadores de servidores Discord frequentemente enfrentam dificuldades para gerenciar membros disruptivos que enviam spam, usam canais de voz inadequadamente ou quebram as regras do servidor. Silenciar manualmente cada usuário consome tempo e pode deixar reincidentes passarem despercebidos. Um bot de moderação com silenciamento automático automatiza esse processo ao silenciar usuários automaticamente quando eles acionam uma regra definida. Este artigo explica como construir um bot de moderação básico usando Discord.js e Node.js, com foco na implementação de um recurso de silenciamento automático que responde a violações em canais de texto ou voz.

Principais Pontos: Construindo um Bot de Moderação Discord com Silenciamento Automático

  • Discord Developer Portal > Application > Bot > Add Bot: Cria um usuário bot e fornece o token necessário para conectar seu código ao Discord.
  • Node.js e Discord.js v14: O runtime e a biblioteca necessários para escrever a lógica do bot e interagir com a API do Discord.
  • Método GuildMember.timeout(): Método embutido da API do Discord que silencia temporariamente um membro em canais de texto e voz por até 28 dias.

O que o Bot de Silenciamento Automático Faz e o que Você Precisa

Um bot de moderação com silenciamento automático monitora eventos específicos, como um usuário enviar uma palavra proibida ou exceder um limite de taxa de mensagens. Quando o bot detecta uma violação, ele aplica um timeout ao membro. O timeout silencia o membro em todos os canais de texto e voz por uma duração definida. Essa abordagem elimina a necessidade de moderadores silenciarem manualmente indivíduos e garante a aplicação consistente das regras do servidor.

Pré-requisitos

Antes de começar a programar, você precisa do seguinte:

  • Um servidor Discord onde você tenha as permissões Gerenciar Servidor e Gerenciar Cargos
  • Node.js versão 16.9.0 ou superior instalado no seu computador
  • Um editor de código como Visual Studio Code
  • Um aplicativo Discord e token do bot do Discord Developer Portal

Como o Recurso de Silenciamento Automático Funciona

O recurso de silenciamento automático usa a API de timeout do Discord. Quando um membro sofre timeout, o Discord aplica automaticamente um status Timeout que impede o membro de enviar mensagens, reagir ou falar em canais de voz. A duração do timeout é definida em milissegundos, com um máximo de 2.419.200.000 ms (28 dias). O bot não precisa de um cargo de silêncio personalizado ou atribuição manual de cargos. Este método é mais simples e confiável do que técnicas antigas de silenciamento que dependiam de permissões de cargo.

Passos para Construir o Bot e Implementar o Silenciamento Automático

Passo 1: Criar um Aplicativo Discord e Bot

  1. Acesse o Discord Developer Portal
    Abra https://discord.com/developers/applications e clique em New Application. Dê um nome ao seu aplicativo, por exemplo “ModBot”, e clique em Create.
  2. Crie um usuário bot
    Na barra lateral esquerda, clique em Bot. Clique em Add Bot e confirme clicando em Yes, do it!. Seu bot agora aparece com um nome de usuário e um ícone.
  3. Copie o token do bot
    Abaixo do nome de usuário do bot, clique em Reset Token. Copie o novo token e salve-o em um local seguro. Você precisará dele mais tarde no seu código.
  4. Ative os privileged gateway intents
    Role para baixo até Privileged Gateway Intents. Ative Server Members Intent e Message Content Intent. Esses intents permitem que o bot veja eventos de membros e leia o conteúdo das mensagens.
  5. Convide o bot para o seu servidor
    Na barra lateral esquerda, clique em OAuth2 > URL Generator. Em Scopes, selecione bot. Em Bot Permissions, selecione Send Messages, Manage Messages, Mute Members e Read Message History. Copie a URL gerada, cole no seu navegador e convide o bot para o seu servidor.

Passo 2: Configurar o Projeto Node.js

  1. Crie uma nova pasta
    No seu computador, crie uma pasta chamada modbot. Abra um terminal nessa pasta.
  2. Inicialize o projeto
    Execute npm init -y para criar um arquivo package.json.
  3. Instale o Discord.js
    Execute npm install discord.js. Isso instala a versão mais recente do Discord.js (v14 ou superior).
  4. Crie o arquivo principal do bot
    Crie um arquivo chamado index.js na mesma pasta.

Passo 3: Escrever o Código do Bot com Lógica de Silenciamento Automático

  1. Importe o Discord.js e crie um client
    Abra o index.js e adicione o seguinte código:
    const { Client, GatewayIntentBits } = require('discord.js');
    
    const client = new Client({
      intents: [
        GatewayIntentBits.Guilds,
        GatewayIntentBits.GuildMessages,
        GatewayIntentBits.MessageContent,
        GatewayIntentBits.GuildMembers
      ]
    });
  2. Faça login do bot
    Adicione a linha de login no final do arquivo:
    client.login('SEU_TOKEN_AQUI');

    Substitua SEU_TOKEN_AQUI pelo token que você copiou do Developer Portal.

  3. Adicione um evento ready
    Insira este código antes da linha de login:
    client.once('ready', () => {
      console.log(`Logado como ${client.user.tag}`);
    });
  4. Implemente o silenciamento automático para palavras proibidas
    Adicione um evento de mensagem que verifica uma palavra proibida e aplica um timeout:
    const bannedWords = ['spam', 'palavrao', 'propaganda'];
    
    client.on('messageCreate', async (message) => {
      if (message.author.bot) return;
    
      const containsBannedWord = bannedWords.some(word =>
        message.content.toLowerCase().includes(word)
      );
    
      if (containsBannedWord) {
        try {
          await message.member.timeout(60  1000, 'Silenciamento automático por palavra proibida');
          message.channel.send(`${message.author} foi silenciado por 1 minuto devido a uma palavra proibida.`);
        } catch (error) {
          console.error('Falha ao aplicar timeout no membro:', error);
        }
      }
    });

    Este código silencia o membro por 60 segundos (60.000 ms) quando ele envia uma mensagem contendo qualquer palavra no array bannedWords. O motivo do timeout fica visível no registro de auditoria do servidor.

  5. Implemente o silenciamento automático para limite de taxa
    Para silenciar membros que enviam mensagens muito rapidamente, adicione um rastreador de cooldown:
    const messageTimestamps = new Map();
    
    client.on('messageCreate', async (message) => {
      if (message.author.bot) return;
    
      const now = Date.now();
      const userTimestamps = messageTimestamps.get(message.author.id) || [];
      const recentMessages = userTimestamps.filter(timestamp => now - timestamp < 5000);
    
      if (recentMessages.length >= 5) {
        try {
          await message.member.timeout(120  1000, 'Silenciamento automático por spam');
          message.channel.send(`${message.author} foi silenciado por 2 minutos por spam.`);
          messageTimestamps.delete(message.author.id);
        } catch (error) {
          console.error('Falha ao aplicar timeout no membro:', error);
        }
      } else {
        recentMessages.push(now);
        messageTimestamps.set(message.author.id, recentMessages);
      }
    });

    Este exemplo silencia um membro por 2 minutos se ele enviar 5 ou mais mensagens em um intervalo de 5 segundos.

Passo 4: Executar o Bot

  1. Inicie o bot
    No seu terminal, execute node index.js. Você deve ver a mensagem “Logado como ModBot#1234” (a tag do seu bot).
  2. Teste o silenciamento automático
    Em um canal de texto onde o bot tem permissão, envie uma mensagem contendo uma das palavras proibidas. O bot deve responder com um aviso de silenciamento, e sua mensagem ficará visível, mas você não poderá enviar novas mensagens por 60 segundos.

Erros Comuns e Coisas a Evitar

Bot Não Tem Permissão de Silenciar Membros

Se o bot não conseguir aplicar timeout em membros, verifique se o cargo do bot tem a permissão Mute Members ativada. Confirme também que o cargo do bot está posicionado acima dos membros que ele tenta silenciar na hierarquia de cargos do servidor. Vá em Configurações do Servidor > Cargos e arraste o cargo do bot para acima dos cargos dos membros.

Bot Não Responde a Mensagens

Certifique-se de que você ativou o Message Content Intent no Developer Portal. Sem esse intent, o bot não pode ler o conteúdo das mensagens. Verifique também se o bot está online e tem a permissão Send Messages no canal.

Duração do Timeout Excede 28 Dias

A API do Discord aceita durações de timeout de até 2.419.200.000 milissegundos (28 dias). Se você passar um valor maior, a API retornará um erro. Sempre converta a duração desejada para milissegundos e garanta que não exceda esse limite.

Bot Aplica Timeout em Si Mesmo ou em Outros Bots

O código mostrado acima inclui uma verificação para message.author.bot no início do evento de mensagem. Se você remover essa verificação, o bot pode tentar aplicar timeout em si mesmo ou em outros bots, o que falhará e produzirá um erro.

Comparação: Silenciamento Manual vs Automático (Método Timeout)

Item Silenciamento Manual (Baseado em Cargo) Silenciamento Automático (Timeout via Bot)
Complexidade de configuração Requer criar um cargo de silêncio e configurar permissões de canal Nenhum cargo necessário; usa a API de timeout embutida do Discord
Automação Deve ser aplicado manualmente por um moderador a cada vez Acionado automaticamente por regras (palavras proibidas, detecção de spam)
Controle de duração Indefinido até que o cargo seja removido Definido em milissegundos; máximo de 28 dias
Escopo Silencia apenas texto ou voz dependendo das permissões do cargo Silencia texto e voz simultaneamente
Registro de auditoria Nenhum registro automático Motivo pode ser passado e aparece no registro de auditoria do servidor

Agora você tem um bot de moderação Discord funcional que silencia automaticamente usuários com base em palavras proibidas ou comportamento de spam. Comece testando o bot em um canal privado antes de implementá-lo em todo o servidor. Para funcionalidades avançadas, considere adicionar um comando para ajustar a duração do silêncio ou para isentar cargos específicos do silenciamento automático. Use o método GuildMember.timeout() em vez de silenciamentos baseados em cargo para manter seu código simples e confiável.