Village Vote Dashboard Documentation
Overview
The /dashboard command gives moderators a secure, time-limited link to a web-based game dashboard for monitoring and managing an active game.
The dashboard is split into two tabs:
- Overview - Player status, team composition, and current game actions
- Activity - Message activity charts, reply interaction graph, and activity warnings
/dashboard Command
Generate a personal dashboard link for your server's active game.
Usage
/dashboard
No arguments are required. The bot replies with a private link that expires in 5 minutes.
Requirements
- Must be a server moderator
- The link is personal — each moderator must run the command themselves
- Every dashboard page and API route re-checks that the signed-in user currently holds the server's moderator role. A valid login cookie from another server, or from someone who has since lost the role, is refused
- The link provides access to the dashboard for your specific server
Managed games: if a managed game (started with
/managedgame) is running on the server,/dashboardreturns a link to the managed-game dashboard instead of the classic dashboard described below.
Overview Tab
The Overview tab displays the current state of the game at a glance.
Game Overview Section
A summary grid at the top shows key game stats:
┌─────────────────┬───────────────────────────────────────┐
│ Field │ Description │
├─────────────────┼───────────────────────────────────────┤
│ Game Started │ Date the game began (if set) │
│ Total Alive │ Number of players currently alive │
│ [Team] Alive │ Alive / total count per team │
└─────────────────┴───────────────────────────────────────┘
One "alive" stat card is shown for each team configured in the game, alongside the overall total.
Players Section
Players are listed grouped by team. Each team shows a header with the team name and alive count, followed by a row for each player.
Player row fields:
┌──────────────┬────────────────────────────────────────────────────────┐
│ Field │ Description │
├──────────────┼────────────────────────────────────────────────────────┤
│ Avatar │ Player's Discord avatar (or initial fallback) │
│ Name │ Player's display name │
│ Status │ "Alive" (green) or "Dead" (red); dead rows are dimmed │
│ Location │ Dropdown of the game's locations (only when location │
│ │ tracking is on); a badge shows a pending travel request│
│ Action badges│ One badge per game action category (see below) │
└──────────────┴────────────────────────────────────────────────────────┘
Location dropdown (location tracking on): the player's current location, selectable. Changing it moves the player immediately; a check mark confirms the save, an error reverts the dropdown. The dropdown lists every location, including ones closed to player travel (marked 🔒), because the lock is a player restriction, not a moderator one. Dead rows keep the dropdown so a moderator can stage where a resurrected player appears.
Moves from the dashboard are silent by default. Tick Notify players when I move them above the player list to tell the player in their channel; the checkbox is off on every page load. Any pending travel request the moved player had is marked superseded and its game log message edited to say so.
Travel badge: → Forest next to the dropdown means the player has asked to travel there; the colour follows the request state (orange pending, green accepted or staying, red denied).
Action badges show the current game action for each category:
- A badge with a green border and colored text means the player has submitted an action for that category
- A faded badge with italic "No action" means no action has been submitted yet
- Badge label format:
Category: Action text(e.g.,Night: Investigate Alice)
Category filter bar:
If the game has multiple action categories configured, a filter bar appears above the player list. Click a category name to show only that category's action badges across all players. Click "All" to show all categories.
Location filter bar:
When location tracking is on, a second row of chips lists each location with its alive-player count. Click one to show only the players there; "Everywhere" clears the filter. The selection is kept in the URL hash like the category filter.
Game Controls Section
📍 Locations
Edits the game's location list while the game runs. Everything here is applied in one step when you press Save locations.
📍 Locations [ Track player locations ☑ ]
│ [Town Square ] Default 4 players ☑ Travel ▲ ▼ ✕
│ [Forest ] 2 players ☑ Travel ▲ ▼ ✕
│ [Crypt ] 1 player ☐ Travel ▲ ▼ ✕
[ e.g., Old Mill ] [+ Add]
☐ Notify players moved by this change [ Save locations ] ● unsaved changes
- Rename by editing the name in place. Renames move nobody and notify nobody.
- Reorder with ▲ ▼. The first location is the default: players who have never been placed, and players whose location is removed, go there.
- Travel unticked keeps the location on the map but closed to player travel. Pending requests to a location you close are cancelled and those players are told.
- ✕ Remove a location. Its players move to the default (you are asked to confirm when it is occupied) and pending requests to it are cancelled. If any shop or item is gated on that location, the save result lists them: those rules now fail closed, so the shop or item is hidden until re-pointed on the shop dashboard. Tick Notify players moved by this change to tell the relocated players; cancellations always notify.
- Track player locations turns the whole system on or off mid-game. Turning it off cancels open requests, disables every dropdown in player channels, archives the Locations thread and keeps the list and every player's location, so it can be turned back on later with the same map.
At most 24 locations are allowed. Every change is summarised in the game log channel.
When the game was created with Show locations as Discord roles, the editor keeps the roles in step too: renames rename the role, new locations get a role, removed locations lose theirs, and relocated players are moved to the right role. New and renamed names are checked against the server's existing roles first; a collision rejects the whole save with the conflicting name so nothing is half-applied. Role problems (for example a missing permission) appear as warnings in the save result; the location change itself still applies. Turning tracking off deletes the roles.
Team Ordering
Teams are listed in the order they appear in the server's teamChannelsList configuration. Teams not in that list follow alphabetically. Players not assigned to any team appear in a "No Team" group at the bottom.
Activity Tab
The Activity tab displays message activity and interaction data across monitored game channels. All data is loaded dynamically from the server.
Filters
┌──────────────┬───────────────────────────────────────────────────────────────────┐
│ Filter │ Options / Description │
├──────────────┼───────────────────────────────────────────────────────────────────┤
│ Graph │ Messages — bar/line chart of message counts │
│ │ Replies — force-directed graph of reply interactions │
├──────────────┼───────────────────────────────────────────────────────────────────┤
│ Time │ Full game — entire game from start date to now │
│ │ Today / Yesterday / YYYY-MM-DD — single-day hourly view │
├──────────────┼───────────────────────────────────────────────────────────────────┤
│ Day starts │ The hour that defines the start of a "day" (12am–11pm) │
│ │ Useful for games that run on a non-midnight schedule │
├──────────────┼───────────────────────────────────────────────────────────────────┤
│ Channel │ All channels (default) or a specific monitored channel │
└──────────────┴───────────────────────────────────────────────────────────────────┘
Filter selections are saved in the URL hash so the view can be bookmarked or shared.
Messages Chart
Displays message counts for each player over the selected time period.
Full game view (multi-day):
- Line chart with one colored line per player
- X-axis: dates from game start to today
- Y-axis: number of messages
- Click legend items to show/hide individual players
Single-day view (hourly):
- Line chart with one colored line per player
- X-axis: 24 hours (starting from the "Day starts" hour)
- Y-axis: number of messages in that hour
- Title shows the hour range when a custom start hour is set (e.g.,
Messages per Hour (9am–8am))
Tip: The full game view automatically switches to hourly format when the game started today (less than one day of data).
Reply Interactions Graph
Displays a force-directed network graph of reply relationships between players.
- Each node is a player (shown with avatar or colored circle)
- Arrows point from the replier to the original message author
- Arrow thickness reflects the number of replies between those two players
- Only players who have replied to or received replies from another player appear in the graph
- Hover over a node or link to see interaction details
Note: Only players registered in the game appear as nodes. Replies to non-players or to players outside the game are excluded.
Activity Warnings
Below the chart, a table lists players who may not be meeting minimum activity requirements for the selected time period.
Thresholds (per day or time window):
┌─────────────────────┬───────────────────────────────────┐
│ Requirement │ Threshold │
├─────────────────────┼───────────────────────────────────┤
│ Minimum messages │ 10 messages │
│ Minimum active hours│ Activity across 3 distinct hours │
└─────────────────────┴───────────────────────────────────┘
A player is flagged if they fall below either threshold on a given day.
Warning table columns:
┌──────────┬───────────────────────────────────────────────────────────┐
│ Column │ Description │
├──────────┼───────────────────────────────────────────────────────────┤
│ Player │ Player's display name │
│ Date │ The day the warning applies to (YYYY-MM-DD) │
│ Messages │ Number of messages sent that day │
│ Hours │ Number of distinct hours the player was active │
│ Warning │ Description of what threshold was not met │
└──────────┴───────────────────────────────────────────────────────────┘
Warnings are sorted by date (most recent first), then alphabetically by player name.
Note: Only currently alive players are checked for activity warnings. Dead players are excluded.
Note: Activity warnings are only shown when the Messages graph is selected. They are hidden when viewing Reply Interactions.
Data Scope
The dashboard pulls data from messages recorded since the game's start timestamp. Messages before the game started are excluded from all charts and warnings.
- Both the main chat server and the role server are included in activity counts
- The channel filter narrows results to a single Discord channel
- The "Day starts" hour offsets daily grouping so a game-day that runs from 9am to 9am is counted correctly
Tips
- Bookmark your view — filter selections are preserved in the URL hash, so you can bookmark a specific channel or day view
- Check activity before eliminations — use the Activity Warnings table to quickly identify players who may have been inactive before a day's vote
- Use Reply Interactions to spot alliances — dense reply clusters between players can indicate coordinated discussion
- Switch to hourly view — select Today or Yesterday to see hour-by-hour message patterns for a single day
- Filter by channel — narrow activity data to a specific game channel (e.g., a town square or team channel) to analyze communication in that space