Players and Moderation

See who is online, kick players, search player history and profiles, apply warns, mutes, kicks and bans, and work through in-game reports.

9 min read

Two Players pages#

The game sidebar has two entries called Players, and they do different jobs:

Sidebar entryURLWhat it is for
Live → Players/dashboard/{gameId}/players-onlineWho is connected right now, with a Kick button per player, plus the live activity stream
Data → Player Search/dashboard/{gameId}/playersEveryone seen in the last 30 days, searchable by name, leading to a per-player profile

Data → Moderation (/dashboard/{gameId}/moderation) is the third piece: every sanction across the game, their history, and the queue of player reports.

All three depend on your game server being hosted on the platform. The roster comes from the running server, activity and profiles come from the events it records, and sanctions are delivered to it. A game that has never launched has nothing to show here; see Launch and hosting.

Who can do what#

ActionRoles
View online players, activity, player search and profilesOwner, Developer, Moderator, Support
Kick from the online rosterOwner, Developer, Moderator
Open the Moderation pageOwner, Moderator
Create or revoke a sanction, resolve a reportOwner, Developer, Moderator

The Moderation entry is hidden from Developers and Support because it is gated on the mod.act capability, which only Owner and Moderator carry. The Sanctions tab on a player profile is visible to everyone who can see the profile, but a Support member's attempt to apply a sanction is rejected by the platform. Roles are explained in Members, roles and staff.

Player IDs and names#

On a hosted server players sign in with a join ticket, so the server identifies each player by their Vastopia account ID rather than a typed username. That account ID is the player ID you see throughout the dashboard, and it is what sanctions and staff ranks are keyed on. The player name is the display name the player chose in-game (the ::setname command). Wherever a name is missing, the dashboard shows the ID instead.

Online players#

Open Live → Players. The Online players card shows a count badge, a search box ("Search online players…"), a Refresh button and a table:

ColumnMeaning
PlayerDisplay name, with a staff-rank badge (Moderator, Admin or Owner) if the server sees the player as staff
RegionThe in-game region the player is in
CombatCombat level
Online forTime since login
ActionKick

The server pushes its roster on its control poll (about every 5 seconds) and the page re-reads it every 10 seconds while the tab is visible; the footer reads "Roster updated Ns ago · auto-refreshes every 10s". If the server has not reported recently, a yellow banner warns "The server hasn't reported a roster recently — this list may be out of date." The search box filters the list by name or ID without another request.

Kick a player#

  1. Find the player in the Online players table (type part of their name or ID in the search box).
  2. Click Kick.
  3. Confirm the browser prompt: "Kick NAME from the game? They can reconnect immediately."

The row disappears at once and the next roster refresh confirms it. Under the hood a kick is a kick sanction with the reason "Kicked by an operator.": the server picks it up on its next poll and disconnects the player with that message. It is recorded in the game's audit log as server.kick and appears in the player's sanction history. A kick is not a ban — use a ban (below) to keep someone out.

The activity feed#

Below the roster, the Activity section is the live stream of recorded player actions. The same feed, with a page of its own, is at /dashboard/{gameId}/activity ("Player activity"), and a per-player slice appears on each profile.

Filter bar:

FilterNotes
TypeAll types or one event type (table below)
PlayerAn exact player ID — not a name
From / ToDate-time pickers bounding the range

Results arrive 200 at a time, newest first, with a Load older entries button at the bottom. Each row shows the time, the event type, the player (a link to their profile) and a one-line detail.

Type filterEventDetail column shows
Joinsplayer.join"joined the server"
Leavesplayer.leave"left (reason)"
Chatplayer.chatThe message text
Deathsplayer.death"died", with the killer kind when known
PK killsplayer.killed_by_player"killed by NAME"
Level upsplayer.level_upSkill number and new level
Items acquiredplayer.item_acquiredAmount, item number and source
Items droppedplayer.item_droppedAmount and item number, "(destroyed)" if it did not hit the ground
Tradesplayer.tradedThe other player's ID
In-game purchasesplayer.purchaseItem, shop name and cost in coins

Player Search and profiles#

Data → Player Search lists every player with activity in the last 30 days, newest activity first. Typing in the search box matches player names case-insensitively as a substring; searching is debounced, so results update as you pause. The table shows Player, Player ID and Last seen ("5m ago"). Up to 100 players are returned; if more match, a footer says "Results truncated — narrow your search to see more." With no activity at all the page says "No players seen in the last 30 days."

Click a row (or any player link elsewhere in the dashboard) to open the profile at /dashboard/{gameId}/players/{playerId}.

Profile#

The header shows the player's name and ID, followed by four tiles: Last seen, First seen, Total play time (with the session count beneath) and Recent events (with the purchase count beneath). A player with no recorded activity in the last 30 days shows "No data" instead.

TabContents
OverviewThe ten most recent events
ActivityThe full event list for this player, 100 per page, with Load older entries
PurchasesIn-game shop purchases: time, item, amount, cost in coins, shop. These are purchases made with in-game currency through shops you built in the editor — not real-money sales, which live under Shop, revenue and payouts
SessionsEach session's Joined and Left time and Duration; a session still in progress shows "in-game"
SanctionsApply a sanction to this player, and see their active sanctions and full history

Sanctions#

A sanction is a moderation action recorded on the platform and delivered to your game server. There are four kinds:

TypeIn-game effectDelivered to the server?
WarnNone — a note on the player's recordNo; it stays in the record only
MuteThe player's chat messages are dropped silentlyYes
KickImmediate disconnect with the reason shown; the player can reconnectYes
BanDisconnected if online, and every reconnect is rejected with "Banned: REASON"Yes

Mutes, kicks and bans are queued for the server and picked up on its next control poll, which runs about every 5 seconds — the Moderation page header says as much. A kick aimed at a player who is offline is simply marked delivered. A ban is also enforced at login: the server checks the platform when a player connects, caching the answer for 60 seconds, so a banned player cannot get back in even after a server restart.

Each sanction has a Status:

StatusMeaning
queuedRecorded, not yet acknowledged by the server
deliveredThe server has applied it
expiredIts duration has run out
revokedLifted by a team member

Because a warn is never sent anywhere, it stays "queued" for as long as it is active. Every sanction and revoke is written to the audit log (mod.warn, mod.mute, mod.kick, mod.ban, mod.revoke) with the actor, the reason and the duration.

Apply a sanction from a profile#

  1. Open the player's profile and the Sanctions tab.
  2. In Apply sanction, choose a Type: Warn (no in-game effect), Mute (block chat), Kick (immediate disconnect) or Ban (reject reconnects).
  3. Pick a Duration: 1h, 24h, 7d or Permanent. The default is 1h.
  4. Enter a Reason (required) — at least 3 characters, at most 500. It is shown to the player for kicks and bans.
  5. Click Apply TYPE (the button is labelled with the type you chose).

The new sanction appears under Active sanctions with status "queued" and moves to "delivered" once the server acknowledges it. Sanction history below keeps everything ever applied, including expired and revoked entries.

Apply a sanction from the Moderation page#

When you already know the player ID — from a report, for example — you do not need to open the profile:

  1. On Moderation, click New sanction.
  2. Enter the Player ID, choose the Type and set Duration (min) in minutes. Leave it blank (or 0) for a permanent sanction.
  3. Write a Reason and click Create.

Both the player ID and the reason are required.

Lift a sanction#

On the profile's Sanctions tab or the Moderation page's Active sanctions tab, click Revoke in the row. The entry's status becomes "revoked" and it moves to the history. Expired sanctions cannot be revoked; they already ended.

The Moderation page#

Data → Moderation has three tabs and re-polls every 15 seconds while visible:

TabContents
Active sanctionsEvery active sanction across the game: Player (ID, linked to the profile), Type, Reason, Applied ("2h ago"), Expires (a date, or "permanent"), Status and a Revoke action
HistoryThe most recent 100 sanctions of any status, without actions
ReportsOpen reports and recently resolved ones; the tab shows a count badge while reports are open

Reports#

Reports are filed by your game server on behalf of players: the page caption describes them as queued when a player types ::report <player> <reason> in chat. Each row lists When, the Reporter ID, the Reported player (linked to their profile) and the Reason.

To close a report:

  1. Investigate: open the reported player's profile, read their Activity, and apply a sanction if warranted.
  2. Back on Reports, click Mark resolved in the row.
  3. Type a short resolution note in the field that appears and press Enter or click Save. If you leave it empty the note is recorded as "resolved".

The report moves to Recently resolved, where the note is shown in the Resolution column, and the action is logged as mod.report_resolved.

A moderation workflow#

  1. A report arrives: Moderation → Reports shows a count badge. Read the reason.
  2. Click the reported player's ID to open their profile. Check Activity filtered to chat, and Sanctions to see whether they have prior history.
  3. Apply the proportionate sanction from the Sanctions tab: a Warn for a first minor offence, a timed Mute for chat abuse, a Ban for cheating or repeated abuse. Write a reason a colleague would understand later.
  4. Resolve the report with a note saying what you did.
  5. For anything urgent while the player is still connected, Live → Players → Kick removes them immediately; follow up with a ban from the profile if they should not return.

Everything your team does here is visible to the Owner under Team → Audit, described in Members, roles and staff.

With AI (MCP)#

There are no MCP tools for moderation; sanctions, kicks and reports are dashboard-only. read_server_logs reads the most recent lines of a deployed server's log (mode picks test, live or beta, with contains, exclude and min_level filters) and can help while investigating a report — the same output the dashboard shows under Live → Logs (see Server controls and logs).

Spotted a mistake or something missing?Tell us on Discord