Moderation

Actions, logs and permissions — all under one roof, with case numbers and a single record.

In Fishbot, moderation consists of three parts, and you will find them in the dashboard under Moderation as three entries below one another:

Part What for
Maßnahmen (actions) Who may moderate, how long warnings stay valid, what happens automatically
Logs The record — your own cases and everything else that happens on the server
Rechte (permissions) Give individual commands to individual people without giving away "Server verwalten" (manage server)

Maßnahmen and Logbuch (the server log) used to be two separate modules. That led to a duplication nobody recognised as one: a ban via /mod ban wrote a case to the modlog — and Discord reported the same ban to the log independently of that. Two channels, two settings, two messages, the second of which knew less than the first. Today it is one record.


Maßnahmen

Setting it up

/mod setup (or /setup modul:Moderation). Three things are worth doing right away:

  1. Moderator-Rollen (moderator roles) — who may warn, mute and kick.
  2. Admin-Rollen (admin roles) — who may also ban and unban.
  3. Kanal für Fälle (channel for cases) — where every action is recorded.

Everything else has sensible defaults and can wait.

The bot also always accepts Discord's own permissions. So anyone who has Mitglieder moderieren (moderate members) can warn people before you have entered a single role.

The commands

/mod warn      mitglied grund
/mod timeout   mitglied grund [dauer]
/mod untimeout mitglied [grund]
/mod kick      mitglied grund
/mod ban       mitglied grund [nachrichten_loeschen]
/mod unban     benutzer_id [grund]
/mod purge     anzahl [nur_von]
/mod akte      mitglied

The dauer (duration) is read exactly as you type it: 30m, 2h, 7d — or a bare number for minutes. Leave it out and the bot takes the default duration from the settings. Discord's limit is 28 days.

Case numbers

Every action gets a consecutive number: Fall #1 (case #1), #2, and so on, per server. The number appears in the reply, in the record and in the DM to the person affected. /mod akte shows every entry for a member with reason, date and the person who carried it out.

Warnings and the automatic step

In the settings you define how many warnings lead to a penalty and which one that is — mute, kick, ban or only report. The bot counts only active warnings: after the configured number of days they expire by themselves (90 days by default, 0 switches expiry off).

After every warning, the reply says where the person currently stands — for example "Aktive Verwarnungen: 2/3" (active warnings).

Protected roles

Anyone wearing a protected role is not touched by the bot — no matter who issues the command. Useful for team roles, so that nobody accidentally moderates one of their own.

On top of that, Discord's own rules always apply: the bot cannot touch anyone who stands above it in the role list. If an action fails because of that, it says so in plain words — then move the bot role further up in the server settings.

Cleaning up

/mod purge anzahl:50 deletes the last 50 messages in the channel, nur_von restricts that to one person. Discord only allows this for messages younger than 14 days — older ones stay, and the bot tells you.


Logs

The record answers the questions that always come up afterwards: who deleted this channel? When did someone give the new member the admin role? Had the person who was thrown out yesterday even been around for long?

What an entry looks like

Like a system message from Discord: a colour bar on the left, a symbol, one sentence — and the details below it on one line.

➕  @neues-Mitglied ist beigetreten
    Konto 5 Monate alt · Mitglied Nr. 348

🔨  spammer wurde gebannt
    Fall #12 · durch @Timo · Grund Werbung per DM

Every type has its own colour and its own symbol — a ban is a hammer in dark red, a kick a boot in orange, a join a plus in green, voice channels in turquoise. The point is not decoration: in a channel where joins, roles and bans run into one another, you recognise the type from the edge before you read the line.

Setting it up

In the dashboard under Moderation → Logs, or in Discord with /logbuch setup. You enter channels — one per area. An area without a channel is off; that is the switch.

Area What goes into it
Mitglieder (members) joins with account age, departures with time served and last roles
Rollenwechsel (role changes) who got or lost which role
Namensänderungen (name changes) server nickname and username
Moderation your cases with case number, bans done by hand past the bot — and deleted messages, if you want
Server-Änderungen (server changes) channels, roles, emojis, server settings
Sprachkanäle (voice channels) who entered, left or switched which channel — can be switched off one by one, see below
Schutz (protection) anti-nuke, quarantine, threat level, raid protection

Rollenwechsel and Namensänderungen end up in the Mitglieder channel if you do not give them one of their own. Nobody should have to create six channels just to get started.

Moderation deliberately does not fall back. A ban does not belong by accident in a channel that everyone can read.

No duplicate entries

If you ban via /mod ban, one entry appears: the case, with number, moderator and reason. Discord does report the same ban independently — but the bot leaves that poorer report out, because it knows it was the one who did it. If, on the other hand, someone bans by hand through the Discord menu, the ban still appears in the record, only without a case number. That is exactly what this part is for: it also sees what goes on past the bot.

What your plan can do

Your own cases — everything that runs through /mod — are recorded in every plan, including the free one. What Discord itself reports — joins, departures, role changes, name changes, channels, voice channels and bans done by hand — belongs to the Fishbot plan.

What is not in it

The ongoing conversation. What gets written does not appear in the log — only what happens to the server. A log that writes down every message is a recording, and that is not what it is meant to be.

The one exception you set yourself: deleted messages.

Deleted messages

Under "Was ausgelassen wird" (what gets left out) you will find the switch Gelöschte Nachrichten protokollieren (log deleted messages) — with three levels: not at all (the default), only that something was deleted, or with the wording.

An entry is made only when someone deletes another person's message. Anyone who removes their own does not show up. That is not a setting, it is Discord: an audit entry showing who deleted something exists only for other people's deletions. Without it Fishbot writes nothing — better no entry than every self-correction as a moderation case.

/mod purge produces one line instead of twelve, and the case with number and reason is in the log anyway.

With mit Wortlaut (with the wording) the text of the deleted message appears in the channel. In a dispute that is exactly what you need — and at the same time the only thing Fishbot records nowhere else. Think about who may read that channel.

Otherwise Fishbot only reads message texts where a module needs them: in the ticket transcript, in the starboard entry and for the keyword reactions. Only the ticket transcript is stored, and only for as long as you set.

"durch: unbekannt" (by: unknown) on bans

With a ban, Discord does not report who triggered it — that is only in the audit log. The bot looks there if it has the Audit-Log einsehen (view audit log) permission. If it is missing, the ban is recorded all the same, only without a name. An entry without an author is better than none.

Switching off individual event types

An area without a channel is off — that is the coarse switch. Sometimes, though, you want to keep the area and only get rid of the noise: on large servers, entering and leaving a voice channel are ninety per cent of all entries, and the move into the meeting room gets lost among them.

For that, under "Was ausgelassen wird" there is the list Diese Ereignisse nicht protokollieren (do not log these events). Everything without a tick is logged; a tick means this type goes neither into the channel nor into the dashboard. In the dashboard all types are listed by area with checkboxes, in the Discord panel in two select lists.

If you tick a moderation type, it only disappears from the record. The case stays: case number, reason, the person who carried it out and /mod akte are untouched by it.

Exceptions and looking things up

Under "Was ausgelassen wird" you can also exclude channels and hide bots. The latter is on by default — otherwise other bots produce the bulk of the entries.

The same entries also appear in the dashboard under Logbuch, searchable there and filterable by person. How long for is set with "Im Dashboard aufbewahren" (keep in the dashboard, 30 days by default).

/logbuch test sends a sample entry into every configured area — if nothing arrives, the bot lacks write permissions there.


Rechte

The problem

For almost everything Fishbot configures, Discord knows only one permission: Server verwalten. Anyone who has it may rename the server, delete channels and move roles. If someone is only meant to adjust the welcome text, they would have to get all of that as well — or they get nothing at all.

The solution

In the dashboard under Moderation → Rechte you turn it around: you enter a person and tick exactly the commands they may use. Nothing changes about the Discord permissions, and it is withdrawn in one click.

  1. In Discord, right-click the person → ID kopieren (copy ID). If that item does not appear, Entwicklermodus (developer mode) has to be switched on under Einstellungen → Erweitert first.
  2. Enter the ID, tick the commands, save.
  3. In Discord it takes effect within half a minute.

After that the person can use the command as if they had the permission — the buttons in the settings window work for them too. But they only see what you have ticked.

What cannot be handed out

/setup and /sicherung are deliberately not on offer. One of them can reconfigure every module, the other can restore half the server. Neither is a job you delegate — anyone who is to do it needs Server verwalten.

Not to be confused with

Zugänge (access) decides who may open the website — for a limited time and restricted to individual modules. Rechte decides who may type a command in Discord. The one is independent of the other: you can give someone the commands without opening the dashboard for them, and the other way round.

Last updated: 13 October 2026