Moderation · Electric Cherry
{#snippet actions()} {#if report.unreadCount}{/if} {#if permitted}{/if} {/snippet} {#if !permitted}

Read-only moderation access. You can inspect private records and enforcement status.

{/if} {#if notice}

{notice}

{/if} {#if refreshError}{/if} {#if navigationError}{/if}
Enforcement coverage · {currentCoverage} of {report.coverage.length} servers current

Current means the server acknowledged the latest policy. Pending or unavailable servers may not apply a new restriction or revocation yet. Cached restrictions continue during an outage.

{#if report.coverage.length}
{#if admin}{/if} {#each report.coverage as item (item.server)} {#if admin}{/if} {/each}
ServerPolicy statusRevisionLast connectedCapabilitiesSetup
{item.revision ?? '—'} / {item.desiredRevision} {#if item.connectedAt}{:else}Not recorded{/if} {item.capabilities.length ? item.capabilities.join(', ') : 'Not reported'}{#if item.state === 'unavailable'}{/if}
{:else}

No server enforcement reports are available yet.

{/if}
{ void navigate({ view, offset: null }); }} ariaLabel="Moderation views" panelId="moderation-results" idPrefix="moderation-tab" />
{ event.preventDefault(); void navigate({ q: filters.q, game: filters.game, guid: filters.guid, caseStatus: filters.caseStatus ?? null, priority: filters.priority ?? null, assignedTo: filters.assignedTo ?? null, review: filters.review ?? null, offset: null }); }} > {#if report.query.view === 'cases'} ({ value: status, label: moderationCaseStatusLabels[status] })) ]} /> {/if}
{#if $page.url.searchParams.get('matchId') && $page.url.searchParams.get('message')}

A chat message is selected as case evidence. Review a player with a verified GUID, then choose Open case. The original message must match that player in the archive.

{/if} {#if report.query.guid}
Selected playerView player profile
{#if permitted}
{/if}
{/if}
{#if report.query.view === 'players'} {#if report.players.length}
{#each report.players as player (`${player.game}:${player.guid}`)}{/each}
PlayerAliasesLast seenServersRestrictionsActions
{player.name}{moderationGameName(player.game)} {player.aliases.join(', ') || 'None recorded'} {#each player.servers as server}
{:else}Not currently observed{/each}
{player.restrictions}
{#if permitted}{/if}
{:else}{/if} {:else if report.query.view === 'restrictions'} {#if report.sanctions.length}
{#each report.sanctions as sanction (sanction.id)}

{sanction.kind === 'ban' ? 'Ban' : 'Mute'} · {sanction.guid}

{sanction.reason}

Scope
{#if sanction.server}{:else}{sanction.scope === 'fleet' ? 'Entire fleet' : moderationGameName(sanction.game)}{/if}
Expires
{sanction.expiresAt ? $timeFormat.dateTime(sanction.expiresAt) : 'Permanent'}
Created by
{sanction.actor} ·
{#if sanction.caseId}View linked case{/if} {#if sanction.note}

Private note {sanction.note}

{/if}
{#if sanction.active && canRevokeModerationRestriction($page.data?.user, sanction)}{/if}
{/each}
{:else}{/if} {:else if report.query.view === 'cases'} {#if report.notifications?.length}

Your case updates ({report.unreadCount ?? report.notifications.length})

    {#each report.notifications as notification (notification.id)}
  • {notification.caseTitle} · {notification.kind === 'evidence' ? 'Evidence or note added' : 'Assignment changed'} ·
  • {/each}

Open a case to review and mark its updates read.

{/if}
{#if permitted}
{/if} {#if report.cases.length}
{#each report.cases as item (item.id)}

{item.guid} · {moderationGameName(item.game)}

{#if item.assessment}

{item.assessment.summary}

{#each item.assessment.findings as finding} {moderationConcernLabels[finding.category]} · {moderationFindingLabels[ finding.finding ]} {/each}
{:else}

Not assessed

{/if} {#if item.reviewAt}
{Date.parse(item.reviewAt) <= Date.parse(report.checkedAt) ? 'Overdue review' : 'Review scheduled'}
{/if} {#if item.unreadUpdates}

{item.unreadUpdates} unread {item.unreadUpdates === 1 ? 'update' : 'updates'}

{/if}
Priority
{item.priority.charAt(0).toUpperCase() + item.priority.slice(1)}
Assigned to
{item.assignee ?? 'Unassigned'}
Updated
Opened by
{item.actor} ·
{item.evidence.length} evidence and staff note {item.evidence .length === 1 ? 'entry' : 'entries'}
{/each}
{:else}{/if} {:else}

Recent live actions

Queued and delivered actions are awaiting confirmation. An unknown outcome requires review before issuing another action.

{#if report.actions.length}
{#each report.actions as action (action.id)}{/each}
ActionTargetResultReason / messageModeratorRequested
{moderationActionLabels[action.kind]}{action.guid ?? 'All players'}
{#if action.detail}{action.detail}{/if}{action.reason}{action.actor}
{:else}

No recent live actions match these filters.

{/if}

Audit history

{#if report.events.length}
    {#each report.events as event (event.id)}
  1. {moderationActionLabels[event.action] ?? event.action}

    {moderationEventDetail(event.detail, event.action)}

    {event.actor}{event.guid ? ` · Player ${event.guid}` : ''}{event.game ? ` · ${moderationGameName(event.game)}` : ''}{#if event.subjectId} {#if event.action.startsWith('case.')}View case{/if} {/if}
  2. {/each}
{:else}{/if} {/if}
{#if permitted}{#key dialogKey}{/key}{/if}