Revolutionary V0.3.0 Release

The Most Advanced Lavalink Client for Discord.js

Featuring SponsorBlock integration, YouTube chapters, synced lyrics, 16+ filter presets, enhanced error recovery, and massive performance improvements. Built for the modern Discord bot.

50%
Faster Loading
40%
Less RAM Usage
16+
Filter Presets
20+
New Events
npm install euralink

Revolutionary Features

Euralink V0.3.0 introduces game-changing features that set new standards for Discord music bots

SponsorBlock Integration

Automatically skip sponsor segments, intros, outros, and unwanted content with customizable categories and real-time detection.

Real-time Detection 7+ Categories Manual Override
player.setSponsorBlockCategories(['sponsor', 'intro']);

YouTube Chapters

Navigate through video chapters automatically with rich metadata, timestamps, and seamless chapter transitions.

Auto Detection Rich Metadata Navigation
const chapters = await player.getChapters();

Synced Lyrics

Display synchronized lyrics with precise timing, automatic track detection, and multiple provider support.

Real-time Sync Auto Detection Multi Provider
const lyrics = await player.getLyrics();

Filter Presets

16+ professional audio presets including Nightcore, Vaporwave, Karaoke, BassBoost, and gaming-optimized filters.

16+ Presets One Command Gaming Optimized
await player.setPreset('nightcore');

Enhanced Error Recovery

Automatic player migration, intelligent retry mechanisms, and graceful degradation for maximum uptime.

Auto Migration Smart Retry Zero Downtime
eura.migratePlayer(guildId, newNode);

Performance Optimized

50% faster track loading, 40% reduced RAM usage, parallel processing, and intelligent caching systems.

50% Faster 40% Less RAM Smart Caching
// Automatic optimization - no config needed!

Quick Start

Get up and running with Euralink V0.3.0 in minutes

1

Install

npm install euralink
2

Initialize

const { Euralink } = require('euralink');
const eura = new Euralink(client, nodes, options);
3

Play Music

const player = eura.createConnection(options);
const result = await eura.resolve({ query });
player.queue.add(result.tracks[0]);
player.play();

Advanced V0.3.0 Example

// V0.3.0 Advanced Features
const { Euralink } = require('euralink');

const eura = new Euralink(client, nodes, {
  send: (data) => {
    const guild = client.guilds.cache.get(data.d.guild_id);
    if (guild) guild.shard.send(data);
  },
  autoResume: true,
  restVersion: 'v4'
});

// Enhanced event handling
eura.on('trackStart', async (player, track) => {
  // Enable SponsorBlock for YouTube
  if (track.info.sourceName === 'youtube') {
    await player.setSponsorBlockCategories(['sponsor', 'selfpromo']);
  }
  
  // Get synced lyrics
  const lyrics = await player.getLyrics();
  if (lyrics) console.log('🎤 Synced lyrics available!');
  
  // Apply Nightcore preset
  await player.setPreset('nightcore', { clearFilters: true });
});

// Listen to new V0.3.0 events
eura.on('sponsorSkipped', (player, segment) => {
  console.log(`â­ī¸ Skipped ${segment.category} segment`);
});

eura.on('chapterStart', (player, chapter) => {
  console.log(`📖 Chapter: ${chapter.title}`);
});

eura.on('lyricsSync', (player, line) => {
  console.log(`đŸŽĩ ${line.text}`);
});

Interactive Examples

Explore real-world implementations of Euralink V0.3.0 features

SponsorBlock Implementation

// Complete SponsorBlock setup
client.on('messageCreate', async (message) => {
  if (message.content.startsWith('!play ')) {
    const query = message.content.slice(6);
    
    const player = eura.createConnection({
      guildId: message.guildId,
      voiceChannel: message.member.voice.channelId,
      textChannel: message.channelId
    });

    const result = await eura.resolve({ query, requester: message.author });
    player.queue.add(result.tracks[0]);
    
    // Enable comprehensive SponsorBlock
    await player.setSponsorBlockCategories([
      'sponsor',      // Paid promotions
      'selfpromo',    // Self promotion
      'interaction',  // Subscribe reminders
      'intro',        // Intro animations
      'outro',        // Outro/endscreens
      'preview',      // Video previews
      'music_offtopic' // Non-music sections
    ]);
    
    player.play();
    message.reply('đŸŽĩ Playing with SponsorBlock enabled!');
  }
});

// Listen for skipped segments
eura.on('sponsorSkipped', (player, segment) => {
  const channel = client.channels.cache.get(player.textChannel);
  channel?.send(`â­ī¸ Skipped ${segment.category} segment (${segment.duration}ms)`);
});

SponsorBlock Categories

sponsor Paid promotions and sponsorships
selfpromo Self-promotion and merchandise
interaction Subscribe/like reminders
intro Intro animations and sequences
outro Outro sequences and endscreens
preview Video previews and recaps
music_offtopic Non-music content in music videos

Synced Lyrics Integration

// Synced lyrics with real-time display
eura.on('trackStart', async (player, track) => {
  const lyrics = await player.getLyrics();
  
  if (lyrics && lyrics.lines.length > 0) {
    const channel = client.channels.cache.get(player.textChannel);
    channel?.send(`🎤 **Synced lyrics available for:** ${track.info.title}`);
    
    // Create lyrics display interval
    const lyricsInterval = setInterval(() => {
      const currentLine = player.getCurrentLyricLine();
      
      if (currentLine && currentLine.text.trim()) {
        console.log(`đŸŽĩ ${currentLine.text}`);
        
        // Send to Discord channel every 10 seconds
        if (Date.now() % 10000 < 1000) {
          channel?.send(`đŸŽĩ \`${currentLine.text}\``);
        }
      }
    }, 1000);
    
    // Clear interval when track ends
    player.once('trackEnd', () => {
      clearInterval(lyricsInterval);
    });
  }
});

// Manual lyrics command
client.on('messageCreate', async (message) => {
  if (message.content === '!lyrics') {
    const player = eura.players.get(message.guildId);
    
    if (player && player.current) {
      const currentLine = player.getCurrentLyricLine();
      
      if (currentLine) {
        message.reply(`đŸŽĩ **Current lyric:** ${currentLine.text}`);
      } else {
        message.reply('❌ No synced lyrics available for this track');
      }
    }
  }
});

Lyrics Features

Real-time Synchronization

Lyrics sync perfectly with track position

Auto Detection

Automatically detects and loads lyrics

Multiple Providers

Supports various lyrics providers

Precise Timing

Millisecond-accurate lyric timing

Filter Presets System

// Filter preset commands
client.on('messageCreate', async (message) => {
  if (message.content.startsWith('!preset ')) {
    const preset = message.content.split(' ')[1];
    const player = eura.players.get(message.guildId);
    
    if (!player) return message.reply('❌ No active player');
    
    try {
      // Apply preset with automatic filter clearing
      await player.setPreset(preset, { clearFilters: true });
      message.reply(`✅ Applied **${preset}** preset!`);
    } catch (error) {
      message.reply(`❌ Invalid preset. Available: ${availablePresets.join(', ')}`);
    }
  }
  
  if (message.content === '!presets') {
    const presetsList = availablePresets.map(preset => `\`${preset}\``).join(', ');
    message.reply(`đŸŽ›ī¸ **Available presets:** ${presetsList}`);
  }
  
  if (message.content === '!clear-filters') {
    const player = eura.players.get(message.guildId);
    if (player) {
      await player.clearFilters();
      message.reply('🔄 Cleared all audio filters');
    }
  }
});

const availablePresets = [
  'nightcore', 'vaporwave', 'bassboost', 'karaoke',
  'pop', 'rock', 'classical', 'electronic',
  'gaming-fps', 'gaming-moba', 'podcast', 'vocal-boost',
  'cinema', 'radio', 'studio', 'live'
];

Available Presets

Music Genres
nightcore vaporwave pop rock classical electronic
Audio Enhancement
bassboost vocal-boost karaoke studio cinema radio
Gaming Optimized
gaming-fps gaming-moba podcast live

Enhanced Error Recovery

// Automatic error recovery setup
const eura = new Euralink(client, nodes, {
  send: (data) => {
    const guild = client.guilds.cache.get(data.d.guild_id);
    if (guild) guild.shard.send(data);
  },
  autoResume: true,
  restVersion: 'v4',
  // Enhanced error recovery options
  retryLimit: 5,
  retryDelay: 1000,
  failoverTimeout: 30000
});

// Node error handling
eura.on('nodeError', async (node, error) => {
  console.log(`❌ Node ${node.name} error:`, error.message);
  
  // Perform health check
  const healthStatus = await eura.performHealthCheck();
  console.log('đŸĨ Health status:', healthStatus);
  
  // Migrate players if needed
  const players = [...eura.players.values()].filter(p => p.node === node);
  for (const player of players) {
    const bestNode = eura.getBestNode();
    if (bestNode && bestNode !== node) {
      await eura.migratePlayer(player.guildId, bestNode);
      console.log(`🔄 Migrated player ${player.guildId} to ${bestNode.name}`);
    }
  }
});

// Player error recovery
eura.on('playerError', async (player, error) => {
  console.log(`❌ Player error in ${player.guildId}:`, error.message);
  
  // Attempt automatic recovery
  try {
    if (player.current) {
      await player.restart();
      console.log(`🔄 Restarted player ${player.guildId}`);
    }
  } catch (recoveryError) {
    console.log(`❌ Recovery failed for ${player.guildId}`);
    // Implement fallback strategy
    player.stop();
  }
});

// Save/load player states for persistence
process.on('SIGINT', async () => {
  await eura.savePlayersState('./players.json');
  console.log('💾 Saved player states');
  process.exit(0);
});

client.on('ready', async () => {
  eura.init(client.user.id);
  
  try {
    const loadedCount = await eura.loadPlayersState('./players.json');
    console.log(`📂 Loaded ${loadedCount} player states`);
  } catch (error) {
    console.log('â„šī¸ No saved states found');
  }
});

Recovery Features

Auto Migration

Seamlessly migrate players between nodes

Smart Retry

Intelligent retry with exponential backoff

Health Monitoring

Real-time node health tracking

State Persistence

Save and restore player states

Changelog

Track the evolution of Euralink with detailed release notes

V0.3.0 - Revolutionary Release

Current

🚀 Game-Changing Features

  • SponsorBlock Integration: Automatic sponsor segment skipping with 7+ customizable categories
  • YouTube Chapter Support: Navigate through video chapters with rich metadata and timestamps
  • Synced Lyrics: Real-time synchronized lyrics with automatic track detection and timing
  • 16+ Filter Presets: Professional audio presets including Nightcore, Vaporwave, Karaoke, and gaming-optimized filters
  • Enhanced Error Recovery: Automatic player migration, intelligent retry systems, and graceful degradation

⚡ Performance Improvements

  • 50% faster track loading with parallel processing and optimization
  • 40% reduced RAM usage through smart caching and memory management
  • Optimized API calls with intelligent request batching
  • Enhanced node health monitoring and connection stability
  • Improved queue operations for large playlists (10,000+ tracks)

🔧 Developer Experience

  • Comprehensive TypeScript definitions with full IntelliSense support
  • 20+ new events for better integration and monitoring
  • Enhanced plugin system with improved extensibility
  • 100% backward compatibility with all v0.2.x code
  • Extensive documentation, examples, and migration guides

🐛 Bug Fixes

  • Fixed version check warnings in development environments
  • Improved health check logic for localhost and development nodes
  • Enhanced error handling in filter operations and preset applications
  • Resolved lyrics synchronization timing accuracy issues
  • Fixed memory leaks in large queue operations and batch processing

V0.2.0-beta.1 - Major Update

Previous

✨ New Features

  • Complete AutoResume system with position restoration
  • HTTP2 support with persistent agents
  • Advanced health monitoring and load balancing
  • Enhanced queue management with statistics
  • EuraSync voice status updates
  • Plugin system foundation

V0.1.5-beta.1 - Initial Release

Legacy

🎉 Initial Features

  • Basic Lavalink client functionality
  • Track loading and playback support
  • Queue management system
  • Voice connection handling