Event Lifecycle & Attendance
Events progress through distinct phases, each with different rules for participation status and officer actions.
Event Status Flow
stateDiagram-v2
draft --> published
published --> active
active --> completed
published --> cancelled
Participation Statuses
Participation statuses are phase-aware: which statuses are valid depends on the event's current phase.
Pre-Event (published/draft)
| Status | Meaning |
|---|---|
invited | Officer sent an invite |
confirmed | Signed up and has a slot |
waitlist | Signed up but slot is full |
declined | Declined the invite |
Officers can toggle participants between confirmed and waitlist.
Active/Completed Events
| Status | Meaning |
|---|---|
attended | Participated in the event |
benched | Was available but sat out (roster/comp reasons) |
absent | Did not show up |
Officers can set any participant to attended, benched, or absent. Pre-event statuses (confirmed, waitlist) are rejected on active/completed events.
Why Benched Matters
Benched is distinct from absent for attendance tracking and trial evaluations. A benched player showed up and was ready — they shouldn't be penalized the same way an absent player is.
Self-Service Rules
- Published events: Users can sign up, change their character, and withdraw.
- Active events: Users can change their character but cannot withdraw.
- Completed events: Users cannot change anything. Only officers can modify participation after completion.
Officers can always change a participant's character via the roster dropdown on active/completed events.
Voice Attendance Tracking
When enabled (Settings > Integrations > Voice Attendance), the platform tracks Discord voice channel activity during events.
Modes
| Mode | Behavior |
|---|---|
off | No tracking |
track | Records who joins the voice channel and for how long |
auto | Track + automatically marks confirmed participants as attended |
Confirmation Workflow
- During an active event, voice presence is tracked in temporary
EventVoicePresencerecords - After the event completes, officers see the Voice Attendance panel
- Each user can be marked as Attended, Benched, or Absent (defaults: signed-up members → Attended)
- On confirmation, permanent
Participationrecords are created withvoiceDurationMinutes, and temporary voice data is deleted
Data Lifecycle
- Temporary:
EventVoicePresencerows exist only while tracking is active - Permanent:
Participation.voiceDurationMinutespersists after confirmation - Unconfirmed data is discarded: If an officer never confirms, temporary data is cleaned up when the event is deleted or cancelled
Discord Scheduled Events
Events can optionally create Discord Scheduled Events for visibility in Discord's event UI.
- Auto-start: A cron job starts Discord Scheduled Events when the platform event's
scheduledAttime arrives - Auto-complete: Events are completed when their duration elapses
- Manual control: Officers can start, delay, or end events from the UI
- Cover images: If an event has an image, it's sent as the scheduled event cover
API Endpoints
| Method | Path | Purpose |
|---|---|---|
| PATCH | /events/:id/signup | User updates own character/role |
| PATCH | /events/:eventId/participations/:userId | Officer updates participant status/character |
| POST | /events/:id/attendance/confirm | Officer confirms voice attendance |
| GET | /events/:id/voice-presence | Get current voice presence data |
| PATCH | /events/:id/delay | Delay event start time |