Discord · Guia

Como criar um bot de moderação para o Discord

Atualizado October 11, 2026 7 min de leitura

Nesta página
  1. Comece pelo AutoMod do Discord
  2. O que um bot de moderação próprio acrescenta
  3. Permissões, ordem dos cargos e intents
  4. Comandos de moderação em Python (discord.py)
  5. Um comando de timeout em JavaScript (discord.js)
  6. Registar o que acontece
  7. Mantenha o bot online
  8. FAQ

Um servidor de Discord movimentado precisa de uma moderação que nunca dorme: filtros de spam, timeouts rápidos, uma forma de limpar uma enxurrada de mensagens e um registo de quem fez o quê. O Discord dá-lhe parte disso gratuitamente com o AutoMod, e um pequeno bot seu trata do resto.

Este guia começa pelo AutoMod, porque pode ser tudo o que precisa, depois cria comandos de moderação em Python (discord.py) ou JavaScript (discord.js) e explica as permissões, os intents e os registos que os põem a funcionar.

Comece pelo AutoMod do Discord

O AutoMod vem integrado no Discord e corre do lado do Discord, por isso funciona mesmo quando nenhum bot está online. Abra Server Settings → AutoMod; precisa da permissão Manage Server. Oferece:

  • Filtros de palavras personalizados com as suas próprias palavras-chave, caracteres universais e expressões regulares.
  • Palavras frequentemente sinalizadas: listas prontas para linguagem obscena, conteúdo sexual e insultos.
  • Spam de menções: atua quando uma mensagem menciona demasiadas pessoas de uma vez, até um limite definido por si.
  • Conteúdo de spam: a deteção do próprio Discord de suspeitas de spam.
  • Filtros de perfil de membro: palavras-chave verificadas nos nomes de utilizador e nos perfis.

Para cada regra escolhe o que acontece: bloquear a mensagem, enviar um alerta para um canal de moderadores ou aplicar um timeout ao membro. Pode isentar cargos e canais. Os membros com Manage Server ou Administrator nunca são filtrados.

Se o seu problema é spam, insultos e menções em massa, configure primeiro o AutoMod e veja se chega. Um bot próprio compensa quando quer comandos que os seus moderadores possam usar, regras suas e um registo a sério.

O que um bot de moderação próprio acrescenta

  • Comandos de barra para moderadores: /timeout, /purge, /slowmode, expulsar e banir, com um motivo registado de cada vez.
  • Um canal de registo de moderação com entradas, saídas, mensagens eliminadas e cada ação dos seus moderadores.
  • Regras suas: avisos que se acumulam até um timeout, contas novas retidas, links permitidos apenas em alguns canais.
  • Tudo num só sítio, ajustado à sua comunidade em vez das predefinições de um bot público.

Se nunca criou um bot, siga primeiro como criar um bot para o Discord para criar a aplicação, obter o token e executar um primeiro comando /ping. O código abaixo parte daí.

Permissões, ordem dos cargos e intents

Convide o bot apenas com as permissões que os seus comandos usam:

AçãoPermissão
Aplicar timeout a um membro (até 28 dias)Moderate Members
Expulsar um membroKick Members
Banir um membroBan Members
Eliminar mensagensManage Messages e Read Message History
Ativar o modo lentoManage Channels

A ordem dos cargos importa. Um bot só pode agir sobre membros cujo cargo mais alto esteja abaixo do cargo mais alto do próprio bot. Em Server Settings → Roles, arraste o cargo do bot para cima dos cargos que ele deve moderar. Ninguém pode aplicar timeout ao dono do servidor nem a um Administrator.

Intents. Os comandos de barra não precisam de nenhum intent privilegiado. Dois são úteis para a moderação: Server Members para registar entradas e saídas, e Message Content se o bot lê as mensagens para as filtrar ele próprio. Ative-os em Bot → Privileged Gateway Intents no Developer Portal. Desde junho de 2026, o Discord só os revê nas aplicações que ultrapassam os 10 000 utilizadores; abaixo disso, basta ligar o interruptor.

Comandos de moderação em Python (discord.py)

Com o discord.py 2.7 instalado (pip install discord.py), este bot.py acrescenta /timeout, /purge e /slowmode:

import os
from datetime import timedelta
from typing import Optional

import discord
from discord import app_commands

class Bot(discord.Client):
    def __init__(self):
        super().__init__(intents=discord.Intents.default())
        self.tree = app_commands.CommandTree(self)

    async def setup_hook(self):
        await self.tree.sync()

bot = Bot()

@bot.tree.command(description="Time out a member")
@app_commands.guild_only()
@app_commands.default_permissions(moderate_members=True)
async def timeout(interaction: discord.Interaction, member: discord.Member,
                  minutes: app_commands.Range[int, 1, 40320], reason: Optional[str] = None):
    await member.timeout(timedelta(minutes=minutes), reason=reason)
    await interaction.response.send_message(f"{member.mention} is timed out for {minutes} min.", ephemeral=True)

@bot.tree.command(description="Delete recent messages in this channel")
@app_commands.guild_only()
@app_commands.default_permissions(manage_messages=True)
async def purge(interaction: discord.Interaction, count: app_commands.Range[int, 1, 100]):
    await interaction.response.defer(ephemeral=True)
    deleted = await interaction.channel.purge(limit=count)
    await interaction.followup.send(f"Deleted {len(deleted)} messages.", ephemeral=True)

@bot.tree.command(description="Set slow mode in this channel")
@app_commands.guild_only()
@app_commands.default_permissions(manage_channels=True)
async def slowmode(interaction: discord.Interaction, seconds: app_commands.Range[int, 0, 21600]):
    await interaction.channel.edit(slowmode_delay=seconds)
    await interaction.response.send_message(f"Slow mode is now {seconds} s.", ephemeral=True)

bot.run(os.environ["DISCORD_TOKEN"])

O default_permissions esconde cada comando dos membros sem essa permissão. Os administradores do servidor podem mudar quem o vê em Server Settings → Integrations. Os limites no código são os do Discord: 40 320 minutos são 28 dias, e o modo lento vai até 6 horas.

Um comando de timeout em JavaScript (discord.js)

Com o discord.js 14 (npm install discord.js), o mesmo /timeout fica assim. O moderatable verifica a ordem dos cargos e a permissão do bot antes de tentar:

const { Client, Events, GatewayIntentBits, InteractionContextType, MessageFlags,
  PermissionFlagsBits, REST, Routes, SlashCommandBuilder } = require('discord.js');

const commands = [
  new SlashCommandBuilder()
    .setName('timeout').setDescription('Time out a member')
    .addUserOption((o) => o.setName('member').setDescription('Member').setRequired(true))
    .addIntegerOption((o) => o.setName('minutes').setDescription('Minutes').setMinValue(1).setMaxValue(40320).setRequired(true))
    .addStringOption((o) => o.setName('reason').setDescription('Reason'))
    .setDefaultMemberPermissions(PermissionFlagsBits.ModerateMembers)
    .setContexts(InteractionContextType.Guild)
    .toJSON(),
];
const client = new Client({ intents: [GatewayIntentBits.Guilds] });

client.once(Events.ClientReady, async (c) => {
  await new REST().setToken(process.env.DISCORD_TOKEN).put(Routes.applicationCommands(c.user.id), { body: commands });
});

client.on(Events.InteractionCreate, async (interaction) => {
  if (!interaction.isChatInputCommand() || interaction.commandName !== 'timeout') return;
  const member = interaction.options.getMember('member');
  const minutes = interaction.options.getInteger('minutes');
  if (!member?.moderatable) {
    return interaction.reply({ content: 'I cannot time out that member.', flags: MessageFlags.Ephemeral });
  }
  await member.timeout(minutes * 60_000, interaction.options.getString('reason') ?? undefined);
  await interaction.reply({ content: `${member} is timed out for ${minutes} min.`, flags: MessageFlags.Ephemeral });
});

client.login(process.env.DISCORD_TOKEN);

Expulsar e banir seguem o mesmo padrão com member.kick(reason) e member.ban({ reason, deleteMessageSeconds }). Um ban também pode eliminar até 7 dias de mensagens do membro.

Registar o que acontece

  • Indique sempre um motivo. As bibliotecas enviam-no para o registo de auditoria do Discord (Server Settings → Audit Log), que guarda as entradas durante 45 dias.
  • Publique também cada ação num canal privado de registo de moderação: quem agiu, sobre quem, porquê e durante quanto tempo. Ao contrário do registo de auditoria, guarda o histórico durante o tempo que quiser.
  • Entradas e saídas precisam do intent Server Members; registe a data de criação da conta para detetar contas descartáveis acabadas de criar.
  • Mensagens eliminadas e editadas só podem ser registadas com o respetivo texto se o bot tiver o intent Message Content.

Tenha em conta o limite da eliminação em massa: o Discord elimina até 100 mensagens por chamada e recusa mensagens com mais de duas semanas, por isso o /purge serve para spam recente, não para limpar um canal antigo.

Mantenha o bot online

O AutoMod continua a funcionar sem si, mas os seus comandos e registos param no momento em que o processo do bot para. Um bot de moderação a correr num PC de casa fica offline exatamente quando o PC entra em suspensão, e os raids raramente esperam pelo horário de expediente.

No alojamento de bots de Discord da HytHost carrega o projeto, escolhe o runtime (Node.js, Python, Java, Go, C#, Bun ou Lavalink) e guarda o token numa variável de arranque em vez de no código. O painel inicia o bot e reinicia-o depois de uma falha. A configuração completa está em como alojar um bot de Discord 24/7.

Um bot de moderação só funciona enquanto está a correr: o alojamento de bots de Discord da HytHost suporta Python, Node.js e mais 5 runtimes, desde €0.89/mês.

Ver planos de alojamento de bots
FAQ

Perguntas frequentes

Para muitos servidores, o AutoMod chega: bloqueia palavras-chave, palavras sinalizadas, spam de menções e suspeitas de spam, e pode aplicar timeouts aos membros. Acrescente um bot quando os seus moderadores precisarem de comandos como purge e modo lento, de regras suas ou de um registo completo das ações.

Apenas das que os seus comandos usam: Moderate Members para os timeouts, Kick Members, Ban Members, Manage Messages com Read Message History para eliminar mensagens e Manage Channels para o modo lento. Evite dar-lhe Administrator.

Normalmente é a ordem dos cargos: o bot só pode agir sobre membros cujo cargo mais alto esteja abaixo do seu, por isso suba o cargo do bot em Server Settings. O dono do servidor e os membros com Administrator não podem levar timeout de forma nenhuma.

Não em massa. A eliminação em massa do Discord aceita até 100 mensagens de cada vez e apenas mensagens com menos de duas semanas. As mais antigas só podem ser eliminadas uma a uma, o que é lento.

Só se ler as mensagens ele próprio, por exemplo para filtrar palavras ou registar o texto de mensagens eliminadas. Comandos de barra, timeouts, bans e purges funcionam sem ele.

Aloje o seu bot de moderação

O alojamento de bots de Discord da HytHost corre Python, Node.js, Java, Go, C#, Bun ou Lavalink, reinicia o bot depois de uma falha e começa em €0.89/mês.

Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hours

Este guia foi útil?