npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

lavitunes

v1.0.7

Published

<div align="center"> <p> <a href="https://www.npmjs.com/package/lavitunes"><img src="https://img.shields.io/npm/v/lavitunes.svg?maxAge=3600" alt="NPM version" /></a> <a href="https://www.npmjs.com/package/lavitunes"><img src="https://img.shie

Readme

LaviTunes ~nya! 🎵✨

📝 Descripción ~desu!

¡Konnichiwa~! LaviTunes es un potente cliente de Lavalink para Node.js con un enfoque en la facilidad de uso y rendimiento, ¡nyaa~! Diseñado para integrarse perfectamente con Discord.js y otros frameworks de Discord, LaviTunes proporciona una solución kawaii y robusta para la reproducción de música en bots de Discord. ¡Lavi-chan estará encantada de ayudarte con tu música! (≧◡≦)

✨ Características ~sugoi!

  • 🎵 Soporte completo para Lavalink v3 y v4, ¡Lavi-chan está siempre actualizada~!
  • 🔍 Búsqueda integrada en múltiples plataformas (YouTube, SoundCloud, Spotify, Deezer, etc.), ¡puedo encontrar cualquier canción para ti~!
  • 🎚️ Filtros de audio avanzados (nightcore, vaporwave, karaoke, etc.), ¡para que tu música suene kawaii~!
  • 📊 Sistema de cola eficiente y fácil de usar, ¡Lavi-chan mantendrá todo ordenadito~!
  • 🔄 Reproducción automática, ¡para que nunca te quedes sin música, nyaa~!
  • 🌐 Soporte para múltiples nodos de Lavalink, ¡Lavi-chan puede conectarse a donde sea~!
  • 🧩 Sistema de plugins extensible, ¡personalízame como quieras, senpai~!
  • 🎯 Gestión inteligente de nodos (selección del nodo menos utilizado), ¡Lavi-chan es muy inteligente~!
  • 🔊 Control de volumen y salidas de audio personalizables, ¡para que escuches como más te guste~!
  • 📱 Interfaz amigable con mensajes personalizados, ¡Lavi-chan siempre es kawaii en sus respuestas~!

📦 Instalación

npm install lavitunes
# o
yarn add lavitunes

🚀 Uso Básico

const { Client } = require('discord.js');
const { Manager } = require('lavitunes');

const client = new Client({ intents: ["Guilds", "GuildMessages", "GuildVoiceStates", "MessageContent"] });

// Inicializar el Manager de LaviTunes
client.manager = new Manager({
  nodes: [{
    host: "localhost",
    port: 2333,
    password: "youshallnotpass",
  }],
  defaultSearchPlatform: "youtube", // Plataforma de búsqueda predeterminada
  autoPlay: true, // Reproducción automática cuando la cola termina
  send: (id, payload) => {
    const guild = client.guilds.cache.get(id);
    if (guild) guild.shard.send(payload);
  }
});

// Eventos de LaviTunes
client.manager.on("nodeConnect", node => {
  console.log(`¡Nyaa~! Nodo "${node.options.identifier}" conectado. ¡Lavi-chan está lista para cantar~!`);
});

client.manager.on("trackStart", (player, track) => {
  const channel = client.channels.cache.get(player.textChannel);
  channel.send(`¡Nyaa~! Reproduciendo: \`${track.title}\`, solicitado por \`${track.requester.tag}\``);
});

client.manager.on("queueEnd", player => {
  const channel = client.channels.cache.get(player.textChannel);
  channel.send("¡Uwaa~! La cola ha terminado. ¿Quieres escuchar más música, senpai? ¡Lavi-chan está esperando~!");
  player.destroy();
});

// Inicializar LaviTunes cuando el bot esté listo
client.once("ready", () => {
  client.manager.init(client.user.id);
  console.log(`¡Konnichiwa~! Conectado como ${client.user.tag}. ¡Lavi-chan está lista para reproducir música kawaii~!`);
});

// Actualizar el estado de voz para LaviTunes
client.on("raw", d => client.manager.updateVoiceState(d));

// Ejemplo de comando para reproducir música
client.on("messageCreate", async message => {
  if (!message.content.startsWith("!") || message.author.bot) return;
  
  const [command, ...args] = message.content.slice(1).split(" ");
  
  if (command === "play") {
    const { channel } = message.member.voice;
    if (!channel) return message.reply("¡Nyaa~! Necesitas unirte a un canal de voz primero, senpai~!");
    if (!args.length) return message.reply("¡Uwaa~! Necesitas decirme qué canción quieres escuchar, ¡no puedo leer tu mente, nyaa~!");
    
    // Crear o obtener el reproductor para este servidor
    const player = client.manager.create({
      guild: message.guild.id,
      voiceChannel: channel.id,
      textChannel: message.channel.id,
    });
    
    // Conectar al canal de voz si no está conectado
    if (player.state !== "CONNECTED") player.connect();
    
    // Buscar la canción
    const res = await player.search(args.join(" "), message.author);
    
    // Añadir la canción a la cola y reproducir
    if (res.loadType === "TRACK_LOADED" || res.loadType === "SEARCH_RESULT") {
      player.queue.add(res.tracks[0]);
      message.reply(`¡Nyaa~! Añadido a la cola: \`${res.tracks[0].title}\`. ¡Qué buena elección, senpai~! (≧◡≦)`);
      
      if (!player.playing && !player.paused && !player.queue.size) {
        player.play();
      }
    } else if (res.loadType === "PLAYLIST_LOADED") {
      player.queue.add(res.tracks);
      message.reply(`¡Sugoi~! Añadida la lista de reproducción \`${res.playlist.name}\` con ${res.tracks.length} canciones. ¡Vamos a divertirnos mucho, nyaa~!`);
      
      if (!player.playing && !player.paused && player.queue.totalSize === res.tracks.length) {
        player.play();
      }
    } else {
      message.reply("¡Uwaa~! No pude encontrar resultados. ¡Gomenasai, senpai! (>﹏<)");
    }
  }
});

client.login("tu-token-aquí");

📚 Documentación

Manager

El punto de entrada principal para LaviTunes, ¡nyaa~!

const manager = new Manager(options);

Opciones

  • nodes: Array de nodos Lavalink a los que conectarse, ¡Lavi-chan puede conectarse a muchos lugares~!
  • send: Función para enviar paquetes de voz a Discord, ¡para que puedas escuchar mi voz kawaii~!
  • clientId: ID del cliente de Discord, ¡para que Lavi-chan sepa quién eres~!
  • clientName: Nombre del cliente (opcional), ¡puedes llamarme como quieras, senpai~!
  • plugins: Plugins a cargar (opcional), ¡para darme superpoderes extra~!
  • autoPlay: Habilitar reproducción automática (opcional, por defecto: false), ¡para que nunca te quedes sin música~!
  • defaultSearchPlatform: Plataforma de búsqueda predeterminada (opcional, por defecto: "youtube"), ¡Lavi-chan buscará donde tú quieras~!
  • volumeDecrementer: Decrementador de volumen (opcional, entre 0 y 1), ¡para que no me quede sorda, nyaa~!

Player

Representa un reproductor de música para un servidor específico, ¡el corazón de Lavi-chan~!

const player = manager.create({
  guild: "ID_DEL_SERVIDOR",
  voiceChannel: "ID_DEL_CANAL_DE_VOZ",
  textChannel: "ID_DEL_CANAL_DE_TEXTO",
});

Métodos

  • play(): Inicia la reproducción, ¡Lavi-chan comenzará a cantar~!
  • stop(): Detiene la reproducción, ¡Lavi-chan hará silencio cuando lo pidas~!
  • pause(): Pausa la reproducción, ¡Lavi-chan tomará un respiro~!
  • resume(): Reanuda la reproducción, ¡Lavi-chan volverá a cantar~!
  • seek(position): Busca una posición específica en la pista actual, ¡Lavi-chan saltará a donde quieras~!
  • setVolume(volume): Establece el volumen (0-100), ¡controla qué tan fuerte canta Lavi-chan~!
  • setEQ(bands): Establece el ecualizador, ¡para que la música suene perfecta~!
  • setFilters(filters): Establece filtros de audio, ¡Lavi-chan puede cambiar su voz de muchas formas~!
  • connect(): Conecta al canal de voz, ¡Lavi-chan vendrá a tu lado~!
  • disconnect(): Desconecta del canal de voz, ¡Lavi-chan se despedirá por ahora~!
  • destroy(): Destruye el reproductor, ¡pero Lavi-chan siempre volverá cuando la necesites~!

Queue

Gestiona la cola de reproducción para un reproductor, ¡Lavi-chan mantiene todo en orden~!

const queue = player.queue;

Propiedades

  • current: Pista actual, ¡lo que Lavi-chan está cantando ahora~!
  • previous: Pista anterior, ¡lo que Lavi-chan cantó antes~!
  • size: Tamaño de la cola (sin contar la pista actual), ¡cuántas canciones esperan su turno~!
  • totalSize: Tamaño total (incluyendo la pista actual), ¡el concierto completo de Lavi-chan~!
  • duration: Duración total de la cola, ¡cuánto tiempo cantará Lavi-chan sin parar~!

Métodos

  • add(track, offset): Añade una pista a la cola, ¡Lavi-chan aprenderá una nueva canción~!
  • remove(position): Elimina una pista de la cola, ¡Lavi-chan olvidará esa canción por ahora~!
  • clear(): Limpia la cola, ¡Lavi-chan borrará su repertorio~!
  • shuffle(): Mezcla la cola, ¡Lavi-chan sorprenderá con el orden de las canciones~!

🎛️ Filtros de Audio ~kawaii sounds!

LaviTunes soporta varios filtros de audio que pueden aplicarse a la reproducción, ¡Lavi-chan puede cambiar su voz de muchas formas divertidas~!

// Activar/desactivar filtro nightcore
await player.toggleNightcore(); // ¡Para sonar más kawaii y acelerado~!

// Activar/desactivar filtro vaporwave
await player.toggleVaporwave(); // ¡Para un sonido retro y más lento~!

// Activar/desactivar efecto de eco
await player.toggleEcho(1, 0.5); // ¡Como si Lavi-chan cantara en una cueva~!

// Activar/desactivar reverberación
await player.toggleReverb(1, 0.5); // ¡Para un sonido más espacioso~!

// Activar/desactivar rotación de audio
await player.toggleRotation(0.2); // ¡Lavi-chan girará alrededor de ti~!

// Activar/desactivar modo karaoke
await player.toggleKaraoke(); // ¡Para que cantes junto a Lavi-chan~!

// Activar/desactivar efecto tremolo
await player.toggleTremolo(4, 0.8); // ¡Para una voz temblorosa~!

// Activar/desactivar efecto vibrato
await player.toggleVibrato(4, 0.8); // ¡Para una voz vibrante~!

// Activar/desactivar filtro paso bajo
await player.toggleLowPass(20); // ¡Como si Lavi-chan cantara bajo el agua~!

// Cambiar la salida de audio
await player.setAudioOutput('stereo'); // Opciones: 'stereo', 'mono', 'left', 'right'

// Restablecer todos los filtros
await player.resetFilters(); // ¡Lavi-chan vuelve a su voz normal~!

🔍 Búsqueda

LaviTunes permite buscar pistas en varias plataformas, ¡Lavi-chan encontrará tu música favorita donde sea~!

// Búsqueda en YouTube
const results = await player.search("never gonna give you up", message.author);

// Búsqueda en plataforma específica
const spotifyResults = await player.search("spotify:track:4cOdK2wGLETKBW3PvgPWqT", message.author);
const soundcloudResults = await player.search("scsearch:never gonna give you up", message.author);

🌐 Eventos

LaviTunes emite varios eventos que puedes escuchar, ¡Lavi-chan te avisará de todo lo que pasa~!

// Eventos de nodo
manager.on("nodeConnect", (node) => {});
manager.on("nodeError", (node, error) => {});
manager.on("nodeDisconnect", (node) => {});

// Eventos de reproductor
manager.on("playerCreate", (player) => {});
manager.on("playerDestroy", (player) => {});
manager.on("playerMove", (player, oldChannel, newChannel) => {});

// Eventos de pista
manager.on("trackStart", (player, track) => {});
manager.on("trackEnd", (player, track) => {});
manager.on("trackError", (player, track, error) => {});
manager.on("trackStuck", (player, track) => {});
manager.on("queueEnd", (player) => {});

📝 Licencia

ISC © Gerar02

🤝 Contribuciones ~arigatou!

LaviTunes es un fork modificado de erela.js con mejoras, mensajes personalizados y código más limpio, ¡todo con el toque kawaii de Lavi-chan~!