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:
- Moderator-Rollen (moderator roles) — who may warn, mute and kick.
- Admin-Rollen (admin roles) — who may also ban and unban.
- 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 akteare 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.
- 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.
- Enter the ID, tick the commands, save.
- 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
