JMusicBot v0.7.0
The biggest release yet. This version rebuilds the bot around modern slash commands, introduces a dedicated service layer, adds interactive message components (buttons, pagination, selectable queues/playlists), ships a brand-new desktop GUI with live performance monitoring, adds proxy support, and lands a massive automated test suite.
Highlights
- Full slash command suite (
/play,/queue,/np,/playlists,/settings, and many more) with a modern, componentized Discord UX. - Interactive everything — clickable Now Playing controls, a selectable/movable queue, paginated lists, and interactive playlist & history management.
- New desktop GUI built on FlatLaf, with themes and live audio/system health dashboards.
- Playback history with previous/rewind support and a
/historycommand. - Playlist favorites and richer playlist browsing.
- Proxy support for Lavaplayer, JDA, and version checks.
- Dependency upgrades across JDA, Lavaplayer, and the YouTube source.
- Huge test-coverage expansion with reusable test fixtures and scenario builders.
Slash Commands (v2)
The bot now ships a complete slash command layer (commands.v2) alongside the classic prefix commands, sharing the same underlying logic.
- Music:
/play,/search,/queue,/nowplaying(/np),/playlists,/history,/remove,/seek,/shuffle,/skip - DJ:
/forceskip,/forceremove,/movetrack,/playnext,/pause,/repeat,/skipto,/stop,/volume - Admin:
/settings,/prefix,/setdj,/settc,/setvc,/queuetype,/skipratio,/nplayout,/npbuttons,/clearchannel - Smart registration: a new
SlashCommandRegistryperforms hash-based change detection so commands are only re-registered with Discord when they actually change. - Unified output: an
OutputAdapterabstraction (TextOutputAdapters/SlashOutputAdapters) lets the same command logic serve both prefix and slash contexts.
Interactive Message Components
Discord messages are now interactive rather than static.
- Now Playing controls — play/pause, skip, and more directly on the Now Playing message.
- Interactive queue — select, remove, move, play-next, and play-now buttons on the queue embed.
- Interactive playlists — browse, view details, favorite/unfavorite, select, move, and unselect entries, with an "Add all to queue" action.
- Interactive history — re-queue past tracks straight from the
/historyview. - Shared pagination — a reusable
PaginatedListEmbedUtil/PaginatedListComponentssystem powers consistent paging across queue, playlists, and history. - Dedicated interaction listeners (
PlaybackControlsListener,QueueInteractionListener,PlaylistsInteractionListener,HistoryInteractionListener,SettingsInteractionListener,NowPlayingCleanupListener,VoiceStateListener).
Now Playing Overhaul
- Configurable layout (
fullvsminimal) and buttons via/nplayoutand/npbuttons. - Optional progress bar (enables a 10s refresh thread when on).
- Optional YouTube thumbnails.
- Rebuilt
MessageFormatterfor cleaner metadata and status display. - Robust message reconciliation and fallback text-channel resolution in
NowPlayingHandler.
Playback History
- New
PlaybackHistorystructure backing previous / rewind functionality. /historycommand with interactive re-queueing.- Configurable
playback.maxHistorySize(default40,0disables history). - Queue operations that preserve history (
stopAndClearQueuePreserveHistory,clearHistory).
Playlists
- Favorites — mark playlists as favorites and surface them first.
- Interactive details view with pagination and async preview loading.
- Select / unselect / move controls for managing playlist contents.
Desktop GUI
An optional, modern desktop interface (disable with gui.enabled = false).
- Built on FlatLaf 3.7 with light / dark / darcula / intellij themes and configurable font size.
- Panels for Status, Performance, System Health, Source Health, Config, Settings, and an Enhanced Timeline.
- Console output is buffered early and replayed into the GUI (
TeeOutputStream), with EDT exception logging and safer auto-scroll.
Performance Monitoring
New instrumentation to diagnose stutters and resource pressure:
PerformanceMetrics,GCMonitor,SystemHealthMonitor,VoiceConnectionMonitor,TrackLoadingMonitor.AudioMetricsListener/AudioLoadWrapper(no-op when running headless).- New
performanceconfig for audio buffering:nasBufferMs(default800) andframeBufferMs(default2000) to absorb GC pauses.
Proxy Support
- New
proxyconfig block (host,port) plus per-component routing toggles for Lavaplayer, JDA, and GitHub version checks. - Also configurable via standard
-Dhttp.proxyHost/-Dhttps.proxyHostJVM args. - Backed by a new
ProxyUtil. (Marked experimental.)
Channel Management
- New
/clearchannelcommand (owner/admin) with aChannelClearHelper. - Configurable
commands.clearChannel.deleteLimit(default50) andageDays(default14).
Settings
- New
/settingscommand with an interactive settings panel (SettingsPanelRenderer) for viewing and adjusting per-guild configuration.
Configuration
- Config schema bumped to version 2 with an automatic V1 → V2 migration.
voice.aloneTimeUntilStopSecondsnow defaults to10(previously disabled).- New sections:
gui,performance,proxy,commands.clearChannel, plus expandednowPlayingandplaybackoptions.
Dependency Updates
| Dependency | From | To |
|---|---|---|
| JDA | 6.3.0 | 6.4.2 |
| Lavaplayer / lava-common | 2.2.6 | 2.2.7 |
| YouTube Source | arif-banai fork |
dev.lavalink.youtube:v2 1.18.1 |
| JDave | 0.1.5 | 0.1.7 |
| FlatLaf (new) | — | 3.7 |
- Migrated to the upstream
dev.lavalink.youtubev2 module for lavaplayer 2.x thumbnail-capable clients (usesAndroidVrWithThumbnailfor non-OAuth).
Testing & Quality
- Extensive new unit test coverage across services, commands (v1 & v2), listeners, audio, queue, playlists, config, and utilities.
- Reusable test infrastructure:
TestBase,AudioTestFixture,ServiceTestFixture,SlashCommandTestFixture,ListenerTestFixture, and scenario/state builders. - Improved mojibake (encoding) handling in track titles and autocomplete, with tests.
- Added
docs/ARCHITECTURE.mddescribing the layered architecture.
Upgrade Notes
- Config auto-migrates to version 2 on first launch (a backup is created). Review the new
gui,performance, andproxysections inreference.confif you want to customize them. - The GUI is enabled by default — set
gui.enabled = falsefor headless/server deployments. - Slash commands register automatically; allow a short delay for Discord to propagate them.
Full changelog: v0.6.2...v0.7.0
Setup
Just drop the new jar in and run. It will automatically migrate your config.