Sådan laver du en Discord-moderationsbot
På denne side
En travl Discord-server har brug for moderation, der aldrig sover: spamfiltre, hurtige timeouts, en måde at rydde en strøm af beskeder på og et overblik over, hvem der gjorde hvad. Noget af det får du gratis fra Discord med AutoMod, og en lille bot af din egen klarer resten.
Denne guide starter med AutoMod, fordi det måske er alt, du har brug for. Derefter bygger den moderationskommandoer i Python (discord.py) eller JavaScript (discord.js) og forklarer de tilladelser, intents og logs, der får dem til at virke.
Start med Discord AutoMod
AutoMod er indbygget i Discord og kører på Discords side, så det virker, selv når ingen bot er online. Åbn Server Settings → AutoMod; du skal have tilladelsen Manage Server. Du får:
- Egne ordfiltre med dine egne nøgleord, jokertegn og regulære udtryk.
- Ofte markerede ord: færdige lister med bandeord, seksuelt indhold og skældsord.
- Mention-spam: grib ind, når en besked nævner for mange personer på én gang, op til en grænse, du selv sætter.
- Spamindhold: Discords egen registrering af mistænkt spam.
- Filtre for medlemsprofiler: nøgleord, der tjekkes mod brugernavne og profiler.
For hver regel vælger du, hvad der skal ske: blokér beskeden, send en advarsel til en kanal for moderatorer, eller giv medlemmet en timeout. Du kan undtage roller og kanaler. Medlemmer med Manage Server eller Administrator bliver aldrig filtreret.
Hvis dit problem er spam, skældsord og masse-mentions, så opsæt AutoMod først og se, om det er nok. En egen bot betaler sig, når du vil have kommandoer, dine moderatorer kan bruge, dine egne regler og en ordentlig log.
Hvad en egen moderationsbot tilføjer
- Slash-kommandoer til moderatorer:
/timeout,/purge,/slowmode, kick og ban, med en begrundelse registreret hver gang. - En mod-log-kanal med medlemmer, der kommer og går, slettede beskeder og hver handling, dine moderatorer foretager.
- Dine egne regler: advarsler, der til sidst udløser en timeout, nye konti, der holdes tilbage, og links, der kun er tilladt i nogle kanaler.
- Alt samlet ét sted, tilpasset dit fællesskab i stedet for en offentlig bots standardindstillinger.
Har du aldrig lavet en bot før, så følg først sådan laver du en Discord-bot for at oprette applikationen, få tokenet og køre en første /ping-kommando. Koden nedenfor bygger videre på den.
Tilladelser, rollernes rækkefølge og intents
Invitér botten med kun de tilladelser, dens kommandoer bruger:
| Handling | Tilladelse |
|---|---|
| Giv et medlem timeout (op til 28 dage) | Moderate Members |
| Smid et medlem ud | Kick Members |
| Udeluk et medlem (ban) | Ban Members |
| Slet beskeder | Manage Messages og Read Message History |
| Slå slow mode til | Manage Channels |
Rollernes rækkefølge betyder noget. En bot kan kun handle over for medlemmer, hvis højeste rolle ligger under bottens egen højeste rolle. I Server Settings → Roles trækker du bottens rolle op over de roller, den skal moderere. Ingen kan give serverejeren eller et medlem med Administrator en timeout.
Intents. Slash-kommandoer kræver ingen privilegeret intent. To er nyttige til moderation: Server Members til logs over medlemmer, der kommer og går, og Message Content, hvis botten selv læser beskeder for at filtrere dem. Slå dem til under Bot → Privileged Gateway Intents i Developer Portal. Siden juni 2026 gennemgår Discord dem kun for apps, der når over 10.000 brugere; under det er det nok at slå kontakten til.
Moderationskommandoer i Python (discord.py)
Med discord.py 2.7 installeret (pip install discord.py) tilføjer denne bot.py /timeout, /purge og /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 skjuler hver kommando for medlemmer uden den tilladelse. Serveradministratorer kan ændre, hvem der ser den, under Server Settings → Integrations. Grænserne i koden er Discords egne: 40.320 minutter er 28 dage, og slow mode går op til 6 timer.
En timeout-kommando i JavaScript (discord.js)
Med discord.js 14 (npm install discord.js) ser den samme /timeout sådan her ud. moderatable tjekker rollernes rækkefølge og bottens tilladelse, før den prøver:
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 og ban følger samme mønster med member.kick(reason) og member.ban({ reason, deleteMessageSeconds }). Et ban kan også slette op til 7 dages beskeder fra medlemmet.
Log, hvad der sker
- Angiv altid en begrundelse. Bibliotekerne sender den til Discords audit log (Server Settings → Audit Log), som gemmer posterne i 45 dage.
- Send også hver handling til en privat mod-log-kanal: hvem der greb ind, over for hvem, hvorfor og hvor længe. I modsætning til audit loggen gemmer den historikken, så længe du vil.
- Medlemmer, der kommer og går, kræver intenten Server Members; log kontoens oprettelsesdato for at opdage helt nye engangskonti.
- Slettede og redigerede beskeder kan kun logges med deres tekst, hvis botten har intenten Message Content.
Husk grænsen for massesletning: Discord sletter højst 100 beskeder pr. kald og afviser beskeder, der er ældre end to uger, så /purge er til frisk spam, ikke til at rydde op i en gammel kanal.
Hold botten online
AutoMod arbejder videre uden dig, men dine kommandoer og logs stopper i samme øjeblik, som bottens proces stopper. En moderationsbot på en pc derhjemme er offline præcis når pc'en sover, og raids venter sjældent til kontortid.
Hos HytHost Discord-bot-hosting uploader du projektet, vælger runtime (Node.js, Python, Java, Go, C#, Bun eller Lavalink) og gemmer tokenet i en startup-variabel i stedet for i koden. Panelet starter botten og genstarter den efter et crash. Hele opsætningen står i sådan hoster du en Discord-bot 24/7.
En moderationsbot virker kun, mens den kører: HytHost Discord-bot-hosting understøtter Python, Node.js og 5 andre runtimes, fra €0.89/md.
Se bot-hostingplanerOfte stillede spørgsmål
For mange servere er AutoMod nok: det blokerer nøgleord, markerede ord, mention-spam og mistænkt spam og kan give medlemmer timeout. Tilføj en bot, når dine moderatorer har brug for kommandoer som purge og slow mode, egne regler eller en komplet log over handlinger.
Kun dem, dens kommandoer bruger: Moderate Members til timeouts, Kick Members, Ban Members, Manage Messages sammen med Read Message History til at slette beskeder og Manage Channels til slow mode. Undgå at give den Administrator.
Som regel er det rollernes rækkefølge: botten kan kun handle over for medlemmer, hvis højeste rolle ligger under dens egen, så flyt bottens rolle højere op i Server Settings. Serverejeren og medlemmer med Administrator kan slet ikke få timeout.
Ikke samlet. Discords massesletning tager højst 100 beskeder ad gangen og kun beskeder, der er nyere end to uger. Ældre beskeder kan kun slettes én ad gangen, og det går langsomt.
Kun hvis den selv læser beskeder, for eksempel for at filtrere ord eller logge teksten fra slettede beskeder. Slash-kommandoer, timeouts, bans og purges virker uden den.
Host din moderationsbot
HytHost Discord-bot-hosting kører Python, Node.js, Java, Go, C#, Bun eller Lavalink, genstarter botten efter et crash og starter ved €0.89/md.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursVar denne guide en hjælp?