The sanctions
Every command below leaves a record, posts to the mod-log and, where relevant, tells the member what happened. The reply in the channel is short on purpose: who was sanctioned, what was done, and the case number when there is one.
A reason is accepted on every command and is capped at 1500 characters. It
is optional everywhere except /note (where it is the note) and
/case revoke.
Reason presets
Write a reason once and use it by its key. On the dashboard, Moderation →
Reason presets keeps up to 50 presets per server: a key, one word such as
P1 or spam, and the text it stands for, with variables.
Type the key as the first word of a reason and FlaviBot records the preset's
text instead. With a preset P1 whose text is
Spamming (rule 1), banned by {moderator}: {details}:
/ban user: @Alex reason: P1 spam in #general
bans Alex with the reason "Spamming (rule 1), banned by Mod: spam in #general". The case, the DM, the mod-log, Discord's audit log and the reply all carry that text.
- Keys ignore case:
p1callsP1. A first word that is not one of your keys leaves the reason exactly as you typed it. - What you write after the key is
{details}. When the text has no{details}, it is added at the end after a dash. - Typing in the
reasonbox lists your presets, the ones whose key starts with what you typed first. Pick one, then keep typing the details. - A preset can carry a default duration, used by
/muteand/tempbanwhen you give none:/mute user: @Alex reason: P1. A duration you type wins. With a prefix,!mute @Alex P1 floodingworks too. - Presets apply to the commands on this page only. AutoMod, autoresponder actions and auto-escalation keep their own reasons.
- Discord's audit log keeps the first 512 characters of a reason. A longer text is cut there, and only there.
| Variable | Becomes |
|---|---|
{user} | the member's display name, as plain text |
{user.name} | their username |
{user.id} | their ID |
{user.mention} | a mention of the member (the audit log shows it as a raw mention) |
{moderator}, {moderator.name}, {moderator.id}, {moderator.mention} | the same, for the moderator who ran the command |
{server} | the server's name |
{duration} | the mute or tempban duration in words (1 hour), empty for any other sanction |
{date} | today's date, YYYY-MM-DD in UTC |
{details} | what you typed after the key |
A variable FlaviBot does not know stays as typed, and the preview under the text field shows exactly what a sanction would record.
Durations
/mute and /tempban take a duration written as one number and one unit
(or none, when a reason preset gives one):
| Unit | Means | Example |
|---|---|---|
s | seconds | 30s |
m | minutes | 10m |
h | hours | 1h |
d | days | 7d |
w | weeks | 2w |
Combinations like 1h30m are not accepted. Round to the nearest single unit
(90m works).
Note
/note user <reason> writes a private staff observation (the reason option is the note text).
- the member is never told, and nothing changes on Discord
- the reply is visible only to you
- it does not count as a strike toward auto-escalation
- it appears in the mod-log only if you turned on "Show notes in mod-log"
Use it for context you want the next moderator to have: "warned verbally", "says they share the account with a sibling".
Warn
/warn user [reason] records a formal warning. The member is sent a DM by
default, the case lands in the mod-log, and the warn counts as an active strike
until it is revoked or it decays.
Warns are what drive auto-escalation: a member who reaches the threshold you configured is sanctioned automatically.
Mute (Discord timeout)
/mute user [duration] [reason] applies Discord's native timeout, so the member
can no longer talk, react or join voice. The duration is required unless the
reason calls a preset that has a default one. It is Discord's own mechanism, not a
muted role, so nothing to set up and nothing to clean up.
Discord caps timeouts at 28 days. Ask for more and the command refuses and
points you to /tempban.
A mute records a warn as well as the timeout, so it counts as a strike, unless an auto-escalation rule is set to count direct warns only.
/unmute user [reason] lifts it. That is a reversal: no new case number, and
the original mute is marked as reverted in the history.
Kick
/kick user [reason] removes the member from the server. They can come back
with a new invite.
The DM goes out before the kick, because once someone is out of the server the bot can no longer open a conversation with them.
Ban
/ban user [reason] [delete_messages_days] bans permanently.
delete_messages_days accepts 0 to 7 and defaults to 0. It is Discord's own
message purge: set it to 1 to wipe the last day of the banned member's messages.
Here too the DM is sent before the ban. If the target is not on your server (a ban by ID of someone who never joined), the DM is skipped, the ban still happens.
Tempban
/tempban user [duration] [reason] [delete_messages_days] is a ban that lifts
itself (the duration, as for /mute, may come from a preset). FlaviBot schedules the unban when it applies the ban, so it survives a
bot restart: the countdown is stored, not held in memory.
Unlike /mute, there is no 28 day ceiling. This is the command for a suspension
measured in weeks or months.
If you unban the member by hand before the timer runs out, the pending automatic unban is cancelled, so the member is not "unbanned twice". And if the ban is applied on Discord but FlaviBot fails to record it, the ban is lifted back rather than left in place forever with no timer attached.
Softban
/softban user [reason] [delete_messages_days] bans and immediately unbans. The
point is not the ban, it is the message purge that comes with it: it is the fast
way to clear a spam or raid flood from a member you want to let back in.
delete_messages_days defaults to 7 here (the maximum), where /ban
defaults to 0.
If the ban goes through but the unban step fails, the command tells you so
explicitly and asks you to run /unban. The member is left banned until you do,
which is rare but worth knowing.
Unban
/unban user_id [reason] takes a user ID, not a mention, because the person
is not on the server to be picked from a list.
It lifts the ban, marks the original ban or tempban as reverted, and cancels a tempban's pending automatic unban if one was scheduled.
Calling them without a slash
If you use FlaviBot with a message prefix rather than slash commands, mute
also answers to timeout, and unmute to untimeout.
