Com fer un bot de moderació per a Discord
En aquesta pàgina
Un servidor de Discord amb molta activitat necessita una moderació que no dormi mai: filtres de spam, timeouts ràpids, una manera de netejar una allau de missatges i un registre de qui ha fet què. Discord te'n dona una part de franc amb l'AutoMod, i un petit bot propi cobreix la resta.
Aquesta guia comença per l'AutoMod, perquè potser és tot el que necessites, després construeix ordres de moderació en Python (discord.py) o JavaScript (discord.js) i explica els permisos, els intents i els registres que les fan funcionar.
Comença per l'AutoMod de Discord
L'AutoMod ve integrat a Discord i s'executa al costat de Discord, així que funciona fins i tot quan no hi ha cap bot en línia. Obre Server Settings → AutoMod; necessites el permís Manage Server. Ofereix:
- Filtres de paraules personalitzats amb les teves paraules clau, comodins i expressions regulars.
- Paraules marcades sovint: llistes preparades de paraulotes, contingut sexual i insults.
- Spam de mencions: actua quan un missatge menciona massa persones alhora, fins al límit que tu fixis.
- Contingut de spam: la detecció pròpia de Discord del spam sospitós.
- Filtres del perfil dels membres: paraules clau que es comproven als noms d'usuari i als perfils.
Per a cada regla tries què passa: bloquejar el missatge, enviar una alerta a un canal de moderadors o aplicar un timeout al membre. Pots excloure rols i canals. Els membres amb Manage Server o Administrator no es filtren mai.
Si el teu problema és el spam, els insults i les mencions massives, configura primer l'AutoMod i mira si n'hi ha prou. Un bot propi val la pena quan vols ordres que puguin fer servir els teus moderadors, regles pròpies i un registre com cal.
Què hi afegeix un bot de moderació propi
- Ordres de barra per als moderadors:
/timeout,/purge,/slowmode, kick i ban, amb un motiu registrat cada vegada. - Un canal de registre de moderació amb les entrades, les sortides, els missatges esborrats i cada acció dels teus moderadors.
- Regles pròpies: avisos que s'acumulen fins a un timeout, comptes nous retinguts, enllaços permesos només en alguns canals.
- Tot en un sol lloc, ajustat a la teva comunitat en lloc dels valors per defecte d'un bot públic.
Si no has fet mai cap bot, segueix primer com fer un bot de Discord per crear l'aplicació, obtenir el token i executar una primera ordre /ping. El codi següent parteix d'aquí.
Permisos, ordre dels rols i intents
Convida el bot només amb els permisos que fan servir les seves ordres:
| Acció | Permís |
|---|---|
| Aplicar un timeout a un membre (fins a 28 dies) | Moderate Members |
| Expulsar un membre | Kick Members |
| Banejar un membre | Ban Members |
| Esborrar missatges | Manage Messages i Read Message History |
| Activar el mode lent | Manage Channels |
L'ordre dels rols importa. Un bot només pot actuar sobre membres el rol més alt dels quals està per sota del rol més alt del bot. A Server Settings → Roles, arrossega el rol del bot per sobre dels rols que ha de moderar. Ningú no pot aplicar un timeout al propietari del servidor ni a un Administrator.
Intents. Les ordres de barra no necessiten cap intent privilegiat. Per a la moderació en són útils dos: Server Members per registrar entrades i sortides, i Message Content si el bot llegeix els missatges per filtrar-los ell mateix. Activa'ls a Bot → Privileged Gateway Intents al Developer Portal. Des de juny de 2026, Discord només els revisa per a les aplicacions que arriben a més de 10.000 usuaris; per sota d'aquesta xifra, n'hi ha prou amb l'interruptor.
Ordres de moderació en Python (discord.py)
Amb discord.py 2.7 instal·lat (pip install discord.py), aquest bot.py afegeix /timeout, /purge i /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 amaga cada ordre als membres que no tenen aquell permís. Els administradors del servidor poden canviar qui la veu a Server Settings → Integrations. Els límits del codi són els de Discord: 40.320 minuts són 28 dies, i el mode lent arriba fins a 6 hores.
Una ordre de timeout en JavaScript (discord.js)
Amb discord.js 14 (npm install discord.js), la mateixa ordre /timeout queda així. moderatable comprova l'ordre dels rols i el permís del bot abans d'intentar-ho:
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);
Kick i ban segueixen el mateix patró amb member.kick(reason) i member.ban({ reason, deleteMessageSeconds }). Un ban també pot esborrar fins a 7 dies de missatges del membre.
Registrar què passa
- Indica sempre un motiu. Les biblioteques l'envien al registre d'auditoria de Discord (Server Settings → Audit Log), que conserva les entrades 45 dies.
- Publica també cada acció en un canal privat de registre de moderació: qui ha actuat, sobre qui, per què i durant quant de temps. A diferència del registre d'auditoria, aquest canal conserva l'historial tant com vulguis.
- Les entrades i sortides necessiten l'intent Server Members; registra també la data de creació del compte per detectar comptes d'usar i llençar acabats de crear.
- Els missatges esborrats i editats només es poden registrar amb el text si el bot té l'intent Message Content.
Tingues en compte el límit de l'esborrat massiu: Discord esborra un màxim de 100 missatges per crida i rebutja els que tenen més de dues setmanes, així que /purge serveix per al spam recent, no per buidar un canal antic.
Mantén el bot en línia
L'AutoMod continua funcionant sense tu, però les teves ordres i registres s'aturen en el moment que s'atura el procés del bot. Un bot de moderació que corre en un PC de casa queda fora de línia just quan l'ordinador entra en repòs, i els raids rarament esperen l'horari d'oficina.
A l'allotjament de bots de Discord de HytHost puges el projecte, tries l'entorn (Node.js, Python, Java, Go, C#, Bun o Lavalink) i guardes el token en una variable d'inici en lloc de dins del codi. El panell engega el bot i el reinicia després d'una fallada. Tens la configuració completa a com allotjar un bot de Discord 24/7.
Un bot de moderació només funciona mentre s'executa: l'allotjament de bots de Discord de HytHost admet Python, Node.js i 5 entorns més, des de €0.89/mes.
Mira els plans per a botsPreguntes més freqüents
Per a molts servidors l'AutoMod és suficient: bloqueja paraules clau, paraules marcades, spam de mencions i spam sospitós, i pot aplicar timeouts als membres. Afegeix-hi un bot quan els teus moderadors necessitin ordres com purge i mode lent, regles pròpies o un registre complet de les accions.
Només els que fan servir les seves ordres: Moderate Members per als timeouts, Kick Members, Ban Members, Manage Messages amb Read Message History per esborrar missatges i Manage Channels per al mode lent. Evita donar-li Administrator.
Normalment per l'ordre dels rols: el bot només pot actuar sobre membres el rol més alt dels quals està per sota del seu, així que puja el rol del bot a Server Settings. Al propietari del servidor i als membres amb Administrator no se'ls pot aplicar cap timeout.
No de manera massiva. L'esborrat massiu de Discord accepta fins a 100 missatges cada vegada i només missatges de menys de dues setmanes. Els més antics només es poden esborrar un per un, i això és lent.
Només si llegeix els missatges ell mateix, per exemple per filtrar paraules o registrar el text dels missatges esborrats. Les ordres de barra, els timeouts, els bans i les purgues funcionen sense.
Allotja el teu bot de moderació
L'allotjament de bots de Discord de HytHost executa Python, Node.js, Java, Go, C#, Bun o Lavalink, reinicia el bot després d'una fallada i comença a €0.89/mes.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursT'ha estat útil aquesta guia?