Battle.net & Discord Integration Guide
1. Authentication (OAuth) - User Login
Battle.net OAuth Setup
-
Create Battle.net API Client:
- Go to https://develop.battle.net/access/clients
- Click "CREATE CLIENT"
- Name: "Sanctum (Dev)"
- Redirect URLs:
http://localhost:3000/api/v1/auth/battlenet/callback - Copy Client ID and Secret
-
Update
apps/api/.env:BATTLENET_CLIENT_ID=your_client_id
BATTLENET_CLIENT_SECRET=your_secret
BATTLENET_CALLBACK_URL=http://localhost:3000/api/v1/auth/battlenet/callback -
Test: Visit
http://localhost:3000/api/v1/auth/battlenet
Discord OAuth Setup
- Create Discord App: https://discord.com/developers/applications
- OAuth2 → Add redirect:
http://localhost:3000/api/v1/auth/discord/callback - Update
.envwith Client ID and Secret - Test: Visit
http://localhost:3000/api/v1/auth/discord
Discord Server Connection (Guild Settings UI)
Guild managers can connect a Discord server to their guild via Guild Settings → Integrations (/guilds/:id/settings/integrations). The UI lets them enter a Discord Server ID and, once connected, browse the server's available channels and roles. This data is fetched from the Discord API via GET /api/v1/discord/:guildId/channels and /roles.
2. External API Data Fetching (Background Jobs)
Overview
The JobsModule stub is ready for background ingestion of:
- Battle.net API: Guild roster, character profiles, realm status
- Discord API: Guild member list, roles sync
- Raider.IO API: Mythic+ scores, raid progress
Battle.net Game Data API
Key endpoints for guild management:
// Example: Fetch guild roster
GET https://us.api.blizzard.com/data/wow/guild/{realm-slug}/{guild-name-slug}/roster
Headers: Authorization: Bearer {access_token}
// Example: Fetch character profile
GET https://us.api.blizzard.com/profile/wow/character/{realm-slug}/{character-name}
Implementation pattern:
- Store guild realm + name in database
- Background job refreshes roster every 6-24 hours
- Never call Blizzard API during user requests (always read cached DB data)
- Use BullMQ + Redis for job queue
Discord Guild API
Key endpoints:
// Fetch Discord guild members
GET https://discord.com/api/v10/guilds/{guild-id}/members
Headers: Authorization: Bot {bot-token}
// You need a Discord Bot for this (different from OAuth app)
Implementation pattern:
- Store Discord server ID in Guild table
- Background job syncs member list
- Match Discord users to Battle.net accounts via linked accounts table
Raider.IO API
Public API (no auth required):
// Guild progress
GET https://raider.io/api/v1/guilds/profile?region=us&realm={realm}&name={guild-name}&fields=raid_progression,raid_rankings
// Character scores
GET https://raider.io/api/v1/characters/profile?region=us&realm={realm}&name={name}&fields=mythic_plus_scores_by_season:current
Implementation pattern:
- Fetch on-demand or via background jobs
- Cache for 1-6 hours (Raider.IO updates frequently)
- Display in guild/character detail pages
3. Implementation Roadmap
Phase 1: OAuth (✅ Done)
- Battle.net login
- Discord login
- JWT tokens
Phase 2: Guild Data Ingestion
- Add BullMQ + Redis to
JobsModule - Create
GuildRosterJob- fetches roster from Battle.net - Store characters and memberships
- Schedule: runs every 6 hours
Phase 3: Discord Sync
- Create Discord Bot
- Add
DiscordSyncJob- syncs guild members - Link Discord users to Battle.net accounts
- Schedule: runs every 30 minutes
Phase 4: Raider.IO Integration
- Add
RaiderIOJob- fetches scores - Store in
PerformanceMetricstable (extension domain) - Display on character/guild pages
Phase 5: Real-time Updates (Future)
- Discord webhooks for member joins/leaves
- Battle.net webhooks (if available)
- WebSocket updates to frontend
4. Next Steps (Immediate)
-
Get OAuth credentials:
- Battle.net: https://develop.battle.net/access/clients
- Discord: https://discord.com/developers/applications
-
Test login flows:
- Visit
/api/v1/auth/battlenet - Visit
/api/v1/auth/discord - Verify JWT works at
/api/v1/auth/me
- Visit
-
Add BullMQ for background jobs:
cd apps/api
pnpm add @nestjs/bullmq bullmq ioredis -
Create first job: Guild Roster Sync
- Fetch roster from Battle.net
- Create/update User records
- Create Membership records
- Link to Guild