Discord · Anleitung

Einen Discord-Moderationsbot erstellen

Aktualisiert October 11, 2026 6 Min. Lesezeit

Auf dieser Seite
  1. Fang mit Discord AutoMod an
  2. Was ein eigener Moderationsbot zusätzlich bringt
  3. Berechtigungen, Rollenreihenfolge und Intents
  4. Moderationsbefehle in Python (discord.py)
  5. Ein Timeout-Befehl in JavaScript (discord.js)
  6. Festhalten, was passiert
  7. Den Bot online halten
  8. FAQ

Ein aktiver Discord-Server braucht eine Moderation, die nie schläft: Spamfilter, schnelle Timeouts, eine Möglichkeit, eine Nachrichtenflut auf einen Schlag zu entfernen, und eine Aufzeichnung, wer was getan hat. Einen Teil davon bekommst du mit AutoMod kostenlos von Discord, den Rest übernimmt ein kleiner eigener Bot.

Dieser Guide beginnt mit AutoMod, weil das vielleicht schon alles ist, was du brauchst. Danach baut er Moderationsbefehle in Python (discord.py) oder JavaScript (discord.js) und erklärt die Berechtigungen, Intents und Logs, die dafür nötig sind.

Fang mit Discord AutoMod an

AutoMod ist in Discord eingebaut und läuft auf Discords Seite, funktioniert also auch dann, wenn gerade kein Bot online ist. Öffne Server Settings → AutoMod; dafür brauchst du die Berechtigung Manage Server. Das bietet AutoMod:

  • Eigene Wortfilter mit deinen Schlüsselwörtern, Platzhaltern und regulären Ausdrücken.
  • Häufig gemeldete Wörter: fertige Listen für Schimpfwörter, sexuelle Inhalte und Beleidigungen.
  • Erwähnungsspam: greift, wenn eine Nachricht zu viele Personen auf einmal erwähnt, ab einem Limit, das du festlegst.
  • Spam-Inhalte: Discords eigene Erkennung von mutmaßlichem Spam.
  • Filter für Mitgliederprofile: Schlüsselwörter, die in Benutzernamen und Profilen geprüft werden.

Für jede Regel legst du fest, was passiert: Nachricht blockieren, eine Warnung in einen Moderatorenkanal schicken oder dem Mitglied ein Timeout geben. Rollen und Kanäle kannst du ausnehmen. Mitglieder mit Manage Server oder Administrator werden nie gefiltert.

Wenn dein Problem Spam, Beleidigungen und Massenerwähnungen sind, richte zuerst AutoMod ein und schau, ob das reicht. Ein eigener Bot lohnt sich, wenn du Befehle für deine Moderatoren, eigene Regeln und ein ordentliches Log willst.

Was ein eigener Moderationsbot zusätzlich bringt

  • Slash-Befehle für Moderatoren: /timeout, /purge, /slowmode, Kick und Ban, jedes Mal mit festgehaltenem Grund.
  • Einen Mod-Log-Kanal mit Beitritten, Austritten, gelöschten Nachrichten und jeder Aktion deiner Moderatoren.
  • Eigene Regeln: Verwarnungen, die sich zu einem Timeout summieren, neue Accounts, die zurückgehalten werden, Links nur in bestimmten Kanälen.
  • Alles an einem Ort, auf deine Community zugeschnitten statt auf die Standardeinstellungen eines öffentlichen Bots.

Wenn du noch nie einen Bot gebaut hast, folge zuerst einen Discord-Bot erstellen, um die Anwendung anzulegen, den Token zu holen und einen ersten /ping-Befehl laufen zu lassen. Der Code unten baut darauf auf.

Berechtigungen, Rollenreihenfolge und Intents

Lade den Bot nur mit den Berechtigungen ein, die seine Befehle auch nutzen:

AktionBerechtigung
Mitglied in Timeout schicken (bis zu 28 Tage)Moderate Members
Mitglied kickenKick Members
Mitglied bannenBan Members
Nachrichten löschenManage Messages und Read Message History
Slowmode setzenManage Channels

Die Rollenreihenfolge zählt. Ein Bot kann nur gegen Mitglieder vorgehen, deren höchste Rolle unter der höchsten Rolle des Bots liegt. Zieh in Server Settings → Roles die Rolle des Bots über die Rollen, die er moderieren soll. Den Serverbesitzer oder einen Administrator kann niemand in Timeout schicken.

Intents. Slash-Befehle brauchen keinen privilegierten Intent. Zwei sind für die Moderation nützlich: Server Members für Logs von Beitritten und Austritten, und Message Content, wenn der Bot Nachrichten selbst liest, um sie zu filtern. Du aktivierst sie unter Bot → Privileged Gateway Intents im Developer Portal. Seit Juni 2026 prüft Discord sie nur noch bei Apps, die mehr als 10.000 Nutzer erreichen; darunter genügt der Schalter.

Moderationsbefehle in Python (discord.py)

Mit installiertem discord.py 2.7 (pip install discord.py) fügt diese bot.py die Befehle /timeout, /purge und /slowmode hinzu:

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 blendet jeden Befehl für Mitglieder ohne die jeweilige Berechtigung aus. Serveradmins können unter Server Settings → Integrations ändern, wer ihn sieht. Die Grenzen im Code sind die von Discord: 40.320 Minuten sind 28 Tage, Slowmode geht bis zu 6 Stunden.

Ein Timeout-Befehl in JavaScript (discord.js)

Mit discord.js 14 (npm install discord.js) sieht derselbe /timeout-Befehl so aus. moderatable prüft die Rollenreihenfolge und die Berechtigung des Bots, bevor er es versucht:

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 und Ban funktionieren nach demselben Muster mit member.kick(reason) und member.ban({ reason, deleteMessageSeconds }). Ein Ban kann außerdem die Nachrichten des Mitglieds aus bis zu 7 Tagen löschen.

Festhalten, was passiert

  • Gib immer einen Grund an. Die Bibliotheken schicken ihn an Discords Audit-Log (Server Settings → Audit Log), das Einträge 45 Tage lang aufbewahrt.
  • Poste jede Aktion zusätzlich in einen privaten Mod-Log-Kanal: wer gehandelt hat, gegen wen, warum und wie lange. Anders als das Audit-Log behält er den Verlauf so lange, wie du willst.
  • Beitritte und Austritte brauchen den Intent Server Members; logge das Erstellungsdatum des Accounts, um frische Wegwerf-Accounts zu erkennen.
  • Gelöschte und bearbeitete Nachrichten lassen sich nur mit ihrem Text loggen, wenn der Bot den Intent Message Content hat.

Denk an das Limit beim Massenlöschen: Discord löscht höchstens 100 Nachrichten pro Aufruf und verweigert Nachrichten, die älter als zwei Wochen sind. /purge ist also für frischen Spam gedacht, nicht zum Ausräumen eines alten Kanals.

Den Bot online halten

AutoMod arbeitet auch ohne dich weiter, aber deine Befehle und Logs stoppen in dem Moment, in dem der Prozess des Bots stoppt. Ein Moderationsbot auf dem Heim-PC ist genau dann offline, wenn der PC in den Ruhezustand geht, und Raids warten selten auf die Bürozeiten.

Beim HytHost Discord-Bot-Hosting lädst du das Projekt hoch, wählst die Runtime (Node.js, Python, Java, Go, C#, Bun oder Lavalink) und hinterlegst den Token in einer Startvariable statt im Code. Das Panel startet den Bot und startet ihn nach einem Absturz neu. Die komplette Einrichtung steht in einen Discord-Bot 24/7 hosten.

Ein Moderationsbot wirkt nur, solange er läuft: Das Discord-Bot-Hosting von HytHost unterstützt Python, Node.js und 5 weitere Runtimes, ab €0.89/Monat.

Bot-Hosting-Tarife ansehen
FAQ

Häufig gestellte Fragen

Für viele Server reicht AutoMod: Es blockiert Schlüsselwörter, gemeldete Wörter, Erwähnungsspam und mutmaßlichen Spam und kann Mitglieder in Timeout schicken. Nimm einen Bot dazu, wenn deine Moderatoren Befehle wie Purge und Slowmode, eigene Regeln oder ein vollständiges Log aller Aktionen brauchen.

Nur die, die seine Befehle nutzen: Moderate Members für Timeouts, Kick Members, Ban Members, Manage Messages zusammen mit Read Message History zum Löschen von Nachrichten und Manage Channels für Slowmode. Gib ihm möglichst kein Administrator.

Meist liegt es an der Rollenreihenfolge: Der Bot kann nur gegen Mitglieder vorgehen, deren höchste Rolle unter seiner eigenen liegt. Schieb die Rolle des Bots also in den Server Settings nach oben. Den Serverbesitzer und Mitglieder mit Administrator kann man überhaupt nicht in Timeout schicken.

Nicht in großen Mengen. Discords Massenlöschung nimmt bis zu 100 Nachrichten auf einmal an, und nur solche, die jünger als zwei Wochen sind. Ältere Nachrichten lassen sich nur einzeln löschen, und das dauert.

Nur wenn er Nachrichten selbst liest, etwa um Wörter zu filtern oder den Text gelöschter Nachrichten zu loggen. Slash-Befehle, Timeouts, Bans und Purge funktionieren auch ohne ihn.

Hoste deinen Moderationsbot

Das HytHost Discord-Bot-Hosting führt Python, Node.js, Java, Go, C#, Bun oder Lavalink aus, startet den Bot nach einem Absturz neu und beginnt bei €0.89/Monat.

Live chat 8 AM – 11 PM (Chișinău time) · tickets answered during business hours

War diese Anleitung hilfreich?