Punishments

Punishments

Command permissions normally use wrongpunish.<command>. Root subcommands use wrongpunish.reload, wrongpunish.admin, or wrongpunish.modify. /wrongpunish template also permits staff authorized for that template.

  • wrongpunish.unban.own, .unmute.own, .unwarn.own: remove only punishments issued by that actor; the full removal permission permits all eligible issuers.
  • wrongpunish.history.revoke or .history.revoke.ban|mute|warn permits shift-click revocation through history or banlist. wrongpunish.warnings.revoke controls warning-screen revocation. wrongpunish.history.deleted permits removed/hidden history. Backend operators receive these defaults; issuer/target hierarchy still applies. Console-issued records require console or an explicit hierarchy bypass.
  • wrongpunish.exempt and .exempt.ban|mute|warn|kick: protect targets. .exempt.bypass and .exempt.bypass.<family> override protection and hierarchy.
  • LuckPerms inherited group weights enforce staff hierarchy. Equal positive weights are protected unless allow-same-weight is enabled. Offline permission/hierarchy data requires LuckPerms; without it, online permissions are obtained on the owning player scheduler.
  • IP issuance also checks exemptions and hierarchy for known accounts using that address, including a literal-address target. The lookup is bounded to 1,000 accounts; larger associations require console authority or an explicit global exemption bypass. Newly observed or unknown accounts cannot be evaluated in advance.
  • Duration limits use LuckPerms groups or wrongpunish.limit.<group>. The largest permitted limit applies; an applicable permanent limit permits permanent punishments. Console bypasses limits. Extension mode checks the resulting combined duration as well as the requested duration.
  • wrongpunish.silent permits explicit silent flags. Silent policy broadcasts are delivered only to wrongpunish.notify.silent; public broadcasts receive no silent events.
  • wrongpunish.scope permits explicit scope overrides. Policies may choose their own scope without this extra command permission.
  • wrongpunish.notify / .notify.broadcast receive staff notices; .notify.alts receives relationship alerts.
  • wrongpunish.iphistory and wrongpunish.ipreport control sensitive address output. Ordinary history and Discord payloads omit address fields.
  • wrongpunish.lockdown.bypass permits staff admission during lockdown. Configure LuckPerms on Paper for admission-time offline bypass lookup.
  • Rollback and pruning have dedicated permissions and confirmations bound to the actor and target selection. Pruning now hides inactive records, records who/when/why, audits the bulk SQL mutation and refreshes network views. Punishment, escalation and audit records are retained.

Granting wrongpunish.* includes exemptions and bypasses, so it is intended for trusted administrators. It is not a routine moderator preset. Group permission examples live in docs/PERMISSIONS.md.

REJECT remains the default for manual/different-template duplicates. Same-template continuation uses the overlap policy described above. Manual REPLACE retains removal metadata; manual EXTEND adds to the longest expiration. Shorter replacements remain protected unless explicitly enabled. Manual warnings remain separate entries; kicks are immediately inactive history records.

Durations and flags

Shared punishment flags: -s, --silent, --ip, --server=<server>, --scope=<scope>, --reason="some reason". Template IP mode is controlled by its policy, not an --ip override. Aliases are configured under commands.aliases and updated on reload; canonical names remain available. Alias collisions and malformed names cause validation failure.

Durations: s, m, h, d, w, mo, y; combinations such as 1d12h; readable forms such as 30 minutes, 3 months; and permanent, perm, forever. A month is a fixed 30 days and a year is 365 days. Temporary command variants require a finite duration. Numeric input is overflow-checked, and the maximum supported duration is 100 years.

See Commands for issuance and removal syntax.