Events
Schedule time-based meetups with RSVPs and reminders, or run goal-based delivery drives with a live leaderboard.
StarBot's event system handles two distinct kinds of events from the same set of commands and tables. Pick the one that matches what you're running:
- Time event — a scheduled meetup. Members RSVP Going / Maybe / Leave; capacity + waitlist; multi-tier DM reminders; broadcast at start; post-event summary.
- Goal event — a delivery drive. Set item quantity targets; members fulfill via the existing Orders pipeline; live leaderboard ranks contributors by value; auto-completes when all items are filled.
Both flavors are administered through /event, /config-events, /post-event in Discord, and through the Events tab on the dashboard.
One-time setup
Before creating any events, enable the system and pick a guild-wide default timezone:
- Open the dashboard's Events tab (or run
/config-events settings). - Toggle System enabled on.
- Set Default timezone to an IANA name like
America/Chicago,Europe/London,Australia/Sydney. (Don't use abbreviations likeCST— they're ambiguous and DST handling is unreliable.) - Save.
Then create at least one Event Type. Types are how you bucket events; each type has its own broadcast channel, role to ping, and reminder timings. Most guilds start with the auto-created Server-Wide type and add specialized ones later.
For each type you create, set:
- Board channel — where the RSVP embed posts. Without this, time events won't show up anywhere visible.
- Broadcast channel (optional) — where the "Event starting now!" ping goes at start time.
- Broadcast role (optional) — role to mention in the broadcast.
- Reminder offsets — comma-separated minutes-before-start when DM reminders fire. Default
1440, 60(24h + 1h before). - Log channel (optional) — where the post-event summary lands.
Time events
Create a time event with /event create:
/event create
type: Server-Wide
title: Friday Ops Night
date: 2026-06-12
time: 20:00
duration_minutes: 180
capacity: 30
description: Bounty hunting in Pyro
location: Pyro System
What happens:
- The bot creates the event row and materializes its first occurrence.
- Within a few seconds, the RSVP embed posts to the type's board channel with three buttons: Going ✅, Maybe ❔, Leave 🚪.
- The event also appears in Discord's server-sidebar Events tab (provided the bot has Manage Events permission).
- Members click Going. If the capacity is hit, additional Going clicks land on a waitlist; if someone leaves, the earliest waitlisted member is automatically promoted.
- At the configured offsets (default 24h and 1h before), every Going member gets a DM reminder.
- At start time, the broadcast channel pings the broadcast role. The Discord scheduled event transitions to Active.
- At end time (start + duration), the Discord scheduled event transitions to Completed. The bot posts a summary embed in the log channel with the final attendee list.
Recurring time events
Add repeat: and (optionally) interval: to make an event recur:
/event create … repeat:weekly interval:1 # every week
/event create … repeat:daily # every day
/event create … repeat:monthly interval:2 # every other month
Each occurrence gets its own RSVP embed, its own Discord native event, and its own reminders. The bot materializes future occurrences up to 60 days ahead.
Goal events (delivery drives)
Switch the create command's mode: to goal:
/event create
type: Logistics
title: Pyro Resupply Drive
date: 2026-06-15
time: 12:00
mode: goal
deadline_date: 2026-06-22
deadline_time: 23:59
Goal events don't materialize a recurrence — they're always one-off. The "start" time is when the drive opens. The optional deadline is a soft cutoff (a nudge fires when it passes if the goal isn't met yet); the drive stays open until either all items are fulfilled or you manually cancel.
After creating the event, add items:
/event item add event_id:42 name:Titanium quantity:5000 unit:SCU price:50
/event item add event_id:42 name:Aluminum quantity:2000 unit:SCU price:30
Each item becomes a real Orders system row. When the drive opens (start time), each item posts as a pinned message in the board channel with a Fulfill Order button. Members click it, deliver in-game, and a moderator confirms — the same flow as a standalone order.
The leaderboard ranks contributors by Σ(quantity × price_per_unit) across all items. It updates live with every delivery confirmation. When every item hits zero remaining, the drive auto-completes and posts a final summary to the log channel.
Posting an RSVP embed manually
If you want an event's embed in a specific channel that isn't the type's default board channel:
/post-event event_id:42 channel:#event-board
This is useful for one-off events that should appear in a different channel than the rest of your events.
Cancelling
/event cancel event_id:42 does three things:
- Marks the event inactive (poller stops touching it).
- Cancels any pending Discord native scheduled events for it.
- Leaves the channel embed in place but updates it to show "ended" status.
To delete an event entirely from the dashboard, click the event in the Events tab and use Delete at the bottom — this hard-deletes the row.
Troubleshooting
Embed didn't post — the type's board_channel_id isn't set. Open the event type, set a channel, save. Future events will post; for an existing event, run /post-event event_id:N.
Native Discord event missing from the sidebar — the bot lacks Manage Events permission. Grant it and create a new event to test (Discord events can't be added retroactively).
Event scheduled for the wrong time — your default timezone is probably set to an abbreviation like CST. Change it to a full IANA name (America/Chicago) and recreate the event.
Reminders didn't fire — Reminders only DM members who clicked Going (not Maybe, not waitlisted). Also check the poller log; reminders within the grace window (60 min late) still fire, but anything later is dropped to avoid spamming after downtime.