Features
Meww.me is a full-stack Discord music bot with a web dashboard. This page lists every major feature as implemented in the current codebase.
Music Playback
- Play tracks from YouTube, YouTube Music, Spotify, SoundCloud, Deezer, Apple Music, Tidal, and direct HTTP streams via Lavalink v4.
- Queue management with add, remove, skip, shuffle, move, and clear.
- Loop modes: off, track, and queue.
- Autoplay - automatically queues related tracks when the queue ends.
- Volume control (1-100, default configurable in
config.yml). - Seek within tracks by timestamp.
- Now-playing embed with two display modes:
- V1 (Music Card) - visual music card image generated by mewcard (opens in a new tab) with 19+ themes, dynamic colors, and album artwork. Users can create custom card themes via the mewcard repository.
- V2 (Container) - lightweight text-based container using Discord Components V2. No image generation, faster rendering.
- Interactive playback buttons: Shuffle, Previous, Pause/Play, Skip, Loop, Autoplay, Volume, Stop, Queue.
- Recommendation select menu - suggests up to 10 similar tracks via Last.fm API (
track.getSimilar+artist.getSimilar). Cached for 10 minutes per track. - Audio filter select menu with 24 real-time effects.
- Lyrics display (synced and plain) via lrclib.net (opens in a new tab).
Audio Filters
26 real-time audio filters applied through Lavalink's equalizer and filter system:
Nightcore, Bass, Bassboost, Soft, Pop, Treblebass, Earrape, Equalizer, 3D (Eight Dimension), China, Chipmunk, Darthvader, Daycore, Doubletime, Karaoke, Lofi, Pitch, Rate, Reset, Slowmotion, Speed, Superbass, Television, Tremolo, Vaporwave, Vibrato.
Each filter is a standalone slash command under the /filter category.
Playlists
- Create, view, edit, and delete personal playlists.
- Add or remove individual tracks from playlists.
- Import playlists from Spotify.
- Play an entire playlist into the queue.
- Save the current queue as a new playlist (
/savequeue). - Playlist access can be gated behind a premium or voter requirement via
DASHBOARD_ACCESS.Playlist.
Games
12 interactive Discord games plus Music Trivia:
2048, Connect4, FastType, Flood, GuessThePokemon, Hangman, Minesweeper, RockPaperScissors, Slots, Snake, TicTacToe, Wordle, Music Trivia.
Music Trivia
A full-featured music guessing game:
- Single player and multiplayer modes (lobby system with join/start/cancel).
- Audio clips played via Deezer 30-second previews through Lavalink.
- Smart song selection with weighted scoring, anti-repeat logic, and Last.fm personalization.
- 12 genres: Pop, Rock, Hip-Hop, K-Pop, J-Pop, Indie, R&B, Electronic, Latin, Country, Metal, Classical.
- Scoring system: base points (100) + speed bonus (0–50) + streak bonus.
- 11 achievement badges (first game, 10/50/100 games, points milestones, perfect round, etc.).
- Per-user stats, history (last 50 sessions), and genre-level statistics.
- Monthly cleanup of stale preference data (runs on the 25th of each month).
Last.fm Scrobbling
- Connect a Last.fm account via OAuth callback through the Express WebServer.
- Automatic scrobbling of played tracks to Last.fm.
- Scheduled scrobble processing (configurable interval, default 60 seconds).
- Dashboard integration for connecting and disconnecting Last.fm accounts.
Premium System
Tiered premium with multiple sources:
| Source | Type | Description |
|---|---|---|
| Bot Owner | Automatic | OWNER_ID in config always bypasses |
| Admin | Automatic | ADMIN array in config always bypasses |
| Patreon | Webhook | Active pledges above minimum tier |
| Ko-fi | Webhook | Active subscriptions via Ko-fi webhook |
| Premium Role | Guild | Members with the configured premium role |
Premium status is unified - the system checks all sources and returns a single boolean. Per-feature access control is managed via DASHBOARD_ACCESS and COMMANDS_ACCESS in config.
Welcomer
Canvas-based welcome and leave images:
- Triggered on
guildMemberAddandguildMemberRemoveevents. - Customizable background images.
- Configurable welcome and leave channels.
- Per-guild toggle via
WELCOMER_EVENTSconfig.
Ticket System
- Admin-managed support ticket creation.
- Transcript export.
- Helpdesk and helper configuration via dashboard admin routes.
- Close, delete, and history endpoints.
Temporary Voice Channels
- Auto-created voice channels when users join a designated channel.
- Channels are automatically deleted when empty.
- Managed by
TempVoiceService.
DJ Role
- Restrict music commands to a specific Discord role.
- Configurable per guild via the
/settings djcommand or dashboard.
Sharding
Built-in cluster manager (ClusterManager) for scaling across multiple shards:
- Configurable
shardsPerClustersandtotalClustersinconfig.yml. - Worker process spawning via
bootloader.ts. - Health reporting via
ClusterHealthReporter. - Start with
npm run start:shards.
Web Dashboard
A React + Vite frontend with:
- Discord OAuth2 login (session-based, 7-day cookie).
- Server selector showing mutual guilds.
- Real-time music player with playback controls, queue view, and volume slider.
- Guild settings editor (prefix, language, DJ role, 24/7 mode, autoplay, song request channel).
- Liked songs management.
- User profile page with listening stats and premium badge.
- Global stats page.
- System status page.
- Admin dashboard (premium management, blacklist, maintenance, bot profiles, helpdesk).
- AI Music Chat powered by Google Gemini.
- Background music player component.
AI Music Chat
Dashboard-integrated AI assistant powered by Google Gemini:
- Natural conversation about music with song recommendations.
- Multiple API key rotation with automatic fallback.
- Multiple model support (Gemini 2.5 Flash, 2.0 Flash, etc.).
- Song artwork enrichment from Deezer, iTunes, and Spotify.
- Per-user chat history (last 50 messages, 12 sent as context).
- Smart play button (play immediately or add to queue based on current state).
- Access controllable via
DASHBOARD_ACCESS.AiChat.
Broadcast and Tips System
Smart, non-intrusive user education:
- 15% trigger probability on targeted commands.
- 24-hour cooldown between broadcasts per user.
- Auto-reset after all tips have been seen.
- Supports rich container mode and simple text mode.
- Interactive command mentions (clickable
/commandin Discord).
Localization
22 languages supported:
Arabic, Czech, German, English, Spanish, French, Hebrew, Hindi, Indonesian, Italian, Japanese, Korean, Dutch, Polish, Portuguese, Russian, Thai, Turkish, Ukrainian, Vietnamese, Chinese (Simplified), Chinese (Traditional).
Language files are stored in src/languages/<code>/ and loaded by the Localization service.
REST API
Two-layer API architecture:
| Layer | Framework | Port | Purpose |
|---|---|---|---|
| Internal API | Fastify | 2555 | /v1/* routes - bot control, player state, settings, search |
| Dashboard Proxy | Fastify | 2555 | /api/* routes - session-authenticated proxy to internal API |
| Webhook Server | Express | 2444 | /vote, /kofi, /lastfm - external service webhooks |
See REST API for full endpoint documentation.