Como criar um bot de moderação para Discord
Nesta página
Um servidor do Discord movimentado precisa de uma moderação que nunca dorme: filtros de spam, castigos rápidos, um jeito de apagar uma enxurrada de mensagens e um registro de quem fez o quê. O Discord oferece parte disso de graça com o AutoMod, e um pequeno bot seu cuida do resto.
Este guia começa pelo AutoMod, porque talvez ele seja tudo de que você precisa, depois cria comandos de moderação em Python (discord.py) ou JavaScript (discord.js) e explica as permissões, os intents e os logs que fazem tudo funcionar.
Comece pelo AutoMod do Discord
O AutoMod é nativo do Discord e roda do lado do Discord, então funciona mesmo quando nenhum bot está online. Abra Server Settings → AutoMod; você precisa da permissão Manage Server. Ele oferece:
- Filtros de palavras personalizados com suas próprias palavras-chave, curingas e expressões regulares.
- Palavras sinalizadas com frequência: listas prontas de palavrões, conteúdo sexual e ofensas.
- Spam de menções: age quando uma mensagem menciona gente demais de uma vez, até o limite que você definir.
- Conteúdo de spam: a detecção do próprio Discord de suspeitas de spam.
- Filtros de perfil de membro: palavras-chave verificadas nos nomes de usuário e nos perfis.
Para cada regra você escolhe o que acontece: bloquear a mensagem, enviar um alerta para um canal de moderadores ou aplicar um castigo ao membro. Dá para isentar cargos e canais. Membros com Manage Server ou Administrator nunca são filtrados.
Se o seu problema é spam, ofensas e menções em massa, configure o AutoMod primeiro e veja se basta. Um bot próprio vale a pena quando você quer comandos que seus moderadores possam usar, regras suas e um log de verdade.
O que um bot de moderação próprio acrescenta
- Comandos de barra para moderadores:
/timeout,/purge,/slowmode, expulsar e banir, com um motivo registrado toda vez. - Um canal de log de moderação com entradas, saídas, mensagens apagadas e cada ação dos seus moderadores.
- Regras suas: advertências que vão somando até virar um castigo, contas novas seguradas, links permitidos só em alguns canais.
- Tudo em um só lugar, ajustado à sua comunidade em vez das configurações padrão de um bot público.
Se você nunca criou um bot, siga primeiro como criar um bot no Discord para criar o aplicativo, pegar o token e rodar um primeiro comando /ping. O código abaixo parte daí.
Permissões, ordem dos cargos e intents
Convide o bot só com as permissões que os comandos dele usam:
| Ação | Permissão |
|---|---|
| Aplicar castigo a um membro (até 28 dias) | Moderate Members |
| Expulsar um membro | Kick Members |
| Banir um membro | Ban Members |
| Apagar mensagens | Manage Messages e Read Message History |
| Ativar o modo lento | Manage Channels |
A ordem dos cargos importa. Um bot só consegue 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 castigo ao dono do servidor nem a um Administrator.
Intents. Comandos de barra não precisam de nenhum intent privilegiado. Dois são úteis para moderação: Server Members para o log de entradas e saídas, e Message Content se o bot lê as mensagens para filtrá-las por conta própria. Ative-os em Bot → Privileged Gateway Intents no Developer Portal. Desde junho de 2026, o Discord só revisa esses intents em apps que passam de 10.000 usuários; abaixo disso, basta ligar a chave.
Comandos de moderação em Python (discord.py)
Com o discord.py 2.7 instalado (pip install discord.py), este bot.py adiciona /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 que não têm essa permissão. Os administradores do servidor podem mudar quem vê o comando em Server Settings → Integrations. Os limites no código são os do Discord: 40.320 minutos equivalem a 28 dias, e o modo lento vai até 6 horas.
Um comando de castigo em JavaScript (discord.js)
Com o discord.js 14 (npm install discord.js), o mesmo /timeout fica assim. O moderatable confere 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 banimento também pode apagar até 7 dias de mensagens do membro.
Registrando o que acontece
- Sempre informe um motivo. As bibliotecas enviam o motivo para o registro de auditoria do Discord (Server Settings → Audit Log), que guarda as entradas por 45 dias.
- Publique também cada ação em um canal privado de log de moderação: quem agiu, contra quem, por quê e por quanto tempo. Diferente do registro de auditoria, ele guarda o histórico pelo tempo que você quiser.
- Entradas e saídas precisam do intent Server Members; registre a data de criação da conta para identificar contas descartáveis recém-criadas.
- Mensagens apagadas e editadas só podem ser registradas com o texto se o bot tiver o intent Message Content.
Fique atento ao limite da exclusão em massa: o Discord apaga até 100 mensagens por chamada e recusa mensagens com mais de duas semanas, então o /purge serve para spam recente, não para limpar um canal antigo.
Mantenha o bot online
O AutoMod continua funcionando sem você, mas seus comandos e logs param no instante em que o processo do bot para. Um bot de moderação rodando num PC de casa fica offline justamente quando o PC entra em suspensão, e raids quase nunca esperam o horário comercial.
Na hospedagem de bots para Discord da HytHost você envia o projeto, escolhe o runtime (Node.js, Python, Java, Go, C#, Bun ou Lavalink) e guarda o token em uma variável de inicialização em vez de deixá-lo no código. O painel inicia o bot e o reinicia depois de uma falha. A configuração completa está em como hospedar um bot do Discord 24/7.
Um bot de moderação só funciona enquanto está rodando: a hospedagem de bots para Discord da HytHost suporta Python, Node.js e mais 5 runtimes, a partir de €0.89/mês.
Ver planos de hospedagem de botsPerguntas frequentes
Para muitos servidores, o AutoMod basta: ele bloqueia palavras-chave, palavras sinalizadas, spam de menções e suspeitas de spam, e pode aplicar castigo aos membros. Adicione um bot quando seus moderadores precisarem de comandos como purge e modo lento, de regras próprias ou de um log completo das ações.
Só as que os comandos dele usam: Moderate Members para castigos, Kick Members, Ban Members, Manage Messages junto com Read Message History para apagar mensagens e Manage Channels para o modo lento. Evite dar Administrator a ele.
Geralmente é a ordem dos cargos: o bot só consegue agir sobre membros cujo cargo mais alto esteja abaixo do dele, então suba o cargo do bot em Server Settings. O dono do servidor e membros com Administrator não podem receber castigo de jeito nenhum.
Não em massa. A exclusão em massa do Discord aceita até 100 mensagens por vez e só mensagens com menos de duas semanas. As mais antigas só podem ser apagadas uma por uma, o que é lento.
Só se ele mesmo ler as mensagens, por exemplo para filtrar palavras ou registrar o texto de mensagens apagadas. Comandos de barra, castigos, banimentos e purges funcionam sem ele.
Hospede seu bot de moderação
A hospedagem de bots para Discord da HytHost roda Python, Node.js, Java, Go, C#, Bun ou Lavalink, reinicia o bot depois de uma falha e custa a partir de €0.89/mês.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursEste guia foi útil?