Skip to content
Gwen Abalise

Gwen Abalise

Gwen Abalise (hereinafter the “Application”) is a Discord bot that provides a private thread-based ticketing system for Discord communities. The bot enables users to create support tickets through a simple button interface, with tickets managed as private threads that include designated support staff roles.

This section is for those interacting with a live instance of the Application.

To use Gwen Abalise, add her to your Discord server.

The bot provides three slash commands:

  • /about - Learn more about the bot, including version information and helpful links
  • /start <channel> - Set up the ticket system in a specified text channel (requires MANAGE_GUILD permission)
  • /role <role> - Configure which role should be pinged and added to new tickets (requires MANAGE_GUILD permission)

The ticketing system works through a simple button interface:

  1. Administrators use /start to place a “Create Ticket” button in a channel
  2. Users click the button to open a private thread ticket
  3. The designated support role is automatically added to the thread
  4. Support staff can close tickets using the “Close Ticket” button within threads

The bot operates on a subscription model with Discord’s premium features:

  • Servers require an active subscription to use the ticketing functionality
  • Entitled guilds (configured in the codebase) have access without subscription
  • Non-subscribed servers receive prompts to subscribe with premium buttons

This section is for those interested in running their own instance of the Application.

The application is built with:

  • Runtime: Node.js with TypeScript
  • Discord Library: discord.js v14
  • Database: MongoDB with Prisma ORM
  • Web Server: Fastify (for health monitoring and landing page)
  • Logging: Custom logger utility

Command definitions for Discord slash commands:

  • about.ts - Bot information command
  • role.ts - Support role configuration command
  • start.ts - Ticket system initialisation command

Business logic implementations:

  • about.ts - Displays bot information with action buttons
  • close.ts - Handles ticket closure and thread management
  • open.ts - Creates new ticket threads and database records
  • role.ts - Manages support role configuration
  • start.ts - Sets up ticket creation interface in channels
  • isSubscribed.ts - Validates server subscription status
  • logger.ts - Logging functionality
  • replyToError.ts - Error handling for interactions

Two main models:

  • Tickets - Tracks ticket state (open/closed), thread IDs, and user associations
  • Roles - Maps server IDs to their designated support role IDs

Provides health monitoring endpoint and informational landing page at port 5012.

  • DISCORD_TOKEN - Bot token from Discord Developer Portal
  • MONGO_URI - MongoDB connection string
  • npm_package_version - Automatically set by npm for version display

The bot requires these Discord permissions:

  • Send Messages
  • Create Private Threads
  • Manage Threads
  • Use Slash Commands

This section is for expansions to our legal policies specific to the Application.

This section is for documentation related to contributing to the Application’s codebase.

The project uses:

  • TypeScript with strict configuration
  • ESLint with @nhcarrigan/eslint-config
  • Prisma for database management
  • Vitest for testing (tests not yet implemented)
  • pnpm for package management
Terminal window
pnpm build # Compiles TypeScript to prod/ directory
pnpm lint # Runs ESLint with zero warnings policy
pnpm start # Runs the compiled application with 1Password secrets

The codebase follows a modular architecture with clear separation between:

  • Command definitions (registration data)
  • Command implementations (business logic)
  • Utility functions (shared functionality)
  • Database models (data persistence)
  • Web server (health monitoring)