Skip to content

FEAT: first stable release!!!!!#27

Merged
Framebuffers merged 244 commits into
mainfrom
dev
May 18, 2026
Merged

FEAT: first stable release!!!!!#27
Framebuffers merged 244 commits into
mainfrom
dev

Conversation

@Framebuffers

Copy link
Copy Markdown
Owner

Feat: release v1.0, complete rewrite in Go

Replacing the original Discord.js prototype with a complete rewrite in Go.

The bot is production-ready and has been running on a live server through the RC phase.

Done

well, basically everything is new.

Campaign lifecycle

  • Staff approval flow: DMs submit campaigns, admins approve via a dedicated
    approval queue.
  • On approval: Discord role + channel auto-created, 5 standard threads
    initialized (welcome, announcements, sessions, dice-rolls, general).
  • Welcome thread is locked and pinned on creation.
  • Archive and delete flows hide/restrict the Discord channel to staff only.
  • Campaign embeds gate the channel link to members only (non-members don't
    see internal channel IDs).

Session scheduling

  • /newsession: multi-field modal (DD/MM/YYYY, time, notes, capacity)
  • Session announcements post to the campaign's announcements thread with a
    role mention and a live RSVP embed (going / not going / waitlisted)
  • RSVP via buttons on the embed or in DMs
  • Conflict detection: warns when a player is double-booked
  • Cron-scheduled session reminders: opt-in DMs before each session
  • /nextsessions: all upcoming sessions across the player's campaigns,
    sorted, formatted in their local timezone

Player features

  • /register onboarding flow
  • /me hub: profile, tokens, next sessions, campaigns
  • Per-player timezone settings (full IANA tz database embedded)
  • /newtoken: composite circular token from photo + frame image or solid
    color; preview -> name -> save -> assign flow
  • /tokens: token gallery with per-token management
  • Token download via opaque one-time links (UUID, 10-min TTL, no internal
    paths exposed)

DM tools

  • /manage: campaign management hub with autocomplete over the DM's
    campaigns (players / sessions / settings sub-menus)
  • /uploadcover: cover art upload, self-hosted (never stored on Discord CDN)
  • /importcampaign (staff-only): bind an existing Discord channel + role to a
    new campaign record; auto-registers current members

Staff / admin

  • /admin panel: broadcast DMs, player management, server settings
  • /ban / /unban: global player bans
  • Role sync: admin/mod roles on Discord map to bot permission levels; synced
    on startup and on GuildMemberUpdate
  • Per-guild role name overrides via /admin settings

Infrastructure

  • Self-hosted media server (net/http): CDN route + one-time download route
  • Per-guild SQLite databases (no external DB required)
  • ApplicationCommandBulkOverwrite: stale commands removed atomically on
    startup
  • Embedded IANA timezone database: no system tzdata dependency
  • Docker + docker-compose deployment; designed to sit behind Caddy/Traefik
    for TLS and rate limiting
  • DEBUG_ADMIN_ID two-factor guard: env var alone grants nothing in
    production: Discord admin role required as second factor

To do:

For post-1.0 releases:

UI/UX

  • Stale ephemeral accumulation: delete ephemerals so they don't accumulate when commands are run
  • Ban screen shows raw user ID instead of display name
  • Server-wide timezone in /admin settings
  • /me panel cleanup
  • Search revamp: text search on Browse screen, search button on /me
  • /about hero image
  • Personal book library for DMs (pre-fills books on new campaigns)

Deferred features:

  • Spanish localization (name_localizations + translate messages.go)
  • Capacity waitlist for westmarches: DM-configurable reject vs. waitlist when full
  • Components V2 migration (what was I thinking when I was using V1)
  • Downtime (DT) model: in-universe time currency, session-tick accrual
  • Levels & XP progression for campaigns or Westmarches
  • Westmarch engine (was scrapped from 1.0, long-term)

…gle source of truth for all the content of each string, like names, descriptions, etc.
…ag/campaign name (hit modal limit of 5 items)
… block to add_player, added checks for player amounts
…red campaigns categoty, creates a private text channel, creates threads, saves all discord IDs to the campaign record; enabled permanent verbose mode
…er execution until all discord api calls return. if not, handle panic by responding with an ephemeral without crashing the whole bot
…ule conflict detection, capacity handling, DM notified for every RSVP
… is missing when it's a legacy DB or it hasn't been approved yet. Improved flow for pending campaigns: now they say when they're awaiting approval when checked, and they have access to the campaign menu now.
@Framebuffers Framebuffers merged commit 69a192b into main May 18, 2026
2 checks passed
Framebuffers added a commit that referenced this pull request May 19, 2026
FEAT: first stable release!!!!!

awoo
Framebuffers added a commit that referenced this pull request May 19, 2026
FEAT: first stable release!!!!!

awoo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant