Slik lager du en moderasjonsbot for Discord
På denne siden
En travel Discord-server trenger moderering som aldri sover: spamfiltre, raske timeouts, en måte å rydde bort en flom av meldinger på og oversikt over hvem som gjorde hva. Noe av dette får du gratis fra Discord med AutoMod, og en liten bot du lager selv tar resten.
Denne guiden starter med AutoMod, fordi det kanskje er alt du trenger. Deretter bygger den modereringskommandoer i Python (discord.py) eller JavaScript (discord.js) og forklarer tillatelsene, intents og loggene som får dem til å virke.
Start med Discord AutoMod
AutoMod er innebygd i Discord og kjører på Discords side, så det virker selv når ingen bot er på nett. Åpne Server Settings → AutoMod; du trenger tillatelsen Manage Server. Du får:
- Egne ordfiltre med dine egne nøkkelord, jokertegn og regulære uttrykk.
- Ofte flaggede ord: ferdige lister for banning, seksuelt innhold og nedsettende ord.
- Spam med omtaler: grip inn når en melding nevner for mange personer på én gang, opp til en grense du setter selv.
- Spaminnhold: Discords egen gjenkjenning av mistenkt spam.
- Filtre for medlemsprofiler: nøkkelord som sjekkes mot brukernavn og profiler.
For hver regel velger du hva som skal skje: blokkere meldingen, sende et varsel til en kanal for moderatorer eller gi medlemmet en timeout. Du kan unnta roller og kanaler. Medlemmer med Manage Server eller Administrator blir aldri filtrert.
Hvis problemet ditt er spam, nedsettende ord og masseomtaler, sett opp AutoMod først og se om det holder. En egen bot lønner seg når du vil ha kommandoer moderatorene dine kan bruke, egne regler og en skikkelig logg.
Hva en egen moderasjonsbot gir deg
- Slash-kommandoer for moderatorer:
/timeout,/purge,/slowmode, kick og ban, med en begrunnelse registrert hver gang. - En mod-logg-kanal med medlemmer som kommer og går, slettede meldinger og hver handling moderatorene dine gjør.
- Dine egne regler: advarsler som til slutt gir timeout, nye kontoer som holdes tilbake og lenker som bare er tillatt i enkelte kanaler.
- Alt på ett sted, tilpasset fellesskapet ditt i stedet for standardinnstillingene til en offentlig bot.
Har du aldri laget en bot, følg først slik lager du en Discord-bot for å opprette applikasjonen, hente tokenet og kjøre en første /ping-kommando. Koden nedenfor bygger videre på den.
Tillatelser, rollerekkefølge og intents
Inviter boten med bare de tillatelsene kommandoene dens bruker:
| Handling | Tillatelse |
|---|---|
| Gi et medlem timeout (opptil 28 dager) | Moderate Members |
| Kaste ut et medlem | Kick Members |
| Utestenge et medlem (ban) | Ban Members |
| Slette meldinger | Manage Messages og Read Message History |
| Slå på slow mode | Manage Channels |
Rollerekkefølgen betyr noe. En bot kan bare handle mot medlemmer der den høyeste rollen ligger under botens egen høyeste rolle. I Server Settings → Roles drar du botens rolle over rollene den skal moderere. Ingen kan gi servereieren eller et medlem med Administrator timeout.
Intents. Slash-kommandoer trenger ingen privilegert intent. To er nyttige for moderering: Server Members for logger over medlemmer som kommer og går, og Message Content hvis boten selv leser meldinger for å filtrere dem. Slå dem på under Bot → Privileged Gateway Intents i Developer Portal. Siden juni 2026 vurderer Discord dem bare for apper som når mer enn 10 000 brukere; under det holder det å slå på bryteren.
Modereringskommandoer i Python (discord.py)
Med discord.py 2.7 installert (pip install discord.py) legger denne bot.py til /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 uten den tillatelsen. Serveradministratorer kan endre hvem som ser den, under Server Settings → Integrations. Grensene i koden er Discords egne: 40 320 minutter er 28 dager, og slow mode går opptil 6 timer.
En timeout-kommando i JavaScript (discord.js)
Med discord.js 14 (npm install discord.js) ser den samme /timeout slik ut. moderatable sjekker rollerekkefølgen og botens tillatelse 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 }). En utestengelse kan også slette opptil 7 dager med meldinger fra medlemmet.
Logg det som skjer
- Oppgi alltid en begrunnelse. Bibliotekene sender den til Discords audit log (Server Settings → Audit Log), som tar vare på oppføringene i 45 dager.
- Post også hver handling i en privat mod-logg-kanal: hvem som grep inn, mot hvem, hvorfor og hvor lenge. I motsetning til audit loggen beholder den historikken så lenge du vil.
- Medlemmer som kommer og går krever intenten Server Members; logg når kontoen ble opprettet for å oppdage ferske engangskontoer.
- Slettede og redigerte meldinger kan bare logges med teksten hvis boten har intenten Message Content.
Husk grensen for massesletting: Discord sletter maks 100 meldinger per kall og avviser meldinger eldre enn to uker, så /purge er for fersk spam, ikke for å rydde opp i en gammel kanal.
Hold boten på nett
AutoMod jobber videre uten deg, men kommandoene og loggene dine stopper i det øyeblikket botens prosess stopper. En moderasjonsbot på en PC hjemme er offline akkurat når PC-en sover, og raid venter sjelden til kontortid.
Med HytHost Discord-bothosting laster du opp prosjektet, velger runtime (Node.js, Python, Java, Go, C#, Bun eller Lavalink) og legger tokenet i en oppstartsvariabel i stedet for i koden. Panelet starter boten og starter den på nytt etter et krasj. Hele oppsettet finner du i slik hoster du en Discord-bot 24/7.
En moderasjonsbot virker bare mens den kjører: HytHost Discord-bothosting støtter Python, Node.js og 5 andre runtimes, fra €0.89/mnd.
Se bothosting-planerOfte stilte spørsmål
For mange servere holder AutoMod: det blokkerer nøkkelord, flaggede ord, spam med omtaler og mistenkt spam, og kan gi medlemmer timeout. Legg til en bot når moderatorene dine trenger kommandoer som purge og slow mode, egne regler eller en fullstendig logg over handlinger.
Bare dem kommandoene dens bruker: Moderate Members for timeouts, Kick Members, Ban Members, Manage Messages sammen med Read Message History for å slette meldinger og Manage Channels for slow mode. Unngå å gi den Administrator.
Som regel er det rollerekkefølgen: boten kan bare handle mot medlemmer der den høyeste rollen ligger under dens egen, så flytt botens rolle høyere opp i Server Settings. Servereieren og medlemmer med Administrator kan ikke få timeout i det hele tatt.
Ikke i bulk. Discords massesletting tar maks 100 meldinger om gangen og bare meldinger som er nyere enn to uker. Eldre meldinger kan bare slettes én og én, og det går sakte.
Bare hvis den leser meldinger selv, for eksempel for å filtrere ord eller logge teksten i slettede meldinger. Slash-kommandoer, timeouts, utestengelser og purges virker uten den.
Host moderasjonsboten din
HytHost Discord-bothosting kjører Python, Node.js, Java, Go, C#, Bun eller Lavalink, starter boten på nytt etter et krasj og starter på €0.89/mnd.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursVar denne guiden til hjelp?