Events
Zander's event system gives your team a structured way to plan, review, and publish community events — from casual game nights to tournaments — with automatic Discord announcements, template-driven scheduling, and a clear approval workflow.
📸 Screenshot: The public events page showing upcoming event cards with titles, dates, and host names
For Players
Community events are listed publicly at /events. Each event shows:
- Event title and description
- Start and end time
- Host(s)
- A link to add the event to your calendar
Individual event pages are available at /events/<slug> with full details.
Check the events page regularly for upcoming community activities. Events are published once they have been reviewed and approved by staff.
For Staff
Staff manage events through Dashboard → Events (requires zander.web.events permission).
Event Lifecycle
Every event moves through a defined set of stages before it is published:
| Stage | Description |
|---|---|
| Draft | Created but not yet ready for review — visible only to staff |
| In Review | Submitted for approval — awaiting sign-off from a reviewer |
| Approved | Approved and ready to publish |
| Published | Live and visible to the public at /events |
| Cancelled | Cancelled after publication — remains visible with a cancelled status |
| Archived | Closed out after completion |
📸 Screenshot: The event dashboard list view showing events at various lifecycle stages
Creating an Event
- Go to Dashboard → Events → Create.
- Enter the event title, start date/time, and end date/time.
- Save as a draft and fill in additional details (description, hosts, actions, announcements).
- When ready, click Submit for Review.
Required fields to create a draft: title, startAt, endAt.
Event Details
| Field | Description |
|---|---|
| Title | Public-facing event name |
| Start / End | Date and time of the event (used for calendar and Discord announcements) |
| Hosts | Assigned linked players who are running the event |
| Discord Voice Channel | Optional — links the event to a voice channel for participant lookup |
| Actions | In-game commands to execute at event time via the bridge executor |
| Announcements | Scheduled Discord messages to send before, during, or after the event |
Approving Events
The review queue is at Dashboard → Events → Review and requires zander.web.events.review.
| Action | Description |
|---|---|
| Approve | Approves the event — it can then be published |
| Reject | Rejects with an optional note sent back to the creator |
| Publish | Immediately publishes an approved event to the public page |
Approval and rejection are separate from publishing. An event must be approved before it can be published.
📸 Screenshot: The review queue showing pending events with approve/reject actions
Publishing and Updates
Once approved, publish the event from the dashboard. If you need to update a published event (correct timing, description changes), use Update Published — this preserves the published state while applying your edits.
Cancelling and Archiving
| Action | When to Use |
|---|---|
| Cancel | The event is no longer happening. An optional reason can be recorded. |
| Archive | The event has concluded. Removes it from the active events feed. |
Duplicating Events
Any event can be duplicated as a new draft via the Duplicate action — useful for recurring events that are not yet templated.
Event Templates
Templates let you define a recurring event structure once and have Zander auto-generate draft events on a schedule.
Dashboard → Events → Templates (requires zander.web.events permission).
Creating a Template
- Create a new template with a title.
- Define the event structure (description, hosts, actions, announcements).
- Set a recurrence schedule — templates are checked hourly.
Auto-Generation
The eventTemplateCron background job runs every hour and:
- Checks for active templates whose
nextGenerateAttime has passed. - Creates a new draft event from the template.
- Updates the template's next generation timestamp.
- Cleans up any stale template-generated drafts that were never published and whose scheduled time has already passed.
📸 Screenshot: The event templates page showing active recurring templates with their schedules
All auto-generated drafts still go through the normal review and approval workflow before being published.
Discord Announcements
Events can have announcements attached — Discord messages scheduled to send at specific times relative to the event. Configure these in the event's announcement settings.
The eventAnnouncementCron background job runs every minute, checks for due announcements, and sends them to Discord. The target channel is configured in config.json:
"events": {
"discordChannelId": "CHANNEL_ID"
}
Permissions
| Permission | Description |
|---|---|
zander.web.events | Access the events dashboard, create events, manage templates |
zander.web.events.review | Access the review queue, approve or reject submitted events |
Feature Toggle
"events": false
Disabling this hides the /events page and returns feature-disabled responses from all events API endpoints.