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
Maintainers
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~!
