NOWOŚĆ 📢 Ograniczona oferta na start: do 70% zniżki na pierwszy miesiąc, na każdą grę!Zobacz plany

Jak połączyć bota Discord z Lavalink

Hosting LavalinkUpdated Nov 6, 20265 min read

Twój bot potrzebuje trzech wartości z twojego noda Lavalink: hosta, portu i hasła. Host i port to Adres na stronie Przegląd noda; hasło jest w application.yml. Twoja biblioteka kliencka musi obsługiwać Lavalink w wersji 4 oraz szyfrowanie głosu DAVE od Discorda, a opcja bezpiecznego połączenia (SSL) zostaje wyłączona.

  1. Na stronie Przegląd serwera Lavalink skopiuj Adres (host i port) oraz hasło z application.yml.
  2. Na stronie Bot serwera bota, w sekcji Środowisko, dodaj LAVALINK_HOST, LAVALINK_PORT i LAVALINK_PASSWORD.
  3. Dodaj kod klienta dla swojej biblioteki (przykłady poniżej), z wyłączoną opcją bezpiecznego połączenia (SSL).
  4. Zrestartuj bota i sprawdź, czy zgłasza node jako połączony.

Każdy krok szczegółowo poniżej.

O co pyta każdy klient

UstawienieWartość
HostCzęść pola Adres przed dwukropkiem, na przykład 203.0.113.10
PortLiczba po dwukropku
Hasłopassword: w lavalink:, server: w application.yml
Secure / SSLWyłączone: node używa zwykłego http i ws

Gdzie je znaleźć: Jak hostować serwer Lavalink 24/7.

Plik application.yml otwarty w edytorze plików, z linią hasła w lavalink, server.

Użyj wersji klienta, która obsługuje DAVE

Od 2 marca 2026 Discord wpuszcza na kanały głosowe (z wyjątkiem kanałów typu stage) tylko klientów głosowych obsługujących jego szyfrowanie od końca do końca, czyli protokół DAVE. Lavalink obsługuje DAVE od wersji 4.2.0, a twój node działa na 4.2.2. Według informacji o wydaniu Lavalink 4.2.0 klient też musi zostać zaktualizowany: teraz musi wysyłać do noda ID kanału głosowego. Starsza wersja klienta nadal łączy się z nodem, ale Lavalink nie może otworzyć połączenia głosowego, więc nic nie gra. Wersja, której użyć w każdym popularnym kliencie, albo dowolna nowsza:

KlientJęzykUżyj tej wersji lub nowszej
ShoukakuNode.js4.3.0 (28 lut 2026)
lavalink-clientNode.js2.9.7 (2 mar 2026). Prace nad DAVE zaczęły się w 2.9.3 (27 lut 2026); jej autor nazywa 2.9.7 pierwszym dużym wydaniem z DAVE.
WavelinkPython3.5.1 (11 kwi 2026)
Lavalink.pyPython5.10.0 (28 lut 2026)

Dla innych bibliotek lista klientów samego Lavalink ma kolumnę DAVE. Ze starszym klientem twój node odpowiada na aktualizację głosu błędem 400 z komunikatem token, endpoint, sessionId and channelId must be provided in voice state. (Bot, który łączy się z głosem Discorda sam, bez Lavalink, dostaje zamiast tego kod zamknięcia Discorda 4017, E2EE/DAVE protocol required.)

Trzymaj wartości poza kodem

Poniższe przykłady czytają LAVALINK_HOST, LAVALINK_PORT i LAVALINK_PASSWORD ze środowiska. Jeśli twój bot działa na planie dla botów PlayNHost:

  1. Otwórz stronę Bot serwera bota i kliknij Środowisko.
  2. W sekcji Dodaj zmienną dodaj LAVALINK_HOST i LAVALINK_PORT. Dodaj LAVALINK_PASSWORD z zaznaczonym Zachowaj tę wartość w tajemnicy.
  3. Zrestartuj bota. Zmienne trafiają do niego przy starcie.

Więcej: Jak ustawić zmienne środowiskowe i sekrety dla bota Discord.

Node.js z Shoukaku

Pakiety: discord.js i shoukaku (4.3.0 lub nowsza).

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);

Dokumentacja Shoukaku pokazuje, jak wejść na kanał głosowy i odtworzyć utwór, gdy node jest połączony.

Pakiety: discord.py i wavelink (3.5.1 lub nowsza).

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 uruchamia się raz, zanim bot się połączy; on_ready może uruchomić się ponownie po każdym ponownym połączeniu, więc nie łącz tam noda.

Inne klienty

Każdy klient obsługujący Lavalink 4 i DAVE działa tak samo, z tymi samymi trzema wartościami, na przykład lavalink-client dla discord.js albo Lavalink.py dla Pythona. Klient napisany dla Lavalink 3 nie dogada się z nodem w wersji 4.

Nie łączy się

  • Connection refused albo przekroczony czas: host lub port jest błędny albo node jest zatrzymany. Skopiuj Adres ze strony Przegląd jeszcze raz i sprawdź, czy Console pokazuje Lavalink is ready to accept connections.
  • 401 albo Unauthorized: hasło nie zgadza się z application.yml. Skopiuj je jeszcze raz, bez cudzysłowów.
  • Błąd SSL lub TLS: w twoim kliencie włączone jest połączenie bezpieczne. Wyłącz je albo użyj http:// zamiast https://.
  • Łączy się, a potem nic nie gra: najpierw sprawdź, czy wersja twojego klienta nie jest starsza niż ta z tabeli powyżej. Potem: bot potrzebuje Łączenie i Mówienie na kanale głosowym, a node potrzebuje źródła, które odtworzy to, o co prosisz: Błędy Lavalink i co oznaczają.

Nadal używasz darmowego publicznego noda? Publiczny node czy własny node porównuje opcje.

Twój bot działa już gdzie indziej? Przenieś go do nas

NASZE OSTATNIE WPISY