Punishments
Every punishment in Arclo — from a moderator's /ban, from an auto-moderation filter, from Security, from an automation — goes through one place, in one order. This is that order.
Three separate systems punish people: Moderation when a human decides to, Auto Moderation when a message trips a filter, and Security when somebody with power does too much too fast. Automations can too. All four call the same function, which is why a mute is a mute no matter who ordered it.
The order things happen in
Check immunity
Members holding an immune role, and anybody above Arclo in the role list, are refused here. Nothing further happens and the moderator is told why.
Check escalation
If the member has enough recent punishments of the right kind, the configured ladder replaces the requested action with a heavier one — three warnings in seven days becoming a mute, for example.
Open the case
A numbered case is created with the type, the target, the moderator, the reason, the duration and any evidence. Case numbers are allocated atomically, so two simultaneous bans cannot share one.
DM the member — before acting
The notice goes out first, deliberately. A banned member cannot receive a DM from a server they are no longer in, so telling them afterwards means not telling them at all.
Carry it out in Discord
Timeout, role, kick, ban — whatever the action is. A failure here is recorded on the case rather than swallowed.
Announce and log
An optional public announcement in the channel, and a log entry in your log channel, both of them designed messages you control.
Schedule the expiry
Timed punishments get an expiry that lifts them on schedule — including across restarts.
The actions
| Action | What it does | Can be timed |
|---|---|---|
| Warn | Records a case and notifies the member. Nothing changes in Discord. | No |
| Mute | A Discord timeout, or a mute role — your choice per server. | Yes |
| Kick | Removes the member. They can rejoin with a new invite. | No |
| Ban | Removes the member and blocks their return. | Yes |
| Softban | Ban then immediate unban — removes them and their recent messages. | No |
| Hardmute | Mute plus the removal of their roles, restored on unmute. | Yes |
| Voice mute / deafen | Only inside voice channels. | Yes |
| Lock / slowmode | Applies to a channel rather than a member. | Yes |
Durations
- Written the natural way:
30m,2h,1h30m,7d,2 weeks. A bare number means minutes. - Leaving a duration out uses the default configured for that punishment. Passing
permanent(or0) makes it permanent — the two are different, and Arclo keeps them different. - Discord timeouts cap at 28 days. A longer mute is renewed automatically before each cap expires, so a 90-day mute really is 90 days.
- Expiries survive restarts. A ban that should lift at 3am lifts at 3am whether or not anything else happened that night.
The exact parsing and formatting rules are on Durations and time zones.
Escalation ladders
A ladder counts a member's recent cases of a given type and, past a threshold, upgrades the punishment. Each rung names how many, of what, within how many days, and what to do instead.
Ladders apply to automatic punishments too
A filter that would warn somebody escalates exactly like a moderator's warning would, because it goes through the same entry point. That is usually what you want — and it is the reason to be careful with a filter that fires often.
Immunity
- Immune roles are set per punishment type, so “moderators can be warned but not banned” is expressible.
- Immunity is checked first, so an immune member never gets a case, a DM or a log entry from an attempt.
- Role hierarchy is enforced separately by Discord: Arclo cannot act on anybody above its own role however you configure it.
Undoing things
/unban,/unmuteand the rest open their own cases, so the history reads as a story rather than a list of punishments.- Unlocking a channel restores the previous permission state rather than clearing the overwrite — a channel that was already restricted for
@everyonestays that way. /case deleteremoves a case from the record. It does not undo what was done.- Security's protections carry an undo that rebuilds what an attack destroyed — deleted channels, stripped roles, mass bans.
Still stuck? Ask in the support server — somebody there has almost certainly configured this before.
