Tu bot necesita tres valores de tu nodo de Lavalink: el host, el puerto y la contraseña. El host y el puerto son la Dirección en el Resumen del nodo; la contraseña está en application.yml. Tu librería cliente debe ser compatible con la versión 4 de Lavalink y con el cifrado de voz DAVE de Discord, y la opción segura (SSL) se queda desactivada.
- En el Resumen del servidor de Lavalink, copia la Dirección (host y puerto) y copia la contraseña de
application.yml. - En la pestaña Bot del servidor de tu bot, en Entorno, añade
LAVALINK_HOST,LAVALINK_PORTyLAVALINK_PASSWORD. - Añade el código cliente de tu librería (ejemplos más abajo), con la opción segura (SSL) desactivada.
- Reinicia el bot y comprueba que informa de que el nodo está conectado.
Cada paso se explica más abajo.
Lo que pide cualquier cliente
| Ajuste | Valor |
|---|---|
| Host | La parte de Dirección antes de los dos puntos, por ejemplo 203.0.113.10 |
| Puerto | El número después de los dos puntos |
| Contraseña | El password: bajo lavalink:, server: en application.yml |
| Seguro / SSL | Desactivado: el nodo usa http y ws sin cifrar |
Dónde encontrarlos: Cómo alojar un servidor de Lavalink 24/7.

Usa una versión del cliente compatible con DAVE
Desde el 2 de marzo de 2026, Discord solo deja entrar en los canales de voz (excepto los canales de escenario) a los clientes de voz compatibles con su cifrado de extremo a extremo, el protocolo DAVE. Lavalink es compatible con DAVE desde la versión 4.2.0, y tu nodo ejecuta la 4.2.2. Según las notas de la versión 4.2.0 de Lavalink, el cliente también debe actualizarse: ahora tiene que enviar al nodo el ID del canal de voz. Una versión anterior del cliente sigue conectándose al nodo, pero Lavalink no puede abrir la conexión de voz, así que no suena nada. La versión que debes usar de cada cliente habitual, o cualquier posterior:
| Cliente | Lenguaje | Usa esta versión o posterior |
|---|---|---|
| Shoukaku | Node.js | 4.3.0 (28 feb 2026) |
| lavalink-client | Node.js | 2.9.7 (2 mar 2026). El trabajo con DAVE empezó en la 2.9.3 (27 feb 2026); su autor llama a la 2.9.7 la primera versión importante con DAVE. |
| Wavelink | Python | 3.5.1 (11 abr 2026) |
| Lavalink.py | Python | 5.10.0 (28 feb 2026) |
Para otras librerías, la lista de clientes del propio Lavalink tiene una columna DAVE. Con un cliente antiguo, tu nodo responde a la actualización de voz con un error 400 que dice token, endpoint, sessionId and channelId must be provided in voice state. (Un bot que se conecta él mismo a la voz de Discord, sin Lavalink, recibe en su lugar el código de cierre 4017 de Discord, E2EE/DAVE protocol required.)
Mantén los valores fuera de tu código
Los ejemplos de abajo leen LAVALINK_HOST, LAVALINK_PORT y LAVALINK_PASSWORD del entorno. Si tu bot funciona en un plan de bots de PlayNHost:
- Abre la página Bot del servidor del bot y pulsa Entorno.
- En Añadir una variable, añade
LAVALINK_HOSTyLAVALINK_PORT. AñadeLAVALINK_PASSWORDcon Mantener este valor en secreto marcado. - Reinicia el bot. Las variables le llegan cuando se inicia.
Más: Cómo definir variables de entorno y secretos para tu bot de Discord.
Node.js con Shoukaku
Paquetes: discord.js y shoukaku (4.3.0 o posterior).
const { Client, Events, GatewayIntentBits } = require('discord.js');
const { Shoukaku, Connectors } = require('shoukaku');
const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildVoiceStates] });
const nodes = [{
name: 'playnhost',
url: `${process.env.LAVALINK_HOST}:${process.env.LAVALINK_PORT}`,
auth: process.env.LAVALINK_PASSWORD,
}];
// Create it before client.login(): Shoukaku connects when the bot is ready.
const shoukaku = new Shoukaku(new Connectors.DiscordJS(client), nodes);
shoukaku.on('ready', (name) => console.log(`Lavalink node ${name} connected`));
shoukaku.on('error', (name, error) => console.error(`Lavalink node ${name}:`, error));
client.once(Events.ClientReady, () => console.log(`Logged in as ${client.user.tag}`));
client.login(process.env.DISCORD_TOKEN);
La documentación de Shoukaku muestra cómo unirse a un canal de voz y reproducir una canción cuando el nodo ya está conectado.
Python con Wavelink
Paquetes: discord.py y wavelink (3.5.1 o posterior).
import os
import discord
import wavelink
from discord.ext import commands
class Bot(commands.Bot):
def __init__(self):
super().__init__(command_prefix="!", intents=discord.Intents.default())
async def setup_hook(self):
node = wavelink.Node(
uri=f"http://{os.environ['LAVALINK_HOST']}:{os.environ['LAVALINK_PORT']}",
password=os.environ["LAVALINK_PASSWORD"],
)
await wavelink.Pool.connect(nodes=[node], client=self)
async def on_wavelink_node_ready(self, payload: wavelink.NodeReadyEventPayload):
print(f"Lavalink node {payload.node.identifier} connected")
bot = Bot()
bot.run(os.environ["DISCORD_TOKEN"])
setup_hook se ejecuta una vez, antes de que el bot se conecte; on_ready puede ejecutarse de nuevo tras cada reconexión, así que no conectes el nodo ahí.
Otros clientes
Cualquier cliente compatible con Lavalink 4 y DAVE funciona igual con los mismos tres valores, por ejemplo lavalink-client para discord.js o Lavalink.py para Python. Un cliente hecho para Lavalink 3 no puede hablar con un nodo de la versión 4.
No se conecta
- Conexión rechazada o tiempo de espera agotado: el host o el puerto son incorrectos, o el nodo está detenido. Copia de nuevo la Dirección desde Resumen y comprueba que la consola muestre
Lavalink is ready to accept connections. 401oUnauthorized: la contraseña no coincide conapplication.yml. Cópiala de nuevo sin las comillas.- Un error de SSL o TLS: la opción segura está activada en tu cliente. Desactívala, o usa
http://en lugar dehttps://. - Se conecta, pero no reproduce nada: primero comprueba que la versión de tu cliente no sea anterior a la de la tabla de arriba. Después: el bot necesita Connect y Speak en el canal de voz, y el nodo necesita una fuente que pueda reproducir lo que pediste: Errores de Lavalink y qué significan.
¿Sigues en un nodo público gratuito? Nodo público o tu propio nodo compara las opciones.



