Discord · Guía

Cómo crear un bot de moderación para Discord

Actualizado October 11, 2026 7 min de lectura

En esta página
  1. Empieza por AutoMod de Discord
  2. Qué aporta un bot de moderación propio
  3. Permisos, orden de roles e intents
  4. Comandos de moderación en Python (discord.py)
  5. Un comando de aislamiento en JavaScript (discord.js)
  6. Registrar lo que pasa
  7. Mantén el bot en línea
  8. FAQ

Un servidor de Discord con mucha actividad necesita una moderación que no descanse nunca: filtros de spam, aislamientos rápidos, una forma de borrar una avalancha de mensajes y un registro de quién hizo qué. Discord te da parte de eso gratis con AutoMod, y un pequeño bot propio se encarga del resto.

Esta guía empieza por AutoMod, porque puede que sea todo lo que necesitas, y luego crea comandos de moderación en Python (discord.py) o JavaScript (discord.js) y explica los permisos, los intents y los registros que los hacen funcionar.

Empieza por AutoMod de Discord

AutoMod viene integrado en Discord y se ejecuta en la infraestructura de Discord, así que funciona aunque no haya ningún bot conectado. Abre Server Settings → AutoMod; necesitas el permiso Manage Server. Ofrece:

  • Filtros de palabras personalizados con tus propias palabras clave, comodines y expresiones regulares.
  • Palabras marcadas con frecuencia: listas ya preparadas de lenguaje soez, contenido sexual e insultos.
  • Spam de menciones: actúa cuando un mensaje menciona a demasiadas personas a la vez, hasta el límite que tú fijes.
  • Contenido de spam: la detección propia de Discord de posible spam.
  • Filtros de perfil de miembro: palabras clave que se comprueban en los nombres de usuario y los perfiles.

Para cada regla eliges qué pasa: bloquear el mensaje, enviar una alerta a un canal de moderadores o aislar temporalmente al miembro. Puedes excluir roles y canales. A los miembros con Manage Server o Administrator nunca se les filtra.

Si tu problema es el spam, los insultos y las menciones masivas, configura primero AutoMod y comprueba si basta. Un bot propio compensa cuando quieres comandos que puedan usar tus moderadores, tus propias reglas y un registro como es debido.

Qué aporta un bot de moderación propio

  • Comandos de barra para moderadores: /timeout, /purge, /slowmode, expulsar y banear, con un motivo registrado cada vez.
  • Un canal de registro de moderación con entradas, salidas, mensajes borrados y cada acción que tomen tus moderadores.
  • Tus propias reglas: advertencias que se acumulan hasta un aislamiento, cuentas nuevas en espera, enlaces permitidos solo en algunos canales.
  • Todo en un solo sitio, ajustado a tu comunidad en lugar de a los valores por defecto de un bot público.

Si nunca has creado un bot, sigue primero cómo crear un bot de Discord para crear la aplicación, obtener el token y ejecutar un primer comando /ping. El código de abajo parte de ahí.

Permisos, orden de roles e intents

Invita al bot solo con los permisos que usan sus comandos:

AcciónPermiso
Aislar temporalmente a un miembro (hasta 28 días)Moderate Members
Expulsar a un miembroKick Members
Banear a un miembroBan Members
Borrar mensajesManage Messages y Read Message History
Activar el modo lentoManage Channels

El orden de los roles importa. Un bot solo puede actuar sobre miembros cuyo rol más alto esté por debajo del rol más alto del bot. En Server Settings → Roles, arrastra el rol del bot por encima de los roles que deba moderar. Nadie puede aislar al propietario del servidor ni a un Administrator.

Intents. Los comandos de barra no necesitan ningún intent privilegiado. Dos son útiles para moderar: Server Members para registrar entradas y salidas, y Message Content si el bot lee los mensajes para filtrarlos por su cuenta. Actívalos en Bot → Privileged Gateway Intents del Developer Portal. Desde junio de 2026, Discord solo los revisa en las aplicaciones que superan los 10.000 usuarios; por debajo de esa cifra, basta con activar el interruptor.

Comandos de moderación en Python (discord.py)

Con discord.py 2.7 instalado (pip install discord.py), este bot.py añade /timeout, /purge y /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"])

default_permissions oculta cada comando a los miembros que no tienen ese permiso. Los administradores del servidor pueden cambiar quién lo ve en Server Settings → Integrations. Los límites del código son los de Discord: 40.320 minutos son 28 días, y el modo lento llega hasta 6 horas.

Un comando de aislamiento en JavaScript (discord.js)

Con discord.js 14 (npm install discord.js), el mismo /timeout queda así. moderatable comprueba el orden de los roles y el permiso del bot antes de intentarlo:

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 y banear siguen el mismo patrón con member.kick(reason) y member.ban({ reason, deleteMessageSeconds }). Un baneo también puede borrar hasta 7 días de mensajes del miembro.

Registrar lo que pasa

  • Indica siempre un motivo. Las librerías lo envían al registro de auditoría de Discord (Server Settings → Audit Log), que conserva las entradas durante 45 días.
  • Publica además cada acción en un canal privado de registro de moderación: quién actuó, sobre quién, por qué y durante cuánto tiempo. A diferencia del registro de auditoría, guarda el historial todo el tiempo que quieras.
  • Las entradas y salidas necesitan el intent Server Members; registra la fecha de creación de la cuenta para detectar cuentas desechables recién creadas.
  • Los mensajes borrados y editados solo se pueden registrar con su texto si el bot tiene el intent Message Content.

Ten en cuenta el límite del borrado masivo: Discord borra hasta 100 mensajes por llamada y rechaza los mensajes de más de dos semanas, así que /purge sirve para el spam reciente, no para vaciar un canal antiguo.

Mantén el bot en línea

AutoMod sigue funcionando sin ti, pero tus comandos y registros se detienen en cuanto se detiene el proceso del bot. Un bot de moderación que corre en un PC de casa está desconectado justo cuando el PC entra en reposo, y las raids rara vez esperan al horario de oficina.

En el hosting de bots de Discord de HytHost subes el proyecto, eliges el runtime (Node.js, Python, Java, Go, C#, Bun o Lavalink) y guardas el token en una variable de arranque en lugar de en el código. El panel inicia el bot y lo reinicia tras un fallo. La configuración completa está en cómo alojar un bot de Discord 24/7.

Un bot de moderación solo funciona mientras está en marcha: el hosting de bots de Discord de HytHost admite Python, Node.js y 5 runtimes más, desde €0.89/mes.

Ver planes de hosting de bots
FAQ

Preguntas frecuentes

Para muchos servidores, AutoMod es suficiente: bloquea palabras clave, palabras marcadas, spam de menciones y posible spam, y puede aislar temporalmente a los miembros. Añade un bot cuando tus moderadores necesiten comandos como purge y modo lento, tus propias reglas o un registro completo de acciones.

Solo los que usan sus comandos: Moderate Members para los aislamientos, Kick Members, Ban Members, Manage Messages junto con Read Message History para borrar mensajes, y Manage Channels para el modo lento. Evita darle Administrator.

Normalmente es por el orden de los roles: el bot solo puede actuar sobre miembros cuyo rol más alto esté por debajo del suyo, así que sube el rol del bot en Server Settings. Al propietario del servidor y a los miembros con Administrator no se les puede aislar en ningún caso.

No de forma masiva. El borrado masivo de Discord acepta hasta 100 mensajes a la vez y solo mensajes de menos de dos semanas. Los más antiguos solo se pueden borrar uno por uno, lo que es lento.

Solo si lee los mensajes por su cuenta, por ejemplo para filtrar palabras o para registrar el texto de los mensajes borrados. Los comandos de barra, los aislamientos, los baneos y las purgas funcionan sin él.

Aloja tu bot de moderación

El hosting de bots de Discord de HytHost ejecuta Python, Node.js, Java, Go, C#, Bun o Lavalink, reinicia el bot tras un fallo y empieza en €0.89/mes.

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

¿Te ha resultado útil esta guía?