added
changed
- guild-scoped player configuration (replacing user-based settings)
- playercontrol command for managing player ui in real-time
- guild-level bot profile customization (name, avatar, bio, banner) with review system
- multi-source fallback system for more reliable music playback
- dynamic recommendation menu based on current track (last.fm)
- new database schemas:
- guildfiltermenu
- guildbuttonlabel
- guildmusiccard
- guildrecommendationmenu
improved
- player configuration now fully resolved using guildid
- default music card theme moved to config (default_music_card_theme)
- simplified theme resolution (guild config → default)
- player components always initialized, visibility controlled via config
- partial migration from components v1 to v2
removed
- real-time updates when player settings are changed
- more consistent initialization for filter and recommendation components
- improved shard/cluster handling (cluster_id support)
- recommendation system now more relevant to current track
notes
- user-scoped configuration
- dependency on track.requester
- old config structure (filtermenu, buttonlabel, musiccard)
- music card is not hot-reloadable (applies on next track)
- disabled features in default config cannot be enabled via command
- recommendation menu only appears when data is available
Lyrics Improved YouTube Detection
-
- Added metadata normalization layer for YouTube tracks
- Cleans noisy titles (e.g. Official Video, HD, MV, emojis, brackets)
- Extracts artist and track name from common patterns:
Artist - Song
-Song by Artist
- Implemented multi-query fallback system for better match accuracy:
- normalized query
- swapped artist/title
- title only
- raw title fallback
- Applied improvements to:
- Dashboard lyrics endpoint (/api/player/:guildId/lyrics)
- Discord/lyricscommand
Apple Music Auto Token Management
- auto-generated if missing
- Added automatic Apple Music token fetching from
music.apple.com- Token is now:
- auto-refreshed before expiration (based on JWTexp)
- re-fetched on 401 errors
Spotify Multi-Client Support
- Prevents duplicate refresh requests using shared promise system
- Falls back to previous token if refresh fails
- No additional dependencies required
Improvements
- Added support for multiple Spotify API credentials
- Automatic fallback when a client hits rate limits
- Fully backward compatible with single client configuration
- New optional
clientsarray in config
Notes
- Improved lyrics detection accuracy specifically for YouTube sources
- More reliable artist/title parsing with heuristics
- Better handling of ambiguous YouTube metadata
- Updated top chart API endpoint
- Reduced cache TTL from 6 hours → 1 hour
- YouTube metadata parsing is heuristic-based and may not always be 100% accurate
- Featured artist tags (
feat.,ft.) are removed for better matching- No external metadata APIs are used (pure local parsing only)
- Existing cache system remains unchanged
Major Dashboard & System Redesign
Shard, Cluster & Monitoring System
Dashboard API & Web Monitoring
- Auto sharding with dynamic cluster system via Discord Gateway API
- Automatic cluster count calculation based on available CPU cores
- Centralized monitoring for shard, cluster, and system metrics via new
/system-statusendpoint- Worker cluster heartbeat & periodic metrics reporting to primary process
- Bot activity now uses total cross-cluster metrics instead of local shard cache
Premium System (BREAKING CHANGE)
- System status endpoint added to REST API and dashboard proxy
- Dashboard can now retrieve shard/cluster monitoring data centrally
- Socket bridge improved to reduce noisy errors for normal
400cases- Bot voice channel member list endpoint added for listening party feature
Ticket System & Helpdesk/Helper Management
- Migrated to new
PremiumUserLegacyandPremiumGuildLegacyschemas- All old
premiumandpreGuildreferences updated in commands, events, services, and schedulers- Admin APIs for grant, list, and remove legacy premium user/guild
- Premium claim/unclaim APIs for Patreon and Ko-fi integration
- Dashboard access resolver extended to recognize legacy premium users and guilds
WebSocket Stability (Critical Fixes)
- Ticket system restructured with
TicketSetupstoring guild config, active tickets, history, and countersTicketHandlerupdated to use active and historical data fromTicketSetup- Ticket transcripts now rely on Discord attachments instead of local file storage
- Complete admin API for ticket system: config, toggle, setup, update, close, delete, history, delete all
- New schemas:
HelpdeskDeployandHelperDeploy- Admin API for deploy and remove Helpdesk/Helper messages directly from dashboard
Player Data Enhancements
- Socket.IO transport order changed to
["websocket", "polling"]- WebSocket as primary, polling as fallback- Extended Socket.IO CORS to use same
allowedOriginsSet as Fastify CORS- WebSocket route
/v1/websocketisolated frompreValidationhook to fix 401 BotWsService errors- Added
allowUpgrades: trueconfiguration
Removed Commands and System
- Track requester data now includes
avatarURL- Dashboard
voiceStateUpdateevent now sends richer user data: username, global name, avatar, and bot flag
add 21 new languages to improve localization support
- Admin command category: Blacklist, Helpdesk, Helper, Maintenance, ModLogSetup, ModLogToggle, PremiumCode, PremiumRedeem, PremiumRemove, TicketSetup
- Modlog system and all related handlers/utilities
- Transcript cleanup scheduler (transcripts no longer stored as files)
- Code, GuildPremium, ModLogChannel, ModLogToggle, Premium, TicketCount, TicketData
- All Modlog event handlers
AI Music Chat New Feature
Added
- AI Chat Service Conversational music assistant powered by Google Gemini
- Music-only system prompt with mood detection and song recommendations
- Multi API key rotation supports multiple Gemini API keys with automatic fallback
- Multi model fallback chaingemini-2.5-flash→gemini-2.0-flash→ you can set
- Structured song parsing from AI responses with[SONGS]...[/SONGS]format
- Conversation history context, sends last 20 messages for contextual replies
- Max 10 song recommendations per response
- Chat History Database Persistent chat storage
- Save/load/clear chat history per user
- Auto-prune at 50 messages per user
- API Endpoints:
-POST /api/dashboard/:guildId/ai-chatSend message to AI, returns response with songs
-GET /api/dashboard/:guildId/ai-chat/historyLoad chat history (no AI tokens consumed)
-POST /api/dashboard/:guildId/ai-chat/clearClear chat history
Top Charts By Country
Added
- Spotify Top Chart Service Fetches top 25 tracks per country
- 6-hour server-side cache with fallback to global charts
- Returns: rank, title, artist, Spotify URL, cover image
- API Endpoints:
-GET /api/top-chart?country=Top chart tracks by country (19 countries supported)
-GET /api/recommendedAuto-detected country recommendations via Accept-Language header
-GET /api/top-tagsTop 25 music genres from Last.fm (chart.getTopTags), 1-hour cache
-GET /api/tag-tracks?tag=Top 25 tracks per genre from Last.fm (tag.getTopTracks), 30-min cache, artwork from iTunes/Deezer
-GET /api/recommendations?track=&artist=Smart similar tracks & artists from Last.fm, 10-min cache
Fixed
- Auto-hide on track end Overlay now automatically disappears when music finishes playing
-PLAYER_ENDsetscurrent=null→hasPlayer=false→ overlay hides
- Added re-discover timeout (2s) when current track becomes null
- Added auto-close effect whenshouldShowbecomes false while panel is open
Personalized Recommendations
Discover Genres
- Added real-time music recommendations based on the currently playing track
- Uses Last.fm API (
track.getSimilar,artist.getSimilar,artist.getTopTracks) to find related music- Album art fetched from iTunes and Deezer APIs as fallback sources
- Smart YouTube title/artist parsing — cleans
(Official Video),[Lyrics], channel names like- TopicandVEVOfor accurate recommendations from any source- Results cached for 10 minutes per track to reduce API calls
- New endpoint:
GET /api/recommendations?track=...&artist=...
Search Source Fallback
- Browse music by genre with colorful tag pills (rock, pop, electronic, etc.)
- Click a genre to see its top tracks with album art
- Uses Last.fm API (
chart.getTopTags,tag.getTopTracks) for genre data- Album art fetched from iTunes + Deezer with multi-source fallback
- Tags cached for 1 hour, tracks cached for 30 minutes per genre
- New endpoints:
GET /api/top-tags,GET /api/tag-tracks?tag=...
- When searching by text and the primary source fails (e.g., Spotify rate limit), automatically tries alternative sources
- Fallback chain: Spotify → Deezer → Apple Music → SoundCloud
- Each source has its own fallback order
- Only applies to text searches, direct URL links are not affected
Removed
Spotify OAuth & Playlist Features
- Removed Spotify OAuth login flow (
/auth/spotify,/auth/spotify/callback)- Removed Spotify connection endpoints (
GET/POST/DELETE /api/user/spotify)- Removed Spotify playlist browsing from Player sidebar
- Removed Spotify card from Profile page (connect/disconnect button, Spotify ID input)
- Removed
SpotifyOAuthService.ts— no longer needed- Removed
spotifyOAuthStateandspotifyCallbackUrlfrom session types- Removed
"spotify"fromDashboardViewtype- Removed Some Command (Radio, Spotify Connect)
APIs Used
| API | Purpose | Auth Required |
|-----|---------|---------------|
| Last.fmtrack.getSimilar| Find similar tracks | API Key |
| Last.fmartist.getSimilar| Find similar artists | API Key |
| Last.fmartist.getTopTracks| Top tracks per artist | API Key |
| Last.fmchart.getTopTags| Popular genre tags | API Key |
| Last.fmtag.getTopTracks| Top tracks per genre | API Key |
| iTunes Search API | Album art thumbnails | None |
| Deezer Search API | Album art fallback | None |
added
changed
- radio station api routes
- guild default music source configuration
- radio station playback support in bot
- updated api endpoints for dashboard integration
fixed
- updated bot api to support guild default source settings
- mproved integration between dashboard and bot playback system
removed
- prevent discord playing embed when music is started from dashboard
- removed radio command from bot (radio is now managed through dashboard)
New Systems Added
REST API System
WebSocket Integration
- New API endpoints for dashboard integration
- Player control API for the web music player
- Guild settings management API
- User profile and statistics API
Dashboard Integration
- Real-time communication between the bot and web player
- Live player updates (track progress, queue updates, etc.)
- Instant synchronization between Discord and the website
Web Player Support
- Full support for the Mewwme Web Dashboard
- Manage guild settings directly from the website
- View player status and statistics in real-time
- Control music directly from the browser
- Queue management and track controls
- Live player status synced with Discord
Purchase the Website Dashboard Web Player here
refactor(topgg): migrate to API v1 and implement Webhooks V2
- Updated Top.gg API base URL to v1 and added Bearer token authorization.
- Refactored
checkVoteto use the new v1 endpoint with?source=discordand addedexpires_atvalidation.- Replaced legacy
@top-gg/sdkwith secure Webhooks V2 (HMAC SHA-256 signature verification).- Fixed user ID parsing in webhook payload (now using
platform_id).- Added support to process and log
webhook.testevents.- Enhanced vote reminder button to dynamically fetch from Top.gg API if user is missing in the local database.
- Cleaned up redundant debug loggers for a cleaner console.
