You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This roadmap tracks all completed upgrades, runtime bug resolutions, and pending roadmap items across every development session. It is maintained to give a single source of truth for what has been shipped and what remains.
Stage 02: Docker & Workspace Infrastructure — Updated Dockerfile and docker-compose.yml to Node 20 and pnpm 8.6.7. Verified workspace build scripts.
Stage 03: Environment Schema Expansion — Added YOUTUBE_REFRESH_TOKEN, music API key schemas, and updated env.ts schema validation.
Stage 04: Lavalink v4 Engine Migration — Upgraded from legacy lavaclient v3 to lavalink-client v2 (2.2.0), updating ExtendedClient, QueueClient, Song, and Queue.
Stage 05: GIF & Media API Migration — Replaced Tenor API with Klipy API (searchGif.ts) and updated /waifu to waifu.im.
Stage 06: Game Search API Migration — Replaced RAWG API with Twitch-backed IGDB API.
Stage 07: Audio API Key Gating — Restored SoundCloud as a fallback (gated behind Artist Pro keys). Gated YouTube, Spotify, and Lavalink launch behind present keys.
Stage 08: Command & Interaction Audit — Fixed double-reply bugs (/tv-show-search), /waifu SFW/NSFW age gating, /activity channel types, /reddit deferred replies, and /lyrics track title resolution.
Stage 09: Documentation Sync — Created comprehensive guides in wiki/ (Setup-and-Deployment.md, Lavalink.md, API-Keys.md, Commands-Reference.md).
Stage 10: CI/CD Pipeline Update — Aligned .github/workflows/main.yml with Node 20 and pnpm 8.6.7.
Stage 11: GitHub Issue Templates — Converted .github/ISSUE_TEMPLATE/*.md to GitHub Issue Forms (.yml).
Stage 12: Control Panel & Log Streaming — Added scripts/dev.mjs, scripts/start.mjs, file-only log streaming (logs/), and web log console router.
Stage 13: Automatic Database Migration — Added runDbPush() in scripts/common.mjs to execute prisma db push automatically before bot initialization.
Stage 14: CommonJS Build Resolution — Locked @t3-oss/env-core@0.7.1 and lavalink-client@2.2.0 to preserve CJS output compatibility for @master-bot/bot. Set "moduleResolution": "bundler".
Stage 15: Log Management & Launcher Security — Configured launcher write streams to overwrite ({ flags: 'w' }) on launch. Gated Lavalink server launch when no audio keys exist.
Stage 16: Voice Gateway Packet Routing — Fixed Discord voice connection failure in ExtendedClient.ts by changing this.ws.on() to this.on('raw'), ensuring header t: "VOICE_SERVER_UPDATE" reaches lavalink-client. Reordered plain-text search in searchSong.ts (ytsearch primary).
Stage 17: Ambient Token Management & .env Safety — Updated extractYouTubeRefreshToken() regex to handle parenthesized tokens ((1//...)). Replaced string replace() calls in saveYouTubeRefreshToken() with function replacers (() => ...) to eliminate .env corruption. Bound refreshToken: "${YOUTUBE_REFRESH_TOKEN}" natively in application.yml.
Stage 19: Remote Cipher, Auth & Monorepo Upgrades — Configured remote cipher (https://cipher.kikkia.dev/) with JVM system property injection; recreated /youtube-auth slash command and device code flow via YouTube TV endpoints; implemented NextAuth v5 dual-domain fallback (trustHost: true); built pre-launch build verifier in start.mjs; cleaned Discord API stale commands; and opened upstream PR feat: modernize monorepo, upgrade Lavalink v4 & cipher, enhance dashboard, and fix auth/tooling #829.
Stage 20: Music Trivia Game Feature — Restored interactive /music-trivia and /stop-trivia commands with curated decade catalog (triviaSongs.ts), fuzzy typo matcher (triviaMatcher.ts), 30-second snippet audio streaming via Lavalink, real-time message collection, round reveals, and final podium standings.
Stage 21: Unified Settings Command & Welcome Automation — Consolidated guild configuration into /set with Welcome channel/message/toggle/test, Twitch streamer alerts (twitch-add, twitch-remove, twitch-list), Log channel (log-channel, log-disable), default playback volume, and overview (view). Enhanced guildMemberAdd.ts with template placeholders and deleted obsolete standalone commands from the Discord API.
Stage 22: Moderation Suite & Support Ticket System — Built 5 moderation slash commands (/ban, /kick, /slowmode, /timeout, /purge), thread-based ticket system with auto-deploying interactive panel, dynamic greeting formatting, and .txt transcript archiving.
Stage 23: Docs Sync, Issue Templates & Info Commands — Corrected upstream repo references across docs, rewrote README.md/wiki for accuracy, added .github issue chooser config + 4 targeted issue templates, added a tracked application.yml.example, and shipped feat(bot): upgraded /about (optional type option defaulting to Bot/Server/User info) plus a standalone /dashboard command. Command count now 67.
Stage 24: YouTube Playback & Dashboard Repair — Resolved the AllClientsFailedException audio stream-extraction failure by elevating MUSIC to a first-class InnerTube client in the playback roster (MUSIC, ANDROID_VR, IOS, TV, WEB, WEBEMBEDDED) and completing the remote cipher integration, restoring reliable YouTube playback. Completed the full dashboard audit: verified App Router SSR/CSR boundaries, tRPC 11 + React Query 5 integration, NextAuth v5 Discord OAuth session flow, and graceful handling of missing/empty log files.
Session History
Session 01 (Baseline Reset): Hard reset main to upstream/main. Preserved previous local state in backup/head-ba4824. Initialized local tracking docs.
Session 02 (Stages 01–12): Completed dependency updates, Docker configuration, media API migrations (Klipy/IGDB), wiki documentation sync, control panel scripts (dev.mjs, start.mjs), and owner log console router.
Session 03 (Stages 13–17): Resolved Discord voice packet routing via client.on('raw'), added auto DB push (prisma db push), implemented API key gating, fixed plain-text search priority (ytsearch primary), eliminated .env regex replacer string corruption, and enabled native Spring token binding in application.yml. Added the AllClientsFailedException trace and the Dashboard audit plan.
Session 04 (Stage 18 Complete): Executed comprehensive root-cause repairs across the audio engine, launcher scripts, auth package, tRPC routers, and dashboard React server/client boundaries.
Session 06 (Stage 20 Complete): Restored /music-trivia and /stop-trivia with audio streaming, live chat scoring, and verified runtime in Discord.
Session 07 (Stage 21 Complete): Unified guild configuration into /set, added welcome placeholders and preview testing, consolidated Twitch and logging settings, and removed stale standalone commands.
Session 08 (Stage 22 Complete): Built the 5 moderation slash commands, thread-based support ticket system with auto-deployed panel, dynamic greeting formatting, and .txt transcript archiving.
Session 09 (Stage 23 — Docs & Templates Cleanup): Pointed docs at upstream galnir/Master-Bot (never the fork), rewrote README/wiki for accuracy, added issue chooser config + 4 targeted issue templates, added application.yml.example, and pruned gitignored files from the README architecture tree.
Session 10 (Stage 23 — Info Commands): Upgraded /about (optional type option defaulting to Bot, plus Server/User) and added a standalone /dashboard command linking to the web dashboard; bumped documented command count to 67.
Session 11 (Stage 24 — YouTube Playback Repair): Fixed the AllClientsFailedException by promoting MUSIC to a first-class InnerTube client and completing remote cipher integration, restoring reliable YouTube audio playback across all configured clients.
Session 12 (Stage 24 — Dashboard Audit Complete): Completed the dashboard audit and repair: verified App Router SSR/CSR boundaries, tRPC 11 + React Query 5 integration, NextAuth v5 Discord OAuth flow, and graceful empty-log handling.
Master-Bot Maintenance & Fix Roadmap
Executive Overview
This roadmap tracks all completed upgrades, runtime bug resolutions, and pending roadmap items across every development session. It is maintained to give a single source of truth for what has been shipped and what remains.
You can find my fork here: PhantomNimbi/Master-Bot
Completed Stages
11.15.1),@tanstack/react-query(5.80.3), Prisma (5.22.0),discord.js(14.14.1), and@sapphire/framework(4.8.2).Dockerfileanddocker-compose.ymlto Node 20 and pnpm 8.6.7. Verified workspace build scripts.YOUTUBE_REFRESH_TOKEN, music API key schemas, and updatedenv.tsschema validation.lavaclientv3 tolavalink-clientv2 (2.2.0), updatingExtendedClient,QueueClient,Song, andQueue.searchGif.ts) and updated/waifutowaifu.im./tv-show-search),/waifuSFW/NSFW age gating,/activitychannel types,/redditdeferred replies, and/lyricstrack title resolution.wiki/(Setup-and-Deployment.md,Lavalink.md,API-Keys.md,Commands-Reference.md)..github/workflows/main.ymlwith Node 20 and pnpm 8.6.7..github/ISSUE_TEMPLATE/*.mdto GitHub Issue Forms (.yml).scripts/dev.mjs,scripts/start.mjs, file-only log streaming (logs/), and web log console router.runDbPush()inscripts/common.mjsto executeprisma db pushautomatically before bot initialization.@t3-oss/env-core@0.7.1andlavalink-client@2.2.0to preserve CJS output compatibility for@master-bot/bot. Set"moduleResolution": "bundler".{ flags: 'w' }) on launch. Gated Lavalink server launch when no audio keys exist.ExtendedClient.tsby changingthis.ws.on()tothis.on('raw'), ensuring headert: "VOICE_SERVER_UPDATE"reacheslavalink-client. Reordered plain-text search insearchSong.ts(ytsearchprimary)..envSafety — UpdatedextractYouTubeRefreshToken()regex to handle parenthesized tokens ((1//...)). Replaced stringreplace()calls insaveYouTubeRefreshToken()with function replacers (() => ...) to eliminate.envcorruption. BoundrefreshToken: "${YOUTUBE_REFRESH_TOKEN}"natively inapplication.yml.MUSIC,ANDROID_VR,IOS,TV,WEB,WEBEMBEDDED); added free preview-filtered SoundCloud streaming;.youtube-oauth.jsonatomic file persistence; robust console error surfacing; Next.js RSC header serialization fix; NextAuth null safety; precondition latency caching (<300ms); low-level transport VoiceStatechannelIdinjection; startupwaitForPortsync; Discord video embed suppression;LAVA_ENABLEDenvironment gating; dynamicCommandHelp/HelpRegistryarchitecture.https://cipher.kikkia.dev/) with JVM system property injection; recreated/youtube-authslash command and device code flow via YouTube TV endpoints; implemented NextAuth v5 dual-domain fallback (trustHost: true); built pre-launch build verifier instart.mjs; cleaned Discord API stale commands; and opened upstream PR feat: modernize monorepo, upgrade Lavalink v4 & cipher, enhance dashboard, and fix auth/tooling #829./music-triviaand/stop-triviacommands with curated decade catalog (triviaSongs.ts), fuzzy typo matcher (triviaMatcher.ts), 30-second snippet audio streaming via Lavalink, real-time message collection, round reveals, and final podium standings./setwith Welcome channel/message/toggle/test, Twitch streamer alerts (twitch-add,twitch-remove,twitch-list), Log channel (log-channel,log-disable), default playback volume, and overview (view). EnhancedguildMemberAdd.tswith template placeholders and deleted obsolete standalone commands from the Discord API./ban,/kick,/slowmode,/timeout,/purge), thread-based ticket system with auto-deploying interactive panel, dynamic greeting formatting, and.txttranscript archiving.README.md/wiki for accuracy, added.githubissue chooser config + 4 targeted issue templates, added a trackedapplication.yml.example, and shippedfeat(bot): upgraded/about(optionaltypeoption defaulting to Bot/Server/User info) plus a standalone/dashboardcommand. Command count now 67.AllClientsFailedExceptionaudio stream-extraction failure by elevatingMUSICto a first-class InnerTube client in the playback roster (MUSIC,ANDROID_VR,IOS,TV,WEB,WEBEMBEDDED) and completing the remote cipher integration, restoring reliable YouTube playback. Completed the full dashboard audit: verified App Router SSR/CSR boundaries, tRPC 11 + React Query 5 integration, NextAuth v5 Discord OAuth session flow, and graceful handling of missing/empty log files.Session History
maintoupstream/main. Preserved previous local state inbackup/head-ba4824. Initialized local tracking docs.dev.mjs,start.mjs), and owner log console router.client.on('raw'), added auto DB push (prisma db push), implemented API key gating, fixed plain-text search priority (ytsearchprimary), eliminated.envregex replacer string corruption, and enabled native Spring token binding inapplication.yml. Added theAllClientsFailedExceptiontrace and the Dashboard audit plan./youtube-authwith native YouTube TV credentials and zero.envmutation, added dual-domain NextAuth compatibility, cleaned stale Discord commands, and published upstream Pull Request feat: modernize monorepo, upgrade Lavalink v4 & cipher, enhance dashboard, and fix auth/tooling #829./music-triviaand/stop-triviawith audio streaming, live chat scoring, and verified runtime in Discord./set, added welcome placeholders and preview testing, consolidated Twitch and logging settings, and removed stale standalone commands..txttranscript archiving.galnir/Master-Bot(never the fork), rewrote README/wiki for accuracy, added issue chooser config + 4 targeted issue templates, addedapplication.yml.example, and pruned gitignored files from the README architecture tree./about(optionaltypeoption defaulting to Bot, plus Server/User) and added a standalone/dashboardcommand linking to the web dashboard; bumped documented command count to 67.AllClientsFailedExceptionby promotingMUSICto a first-class InnerTube client and completing remote cipher integration, restoring reliable YouTube audio playback across all configured clients.