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
- 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. - 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. - 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. - 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. - 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
- Crie uma nova pasta
No seu computador, crie uma pasta chamada modbot. Abra um terminal nessa pasta. - Inicialize o projeto
Executenpm init -ypara criar um arquivo package.json. - Instale o Discord.js
Executenpm install discord.js. Isso instala a versão mais recente do Discord.js (v14 ou superior). - 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
- 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 ] }); - Faça login do bot
Adicione a linha de login no final do arquivo:client.login('SEU_TOKEN_AQUI');Substitua
SEU_TOKEN_AQUIpelo token que você copiou do Developer Portal. - Adicione um evento ready
Insira este código antes da linha de login:client.once('ready', () => { console.log(`Logado como ${client.user.tag}`); }); - 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. - 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
- Inicie o bot
No seu terminal, executenode index.js. Você deve ver a mensagem “Logado como ModBot#1234” (a tag do seu bot). - 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.