ClanGuard Bot¶
C# / .NET 8 Discord bot that handles activity tracking, AWOL management, auto-promotion, event attendance, Reddit recruitment leads, and a stack of QoL automations for the 189th.
- Repo:
dklaver15/189th-clanbot - Stack: .NET 8 Worker, Discord.Net 3.17, EF Core (SQLite, WAL mode), Serilog
- Hosting: DigitalOcean droplet (
ubuntu-clanbot-nyc3), Docker Compose - Deploy: GitHub Actions → SSH to droplet →
docker compose up -d --force-recreate
Where to start¶
- New to the codebase? → Architecture
- Trying to deploy or debug a deployment? → Deployment & Infra
- Something is on fire? → Runbook
- Need to know what a config key does? → Configuration Reference
- Looking up a slash command? → Slash Commands
- Tracing data through the DB? → Database Schema
Subsystems at a glance¶
| Subsystem | Purpose | Entry points |
|---|---|---|
| AWOL | Flag inactive members, kick after grace period | AwolCheckService, KickAwolsCommandHandler |
| Auto-Promotion | Tier-based automatic rank advancement | AutoPromotionService, PromotionService |
| Apollo Integration | Parse Apollo bot embeds for event tracking | ApolloEventHandler, ApolloEmbedParser |
| Event Attendance | Snapshot voice presence during events | EventAttendanceSnapshotService |
| Google Sheets/Calendar | Roster export, gamertag log, calendar sync | GoogleSheetsService, GoogleCalendarService |
| Patrol Watch | Detect when squads form in LFG voice | PatrolWatchService |
| Reddit Leads | Recruitment lead detection from subreddits | RedditLeadService, LeadMatcher |
| Weekly Briefing | AI-generated officer briefing every Sunday | WeeklyOfficerBriefingService |
| Reminders & Bumps | Tickets, guests, onboarding, Disboard bumps | *ReminderHandler, BumpReminderHandler |
| Invites & Attribution | Track which invite link a join came from | InviteCacheService, InviteAttributionService |