LegacyShell WikiLegacyShell Wiki
Back to LegacyShell
Home
Wiki
Plugins
Docs
Back to LegacyShell
Home
Wiki
Plugins
Docs
  • Documentation

    • Getting Started

      • What is LegacyShell?
      • Speed Setup
      • Requirements
      • Installation
      • First Run
      • Config Files
      • Making an Account
      • Troubleshooting (Getting Started)
    • Running a Server

      • Architecture Overview
      • The Database
      • Users and Ranks
      • Adding Game Servers
      • Client Mirrors
      • Perpetual
      • Backups
      • Rate Limiting
      • Moderation
      • Closed Mode
      • Deployment
      • Troubleshooting (Running a Server)
      • Hosting for Someone Else's Instance
    • Content Creation

      • Maps
      • Dealing with Babylon Models
      • Map Blocks
      • Items and Skins
      • Hats and Stamps
      • Sounds
      • Gamemodes
      • Seasonal Events
    • Plugin Development

      • Quickstart
      • I Want To...
      • Anatomy of a Plugin
      • Lifecycle
      • Dependencies
      • Events (Concept)
      • Event Reference

        • services: events
        • game: events — shared logic (src/shell/)
        • game: events — main-thread server process
        • game: events — per-connection client object
        • game: events — room lifecycle & tick loop
        • game: events — in-browser gameplay
        • client: events — client server & build pipeline
      • Commands
      • Client-Side Code
      • Static Assets
      • Content Packs
      • Networking
      • Workers and State
      • Prediction and Authority
      • Recipes

        • Recipe: Killstreaks
        • Recipe: New Pickup Item
        • Recipe: New Gamemode
        • Recipe: Custom Weapon
        • Recipe: UI Modification
        • Recipe: Discord Integration
        • Recipe: Replacing Core Behaviour
        • Recipe: Persistent Plugin Storage
        • Recipe: Rewarding Players with Currency
        • Recipe: Custom Per-Player Data
        • Recipe: Custom Theme
      • Publishing
      • Pitfalls
      • Modifiers
      • Sound and Apollo
    • Codebase Reference

      • Repo Layout
      • Shared Shell Layer
      • Server-Only Markers
      • The ss Object
      • Build Pipeline
      • Stamps and Babylons
      • Game Loop
      • Rooms and Workers
      • Wire Protocol
      • Generated

        • Wire Protocol Opcodes
        • Enums & Lookup Tables
        • Database Schema
        • Config Reference
        • Slash Command Reference
      • Services Internals
      • Catalog and Items
      • Permissions Internals
      • Physics and Collision
      • Known Quirks
      • Codebase Anecdotes
      • Development Timeline
    • Contributing

      • Documentation Style Guide
      • Generators
      • For AI Agents

Moderation

Audience: Server operators · Prereqs: Users and Ranks

Canonical source: src/shell/permissions.js

Practical, day-to-day moderation - what commands actually exist, and what to reach for when something goes wrong in a room.

Setting up moderators

Grant the Moderator rank (10) to trusted players via the database - see Users and Ranks:

UPDATE users SET adminRoles = 10 WHERE username = 'someone';

At Moderator rank or above, a player can use every command tagged Moderator in the generated slash command reference - which is most of the built-in room-management surface: boot, notify, enableCheats, limit, warpall, lock, rounds enable/length/skip, time day/night, weather rain/storm/snowstorm, and every change command (gravity, speed, scale, etc. - see Modifiers for exactly what each one does and how @a/@t/@o scoping works).

The commands you'll actually use

The full list with exact permission tuples lives in the generated slash command reference - these are the ones day-to-day moderation actually reaches for:

  • /mod boot @player - disconnects a player from the current room. This is a kick, not a ban - see Users and Ranks for what that means in practice and what your real options are if you need something more permanent.
  • /room notify <message> - broadcasts a message to everyone currently in the room, useful for warning a player before booting them, or announcing a rule.
  • /room lock true - stops new players from joining the room (existing players are unaffected).
  • /room enableCheats false - make sure this is off in any room you don't want the change-category commands (gravity, speed, etc.) usable at all, even by players who'd otherwise have permission.
  • /admin announce <message> - Admin rank only; sets the homescreen announcement text server-wide, not scoped to one room. Use for site-wide notices (maintenance windows, etc.), not in-room moderation.

Seeing who's in a room

There's no dedicated "who's online" admin panel - /room info (Guest rank, so any player can already run it) shows current room info, and the room's own player list is visible in the normal in-game UI. For anything beyond that (cross-room visibility, a server-wide player list), you'd be looking at either the web SQL tool against live session data, or building it as a plugin - see Plugin Development if you need this regularly.

Public vs. private rooms change what's enforceable

Remember the permission-tuple rule from Users and Ranks: in a public room, only the command's top-level bypassRank tier can use it at all - the private-room allowance never applies. This means a Moderator can /mod boot someone in any public room, but a regular player's private room already grants them elevated command access within their own room by design (that's the whole point of private rooms - /change speed, etc. are meant to be player-controlled fun there). Don't be surprised that a report of "someone was messing with gravity in their own private room" isn't actually a moderation issue - that's intended behavior, not a hole to close.

Database-level moderation

For anything the command system doesn't cover - editing a player's stats, resetting their inventory, actually removing their access - see The Database directly, or its web SQL tool if you don't have filesystem access to the services machine. The web tool's template dropdown includes several ready-made queries for exactly this ([users] Set User Admin Role, [users] Update User Username, [users] Delete User by Account ID, etc.).

Common Issues

A command says "Insufficient permissions" even though I just granted the rank. The player needs to actually re-log (or at least have their session refresh) for a database-level adminRoles change to take effect - it's read at login/session-resolution time, not polled live.

I booted someone and they immediately rejoined. Expected - boot is a kick, not a ban. See Users and Ranks for real options if this is a recurring problem with one player.

Next: Closed Mode.


This page was drafted with AI assistance and reviewed for accuracy. If something looks wrong, please open a PR or flag it.

Edit this page on GitHub
Prev
Rate Limiting
Next
Closed Mode