Så gör du en moderationsbot för Discord
På den här sidan
En livlig Discord-server behöver moderering som aldrig sover: spamfilter, snabba timeouts, ett sätt att rensa en flod av meddelanden och koll på vem som gjorde vad. En del av det får du gratis av Discord genom AutoMod, och en liten egen bot sköter resten.
Den här guiden börjar med AutoMod, eftersom det kanske är allt du behöver. Sedan bygger den modereringskommandon i Python (discord.py) eller JavaScript (discord.js) och förklarar behörigheterna, intents och loggarna som får dem att fungera.
Börja med Discord AutoMod
AutoMod är inbyggt i Discord och körs på Discords sida, så det fungerar även när ingen bot är online. Öppna Server Settings → AutoMod; du behöver behörigheten Manage Server. Du får:
- Egna ordfilter med dina egna nyckelord, jokertecken och reguljära uttryck.
- Ofta flaggade ord: färdiga listor för svordomar, sexuellt innehåll och nedsättande ord.
- Spam med omnämnanden: ingrip när ett meddelande nämner för många personer på en gång, upp till en gräns du själv sätter.
- Spaminnehåll: Discords egen upptäckt av misstänkt spam.
- Filter för medlemsprofiler: nyckelord som kontrolleras mot användarnamn och profiler.
För varje regel väljer du vad som ska hända: blockera meddelandet, skicka en varning till en kanal för moderatorer eller ge medlemmen en timeout. Du kan undanta roller och kanaler. Medlemmar med Manage Server eller Administrator filtreras aldrig.
Om ditt problem är spam, nedsättande ord och massomnämnanden, ställ in AutoMod först och se om det räcker. En egen bot lönar sig när du vill ha kommandon som dina moderatorer kan använda, egna regler och en ordentlig logg.
Vad en egen moderationsbot tillför
- Slash-kommandon för moderatorer:
/timeout,/purge,/slowmode, kick och ban, med ett skäl som sparas varje gång. - En modloggkanal med medlemmar som går med och lämnar, raderade meddelanden och varje åtgärd dina moderatorer gör.
- Dina egna regler: varningar som till slut leder till en timeout, nya konton som hålls tillbaka och länkar som bara är tillåtna i vissa kanaler.
- Allt på ett ställe, anpassat efter din community i stället för en offentlig bots standardinställningar.
Har du aldrig gjort en bot, följ först så gör du en Discord-bot för att skapa applikationen, hämta token och köra ett första /ping-kommando. Koden nedan bygger vidare på den.
Behörigheter, rollordning och intents
Bjud in boten med bara de behörigheter som dess kommandon använder:
| Åtgärd | Behörighet |
|---|---|
| Ge en medlem timeout (upp till 28 dagar) | Moderate Members |
| Sparka ut en medlem | Kick Members |
| Banna en medlem | Ban Members |
| Radera meddelanden | Manage Messages och Read Message History |
| Slå på slow mode | Manage Channels |
Rollordningen spelar roll. En bot kan bara agera mot medlemmar vars högsta roll ligger under botens egen högsta roll. I Server Settings → Roles drar du botens roll ovanför de roller den ska moderera. Ingen kan ge serverns ägare eller en medlem med Administrator en timeout.
Intents. Slash-kommandon kräver ingen privilegierad intent. Två är användbara för moderering: Server Members för loggar över medlemmar som går med och lämnar, och Message Content om boten själv läser meddelanden för att filtrera dem. Slå på dem under Bot → Privileged Gateway Intents i Developer Portal. Sedan juni 2026 granskar Discord dem bara för appar som når fler än 10 000 användare; under det räcker det att slå på reglaget.
Modereringskommandon i Python (discord.py)
Med discord.py 2.7 installerat (pip install discord.py) lägger den här bot.py till /timeout, /purge och /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 döljer varje kommando för medlemmar utan den behörigheten. Serveradministratörer kan ändra vem som ser det under Server Settings → Integrations. Gränserna i koden är Discords egna: 40 320 minuter är 28 dagar, och slow mode går upp till 6 timmar.
Ett timeout-kommando i JavaScript (discord.js)
Med discord.js 14 (npm install discord.js) ser samma /timeout ut så här. moderatable kontrollerar rollordningen och botens behörighet innan den försöker:
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 och ban följer samma mönster med member.kick(reason) och member.ban({ reason, deleteMessageSeconds }). En ban kan också radera upp till 7 dagars meddelanden från medlemmen.
Logga vad som händer
- Ange alltid ett skäl. Biblioteken skickar det till Discords audit log (Server Settings → Audit Log), som sparar posterna i 45 dagar.
- Skicka också varje åtgärd till en privat modloggkanal: vem som agerade, mot vem, varför och hur länge. Till skillnad från audit loggen sparar den historiken så länge du vill.
- Medlemmar som går med och lämnar kräver intenten Server Members; logga när kontot skapades för att upptäcka nya slängkonton.
- Raderade och redigerade meddelanden kan bara loggas med sin text om boten har intenten Message Content.
Tänk på gränsen för massradering: Discord raderar högst 100 meddelanden per anrop och vägrar meddelanden som är äldre än två veckor, så /purge är till för färsk spam, inte för att städa ut en gammal kanal.
Håll boten online
AutoMod fortsätter att jobba utan dig, men dina kommandon och loggar slutar fungera i samma stund som botens process stannar. En moderationsbot på en dator hemma är offline precis när datorn sover, och raider väntar sällan till kontorstid.
Med HytHost Discord-bothosting laddar du upp projektet, väljer runtime (Node.js, Python, Java, Go, C#, Bun eller Lavalink) och lägger token i en startvariabel i stället för i koden. Panelen startar boten och startar om den efter en krasch. Hela uppsättningen finns i så hostar du en Discord-bot 24/7.
En moderationsbot fungerar bara medan den körs: HytHost Discord-bothosting stöder Python, Node.js och 5 andra runtimes, från €0.89/mån.
Se bothostingplanerVanliga frågor
För många servrar räcker AutoMod: det blockerar nyckelord, flaggade ord, spam med omnämnanden och misstänkt spam, och kan ge medlemmar timeout. Lägg till en bot när dina moderatorer behöver kommandon som purge och slow mode, egna regler eller en fullständig logg över åtgärder.
Bara de som dess kommandon använder: Moderate Members för timeouts, Kick Members, Ban Members, Manage Messages tillsammans med Read Message History för att radera meddelanden och Manage Channels för slow mode. Undvik att ge den Administrator.
Oftast är det rollordningen: boten kan bara agera mot medlemmar vars högsta roll ligger under dess egen, så flytta upp botens roll i Server Settings. Serverns ägare och medlemmar med Administrator kan inte få timeout alls.
Inte i klump. Discords massradering tar högst 100 meddelanden åt gången och bara meddelanden som är nyare än två veckor. Äldre meddelanden kan bara raderas ett i taget, vilket går långsamt.
Bara om den läser meddelanden själv, till exempel för att filtrera ord eller logga texten i raderade meddelanden. Slash-kommandon, timeouts, bans och purges fungerar utan den.
Hosta din moderationsbot
HytHost Discord-bothosting kör Python, Node.js, Java, Go, C#, Bun eller Lavalink, startar om boten efter en krasch och börjar på €0.89/mån.
Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hoursVar den här guiden till hjälp?