Skip to content

v0.7.0

Latest

Choose a tag to compare

@github-actions github-actions released this 14 Jul 05:37

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 /history command.
  • 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 SlashCommandRegistry performs hash-based change detection so commands are only re-registered with Discord when they actually change.
  • Unified output: an OutputAdapter abstraction (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 /history view.
  • Shared pagination — a reusable PaginatedListEmbedUtil / PaginatedListComponents system powers consistent paging across queue, playlists, and history.
  • Dedicated interaction listeners (PlaybackControlsListener, QueueInteractionListener, PlaylistsInteractionListener, HistoryInteractionListener, SettingsInteractionListener, NowPlayingCleanupListener, VoiceStateListener).

Now Playing Overhaul

  • Configurable layout (full vs minimal) and buttons via /nplayout and /npbuttons.
  • Optional progress bar (enables a 10s refresh thread when on).
  • Optional YouTube thumbnails.
  • Rebuilt MessageFormatter for cleaner metadata and status display.
  • Robust message reconciliation and fallback text-channel resolution in NowPlayingHandler.

Playback History

  • New PlaybackHistory structure backing previous / rewind functionality.
  • /history command with interactive re-queueing.
  • Configurable playback.maxHistorySize (default 40, 0 disables 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 performance config for audio buffering: nasBufferMs (default 800) and frameBufferMs (default 2000) to absorb GC pauses.

Proxy Support

  • New proxy config block (host, port) plus per-component routing toggles for Lavaplayer, JDA, and GitHub version checks.
  • Also configurable via standard -Dhttp.proxyHost / -Dhttps.proxyHost JVM args.
  • Backed by a new ProxyUtil. (Marked experimental.)

Channel Management

  • New /clearchannel command (owner/admin) with a ChannelClearHelper.
  • Configurable commands.clearChannel.deleteLimit (default 50) and ageDays (default 14).

Settings

  • New /settings command 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.aloneTimeUntilStopSeconds now defaults to 10 (previously disabled).
  • New sections: gui, performance, proxy, commands.clearChannel, plus expanded nowPlaying and playback options.

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.youtube v2 module for lavaplayer 2.x thumbnail-capable clients (uses AndroidVrWithThumbnail for 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.md describing the layered architecture.

Upgrade Notes

  • Config auto-migrates to version 2 on first launch (a backup is created). Review the new gui, performance, and proxy sections in reference.conf if you want to customize them.
  • The GUI is enabled by default — set gui.enabled = false for 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.

Download: JMusicBot-0.7.0.jar