Een Discord-moderatiebot maken
Op deze pagina
Een drukke Discord-server heeft moderatie nodig die nooit slaapt: spamfilters, snelle time-outs, een manier om een stortvloed aan berichten op te ruimen en een overzicht van wie wat heeft gedaan. Een deel daarvan krijg je gratis van Discord met AutoMod, en een kleine eigen bot doet de rest.
Deze gids begint bij AutoMod, omdat dat misschien al alles is wat je nodig hebt, en bouwt daarna moderatiecommando's in Python (discord.py) of JavaScript (discord.js). Ook lees je welke machtigingen, intents en logs ervoor zorgen dat ze werken.
Begin met Discord AutoMod
AutoMod is ingebouwd in Discord en draait aan de kant van Discord, dus het werkt ook als er geen bot online is. Open Server Settings → AutoMod; je hebt daarvoor de machtiging Manage Server nodig. Je krijgt:
- Eigen woordfilters met je eigen trefwoorden, jokertekens en reguliere expressies.
- Vaak gemarkeerde woorden: kant-en-klare lijsten voor grof taalgebruik, seksuele inhoud en scheldwoorden.
- Spam met vermeldingen: grijpt in als een bericht te veel mensen tegelijk noemt, tot een limiet die je zelf instelt.
- Spaminhoud: de eigen detectie van Discord voor vermoedelijke spam.
- Filters voor ledenprofielen: trefwoorden die worden gecontroleerd in gebruikersnamen en profielen.
Per regel kies je wat er gebeurt: het bericht blokkeren, een melding sturen naar een kanaal voor moderators of het lid een time-out geven. Je kunt rollen en kanalen uitzonderen. Leden met Manage Server of Administrator worden nooit gefilterd.
Gaat het bij jou om spam, scheldwoorden en massale vermeldingen, stel dan eerst AutoMod in en kijk of dat genoeg is. Een eigen bot loont als je commando's wilt die je moderators kunnen gebruiken, je eigen regels en een fatsoenlijk log.
Wat een eigen moderatiebot toevoegt
- Slash-commando's voor moderators:
/timeout,/purge,/slowmode, kicken en bannen, telkens met een vastgelegde reden. - Een modlogkanaal met leden die binnenkomen en vertrekken, verwijderde berichten en elke actie van je moderators.
- Je eigen regels: waarschuwingen die optellen tot een time-out, nieuwe accounts die worden tegengehouden, links die alleen in sommige kanalen mogen.
- Alles op één plek, afgestemd op je community in plaats van op de standaardinstellingen van een openbare bot.
Heb je nog nooit een bot gemaakt? Volg dan eerst een Discord-bot maken om de applicatie aan te maken, de token op te halen en een eerste /ping-commando te draaien. De code hieronder bouwt daarop voort.
Machtigingen, rolvolgorde en intents
Nodig de bot uit met alleen de machtigingen die zijn commando's gebruiken:
| Actie | Machtiging |
|---|---|
| Een lid een time-out geven (tot 28 dagen) | Moderate Members |
| Een lid kicken | Kick Members |
| Een lid bannen | Ban Members |
| Berichten verwijderen | Manage Messages en Read Message History |
| Langzame modus instellen | Manage Channels |
De volgorde van rollen telt. Een bot kan alleen optreden tegen leden van wie de hoogste rol lager staat dan de hoogste rol van de bot. Sleep in Server Settings → Roles de rol van de bot boven de rollen die hij moet modereren. Niemand kan de eigenaar van de server of een Administrator een time-out geven.
Intents. Slash-commando's hebben geen geprivilegieerde intent nodig. Twee zijn handig voor moderatie: Server Members om binnenkomende en vertrekkende leden te loggen, en Message Content als de bot zelf berichten leest om ze te filteren. Zet ze aan onder Bot → Privileged Gateway Intents in het Developer Portal. Sinds juni 2026 beoordeelt Discord dit alleen nog bij apps met meer dan 10.000 gebruikers; daaronder is de schakelaar genoeg.
Moderatiecommando's in Python (discord.py)
Met discord.py 2.7 geïnstalleerd (pip install discord.py) voegt deze bot.py de commando's /timeout, /purge en /slowmode toe:
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 verbergt elk commando voor leden zonder die machtiging. Serverbeheerders kunnen onder Server Settings → Integrations aanpassen wie het ziet. De limieten in de code zijn die van Discord: 40.320 minuten is 28 dagen, en de langzame modus gaat tot 6 uur.
Een time-outcommando in JavaScript (discord.js)
Met discord.js 14 (npm install discord.js) ziet dezelfde /timeout er zo uit. moderatable controleert de rolvolgorde en de machtiging van de bot voordat er iets wordt geprobeerd:
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);
Kicken en bannen werken volgens hetzelfde patroon met member.kick(reason) en member.ban({ reason, deleteMessageSeconds }). Een ban kan ook tot 7 dagen aan berichten van het lid verwijderen.
Bijhouden wat er gebeurt
- Geef altijd een reden op. De libraries sturen die naar het auditlog van Discord (Server Settings → Audit Log), dat vermeldingen 45 dagen bewaart.
- Plaats elke actie ook in een privé-modlogkanaal: wie optrad, tegen wie, waarom en hoe lang. Anders dan het auditlog bewaart dat kanaal de geschiedenis zo lang als je wilt.
- Binnenkomende en vertrekkende leden vereisen de intent Server Members; log de aanmaakdatum van het account om verse wegwerpaccounts te herkennen.
- Verwijderde en bewerkte berichten kun je alleen met hun tekst loggen als de bot de intent Message Content heeft.
Houd rekening met de limiet voor bulkverwijdering: Discord verwijdert maximaal 100 berichten per aanroep en weigert berichten die ouder zijn dan twee weken. /purge is dus bedoeld voor verse spam, niet om een oud kanaal leeg te maken.
Houd de bot online
AutoMod blijft zonder jou werken, maar je commando's en logs stoppen zodra het proces van de bot stopt. Een moderatiebot op een pc thuis is offline precies wanneer die pc in slaapstand gaat, en raids wachten zelden tot kantoortijd.
Bij Discord-bothosting van HytHost upload je het project, kies je de runtime (Node.js, Python, Java, Go, C#, Bun of Lavalink) en zet je de token in een opstartvariabele in plaats van in de code. Het panel start de bot en herstart hem na een crash. De volledige installatie staat in een Discord-bot 24/7 hosten.
Een moderatiebot werkt alleen zolang hij draait: Discord-bothosting van HytHost ondersteunt Python, Node.js en nog 5 andere runtimes, vanaf €0.89/mnd.
Bekijk bothostingpakkettenVeelgestelde vragen
Voor veel servers is AutoMod genoeg: het blokkeert trefwoorden, gemarkeerde woorden, spam met vermeldingen en vermoedelijke spam, en kan leden een time-out geven. Voeg een bot toe als je moderators commando's als purge en langzame modus nodig hebben, als je eigen regels wilt of een volledig log van alle acties.
Alleen de machtigingen die zijn commando's gebruiken: Moderate Members voor time-outs, Kick Members, Ban Members, Manage Messages samen met Read Message History om berichten te verwijderen, en Manage Channels voor de langzame modus. Geef hem liever geen Administrator.
Meestal door de rolvolgorde: de bot kan alleen optreden tegen leden van wie de hoogste rol lager staat dan die van de bot, dus zet de rol van de bot hoger in Server Settings. De eigenaar van de server en leden met Administrator kunnen nooit een time-out krijgen.
Niet in bulk. De bulkverwijdering van Discord accepteert maximaal 100 berichten tegelijk en alleen berichten die jonger zijn dan twee weken. Oudere berichten kun je alleen een voor een verwijderen, en dat gaat traag.
Alleen als hij zelf berichten leest, bijvoorbeeld om woorden te filteren of de tekst van verwijderde berichten te loggen. Slash-commando's, time-outs, bans en purges werken zonder.
Host je moderatiebot
Discord-bothosting van HytHost draait Python, Node.js, Java, Go, C#, Bun of Lavalink, herstart de bot na een crash en begint bij €0.89/mnd.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursWas deze gids nuttig?