Repository navigation
Ditto v0.5.0
Music now plays through Lavalink — started by Ditto itself, in the same server. No second server, no custom egg.
Built-in Lavalink
- On first start Ditto downloads a Java 21 runtime (unless Java 17+ is installed) and the latest Lavalink with its YouTube plugin into
data/lavalink, writes the config, and runs it on127.0.0.1with 512 MB of memory. - Once a day it checks for new Lavalink and plugin releases, and restarts onto them as soon as nobody is listening.
- Lavalink 4.2 supports Discord's voice encryption (DAVE), required for bots since March 2026. On Linux it needs glibc 2.35 or newer.
LAVALINK_HOST,LAVALINK_PORTandLAVALINK_PASSWORDpoint Ditto at an external node instead.
Playback that falls back
Each track goes to Lavalink first. If Lavalink cannot load it, yt-dlp finds the direct media address; failing that, yt-dlp downloads a copy that Lavalink plays from disk. TikTok, X and Instagram always take the download route.
New commands
/seek time |
Jump to a moment — 1:30 or 90 |
/filter effect |
Bass boost, nightcore, vaporwave, 8D, karaoke — or none |
Removed
@discordjs/voice, opusscript and libsodium-wrappers: Lavalink handles the voice connection now.
Upgrading
git fetch origin && git reset --hard origin/main && npm install --omit=dev && npm start
The first start takes longer: Java, Lavalink and yt-dlp are downloaded (about 250 MB). Plan about 1 GB of RAM for the bot.
Note
Checked locally against the real services: Lavalink 4.2.2 with YouTube plugin 1.18.2 started and loaded a YouTube video, a YouTube Music track and a SoundCloud track, and both yt-dlp fallbacks — direct address and downloaded copy — played through Lavalink. Playback in a Discord voice channel has not been tested yet.