Palette
← Back to projects
Personal

Discord Bot

Discord bot that helps organize gaming meetups by creating groups, proposing events, and collecting RSVPs directly in chat. It was containerized for deployment and self-hosted on my own VPS, with reminder messages to help players keep track of upcoming events.

TypeScript logo
Bun logo
Sqlite logo
Drizzle logo
Docker logo
Discord.js logo
GitHub Actions logo

Overview

A self-hosted Discord bot for organizing game meetups inside a server without sending users to an external app. I built the full TypeScript/Bun implementation: slash command routing, Discord interaction handling, SQLite persistence with Drizzle, timezone-aware scheduling, and the deploy/runtime workflow for a VPS-hosted bot.

What I Built

  • End-to-end slash command surface for group management, meetup creation/edit/cancel/delete flows, status views, personal/upcoming meetup lists, and timezone setup.
  • The live embed + button interaction system that rewrites RSVP state in place and disables actions when a meetup expires or is canceled.
  • Guild onboarding, autocomplete for group names and date/time inputs, and a Bun-based deploy script that pulls, migrates, and restarts the bot under systemd.

How It Works

  • Slash commands let members create groups, manage membership, set a server-wide default timezone, and propose meetups.
  • Each meetup is stored in SQLite, posted back into Discord as an embed with Join, Maybe, and Can’t buttons, and linked to its original channel/message ID so edits and cancellations can update the same post in place.
  • A background reminder loop runs every minute, finds meetups due for a one-hour reminder, pings only confirmed attendees, and marks reminders as sent to avoid duplicates.

Technical Highlights

  • Self-hosted VPS deployment: Deployed the bot to a Linux VPS and configured it with SSH access, environment variables, and a persistent runtime so it could stay online independently from my local machine.
  • Dockerized runtime: Containerized the bot with Docker to create a more predictable deployment environment and make the application easier to restart, update, and maintain.
  • CI/CD with GitHub Actions: Practiced a basic CI/CD workflow by using GitHub Actions to support automated deployment from the repository to the VPS.
  • AI-assisted development workflow: Used the project as a test case for Codex and OpenCode, experimenting with how AI coding tools can scaffold, debug, and iterate on a small but functional application.
  • Built for a real coordination problem: Created the bot to help my friend group schedule game nights, track availability, and reduce the manual back-and-forth that usually happens in Discord.
← Back to projects