Configuration
Environment Variables
Required
| Variable | Description |
|---|---|
DISCORD_TOKEN | Bot token from the Discord Developer Portal |
Bot Settings
| Variable | Default | Description |
|---|---|---|
DEV_GUILD_ID | — | Guild ID for instant dev command sync |
DATA_DIR | ./data | Directory for the SQLite database |
LOG_LEVEL | INFO | DEBUG, INFO, WARNING, or ERROR |
ENV | development | development or production |
FREE_TIER_MAX_EVENTS | 5 | Max active events on free tier |
PREMIUM_TIER_MAX_EVENTS | 999 | Max active events on premium tier |
Stripe / Payments
Only required when running the Stripe webhook server for premium subscriptions.
| Variable | Description |
|---|---|
STRIPE_SECRET_KEY | Stripe secret key (sk_live_... or sk_test_...) |
STRIPE_WEBHOOK_SECRET | Stripe webhook signing secret (whsec_...) |
STRIPE_PRICE_MONTHLY | Stripe Price ID for the $5/mo plan |
STRIPE_PRICE_YEARLY | Stripe Price ID for the $50/yr plan |
WEB_BASE_URL | Base URL for the webhook server |
WEB_HOST | Bind host for the webhook server (default: 0.0.0.0) |
WEB_PORT | Port for the webhook server (default: 8080) |
STRIPE_SUCCESS_URL | Redirect URL after successful Stripe checkout |
STRIPE_CANCEL_URL | Redirect URL when checkout is cancelled |
Server Settings
Run /server_settings as a server admin. The UI has three pages:
Page 1 — Roles & Permissions
| Field | Description |
|---|---|
| Admin Roles | Discord roles with full bot management access |
| Organizer Roles | Discord roles that can create and manage events |
| Attendee Roles | Discord roles that can RSVP to events |
Multiple roles can be assigned per level. Members with any matching role get that permission level.
Permission resolution order (highest wins):
- Member has a role listed under Admin Roles → ADMIN
- Member has a role listed under Organizer Roles → ORGANIZER
- Member has a role listed under Attendee Roles → ATTENDEE
- Member has Discord’s built-in Administrator permission → ADMIN
- Default → ATTENDEE
Additionally, the organizer of a specific event always has organizer-level access to their own event, even without a role assignment.
Page 2 — Bulletin
| Field | Description |
|---|---|
| Bulletin Channel | Channel where event embeds are posted after creation |
| Use Threads | When enabled, creates a thread per time slot on each bulletin |
Threads help keep slot-specific discussion organized without cluttering the main channel.
Page 3 — Display
| Field | Description |
|---|---|
| Time Format | Server default: 12-hour (3:00 PM) or 24-hour (15:00) |
Members can override this individually with /settings.
User Settings
Each member configures their own preferences with /settings:
| Setting | Description |
|---|---|
| Timezone | IANA timezone string (e.g. America/New_York, Europe/London) |
| Time Format | Personal override: 12-hour or 24-hour |
The bot requires a timezone to be set before a member can RSVP to an event. If not set, the bot will prompt the member to configure it inline.
Common timezone values
| Region | Value |
|---|---|
| US Eastern | America/New_York |
| US Central | America/Chicago |
| US Mountain | America/Denver |
| US Pacific | America/Los_Angeles |
| UK | Europe/London |
| Central Europe | Europe/Berlin |
| Japan | Asia/Tokyo |
| Australia Eastern | Australia/Sydney |
Any valid IANA timezone is accepted.