Боту нужны три значения с вашего узла Lavalink: хост, порт и пароль. Хост и порт это Адрес на странице Обзор узла; пароль лежит в application.yml. Ваша клиентская библиотека должна поддерживать Lavalink версии 4 и голосовое шифрование Discord DAVE, а защищённый вариант (SSL) остаётся выключенным.
- На странице Обзор сервера Lavalink скопируйте Адрес (хост и порт), а пароль скопируйте из
application.yml. - На вкладке Бот сервера вашего бота, в разделе Окружение, добавьте
LAVALINK_HOST,LAVALINK_PORTиLAVALINK_PASSWORD. - Добавьте клиентский код для вашей библиотеки (примеры ниже), выключив защищённый вариант (SSL).
- Перезапустите бота и убедитесь, что он сообщает о подключении узла.
Каждый шаг разобран ниже.
Что запрашивает каждый клиент
| Настройка | Значение |
|---|---|
| Хост | Часть значения Адрес до двоеточия, например 203.0.113.10 |
| Порт | Число после двоеточия |
| Пароль | password: в разделах lavalink:, server: файла application.yml |
| Secure / SSL | Выключено: узел использует обычные http и ws |
Где их найти: Как запустить сервер Lavalink 24/7.

Используйте версию клиента с поддержкой DAVE
С 2 марта 2026 года Discord пускает в голосовые каналы (кроме каналов-трибун) только голосовые клиенты, которые поддерживают его сквозное шифрование, протокол DAVE. Lavalink поддерживает DAVE начиная с версии 4.2.0, а ваш узел работает на 4.2.2. Как сказано в примечаниях к выпуску Lavalink 4.2.0, клиент тоже нужно обновить: теперь он должен отправлять узлу ID голосового канала. Старая версия клиента всё ещё подключается к узлу, но Lavalink не может открыть голосовое соединение, поэтому ничего не играет. Версия каждого распространённого клиента, которую нужно использовать, или любая более новая:
| Клиент | Язык | Используйте эту версию или новее |
|---|---|---|
| Shoukaku | Node.js | 4.3.0 (28 февр. 2026) |
| lavalink-client | Node.js | 2.9.7 (2 марта 2026). Работа над DAVE началась в 2.9.3 (27 февр. 2026); автор называет 2.9.7 первым крупным выпуском с DAVE. |
| Wavelink | Python | 3.5.1 (11 апр. 2026) |
| Lavalink.py | Python | 5.10.0 (28 февр. 2026) |
Для других библиотек в собственном списке клиентов Lavalink есть столбец DAVE. Со старым клиентом ваш узел отвечает на голосовое обновление ошибкой 400 с сообщением token, endpoint, sessionId and channelId must be provided in voice state. (Бот, который подключается к голосу Discord сам, без Lavalink, получает вместо этого код закрытия Discord 4017, E2EE/DAVE protocol required.)
Не храните значения в коде
Примеры ниже читают LAVALINK_HOST, LAVALINK_PORT и LAVALINK_PASSWORD из окружения. Если ваш бот работает на тарифе PlayNHost для ботов:
- Откройте страницу Бот сервера бота и перейдите в раздел Окружение.
- В блоке Добавить переменную добавьте
LAVALINK_HOSTиLAVALINK_PORT. ДобавьтеLAVALINK_PASSWORDс отметкой Хранить значение в секрете. - Перезапустите бота. Переменные попадают к нему при запуске.
Подробнее: Как задать переменные окружения и секреты для Discord-бота.
Node.js с Shoukaku
Пакеты: discord.js и shoukaku (4.3.0 или новее).
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);
В документации Shoukaku показано, как зайти в голосовой канал и воспроизвести трек, когда узел подключён.
Python с Wavelink
Пакеты: discord.py и wavelink (3.5.1 или новее).
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 выполняется один раз, до подключения бота; on_ready может выполниться снова после каждого переподключения, поэтому не подключайте узел там.
Другие клиенты
Любой клиент с поддержкой Lavalink 4 и DAVE работает так же с теми же тремя значениями, например lavalink-client для discord.js или Lavalink.py для Python. Клиент, написанный для Lavalink 3, не может работать с узлом версии 4.
Подключение не получается
- Connection refused или тайм-аут: хост или порт указаны неверно, либо узел остановлен. Скопируйте Адрес со страницы Обзор заново и проверьте, что в консоли есть
Lavalink is ready to accept connections. 401илиUnauthorized: пароль не совпадает сapplication.yml. Скопируйте его заново без кавычек.- Ошибка SSL или TLS: в вашем клиенте включён secure. Выключите его или используйте
http://вместоhttps://. - Бот подключается, но ничего не играет: сначала проверьте, что версия вашего клиента не старше той, что указана в таблице выше. Затем: боту нужны права Подключаться и Говорить в голосовом канале, а узлу нужен источник, который умеет воспроизводить то, что вы запросили: Ошибки Lavalink и что они означают.
Всё ещё используете бесплатный публичный узел? Публичный узел или собственный: сравнение вариантов.



