DUXPLIMA Documentation

Moderation

Bans, mutes, warnings with an auto-action, notes and the two kinds of jail.

Bans

Bans go through Roblox's own ban API rather than a kick loop of the system's own, which means they are enforced by the platform, cover alternate accounts as far as Roblox can tell, and apply across the whole universe.

CommandRankDoes
banHeadAdminPermanent
tempbanHeadAdminFor a duration
directBanHeadAdminBy username or user id, works while they are offline
banallOwnerEverybody below you
unbanHeadAdminLifts a ban

Every ban carries two reasons: a display reason the player sees, built from the message templates, and a private reason naming the admin who issued it.

BanDisplayReason     = "You are banned from this game. Reason: $reason",
TempBanDisplayReason = "You are temporarily banned from this game. Reason: $reason | Duration: $duration",
Bans apply to the whole universe

ApplyToUniverse is set, so a ban issued in one place bans the player from every place in the experience.

That is almost always what you want, and it is worth knowing before you hand the ban command to somebody who only administers one of your places.

checkban looks a user's Roblox ban status up without changing anything, which is the command to reach for before you argue with somebody about whether they were banned here.

Mutes

CommandRankDoes
muteAdminPermanent
tempmuteAdminFor a duration
unmuteAdminLifts it
muteallHeadAdminEverybody at once
unmuteallHeadAdminLifts them all

Mutes are the system's own, stored on the punishment profile with the reason and the admin who issued it. A muted player is muted again the moment they rejoin, checked on join against the stored expiry.

punish is the soft option: one warning plus a fifteen minute mute, at Mod rank, for the cases that do not deserve a moderator's full attention.

Warnings

WarnThreshold       = 3,
WarnAutoAction      = "kick",
WarnAutoBanDuration = 86400 * 7,
CommandDoes
warnAdds a warning with a reason
unwarnRemoves the most recent one
warnsShows the history

When the count reaches WarnThreshold, WarnAutoAction fires:

ValueEffect
"none"Record only
"kick"Kick on the threshold-th warning
"tempban"Ban for WarnAutoBanDuration seconds
"ban"Permanent ban

WarnThreshold = 0 disables the automatic action entirely and leaves warnings as a record.

Three strikes is a policy, not a default to leave alone

The shipped setup kicks on the third warning, which is gentle. "tempban" with a day or a week is the setting most roleplay games end up on, because a kick is not a consequence to somebody who was leaving anyway.

Whatever you choose, tell your moderators: they are the ones issuing the third warning.

Warnings are stored per user id and work on players who are offline, so a moderator reviewing a report the next day can still act.

Notes

CommandDoes
noteLeaves an admin note on a player, offline included
unnoteRemoves one by index
notesLists them

Notes carry no penalty. They are the memory of your moderation team: "argued with staff on the 3rd", "claims to be a friend of the owner". A player never sees them.

Jails

Two kinds, and the difference matters.

CommandRankCellSurvives
jailAdminA private cell cloned from Storage/Builds/JailCellThe session
sendjailAdminThe shared PublicCell you place in the worldA rejoin
unjailAdminReleases from either

jail builds the cell around the player and destroys it on release. sendjail stands them on the public cell's spawn part and, because the jail state is saved when they leave and restored when they return, follows them across sessions.

Both are swept every five seconds for expiry, and again when a player joins or respawns.

Both cells are yours to build

Storage/Builds and the world folder ship empty. Without a JailCell model containing a SpawnPart, the jail command tells the admin the model is missing and does nothing; sendjail says the same about PublicCell.

A cell that is not actually a sealed box is a jail a player can walk out of. The system places them, it does not contain them.

Chat spying

chatHijacker copies a player's chat messages to the admin who ran it, and unchathijack stops it. Head Admin and above.

This is surveillance, and it is silent

The target is not told, and nothing on their screen changes. Whether that is acceptable depends on your game and on the laws that apply to your players.

Keep it at Head Admin or raise it further, and make sure your moderation team knows when it is appropriate to use. The action is logged, so the log is your accountability.

Where punishments are stored

StoreHolds
PlayerPunishmentData_v2Bans, mutes, warnings, notes, punishment history
PlayerJailDataJail state per user
uxrAPS_PermRanks_v1Persistent rank overrides
Two of those names are not namespaced

PlayerPunishmentData_v2 and PlayerJailData are generic names with nothing identifying this system in them.

If another system in your game happens to use the same DataStore name, the two will overwrite each other's rows. Check before you install a second admin or moderation system, and rename here if you find a collision.

What the target sees

ActionThey get
KickThe kick message with the reason
BanRoblox's own ban screen with the display reason
MuteTheir chat stops working, silently
WarningNothing by itself, unless your own code reacts
JailThey are standing in a cell

Nothing here announces itself to the rest of the server. Announcements are a separate decision, and the messaging commands are how you make it.