يحتاج بوتك إلى ثلاث قيم من عقدة Lavalink الخاصة بك: المضيف والمنفذ وكلمة المرور. المضيف والمنفذ هما العنوان في نظرة عامة للعقدة؛ وكلمة المرور في application.yml. يجب أن تدعم مكتبة العميل لديك الإصدار 4 من Lavalink وتشفير الصوت DAVE من Discord، ويبقى خيار الاتصال الآمن (SSL) معطلًا.
- في نظرة عامة لسيرفر Lavalink، انسخ العنوان (المضيف والمنفذ)، وانسخ كلمة المرور من
application.yml. - في تبويب البوت، البيئة لسيرفر بوتك، أضف
LAVALINK_HOSTوLAVALINK_PORTوLAVALINK_PASSWORD. - أضف كود العميل لمكتبتك (أمثلة أدناه)، مع إبقاء خيار الاتصال الآمن (SSL) معطلًا.
- أعد تشغيل البوت وتأكد من أنه يبلّغ بأن العقدة متصلة.
كل خطوة بالتفصيل أدناه.
ما يطلبه كل عميل
| الإعداد | القيمة |
|---|---|
| Host | الجزء من العنوان الذي قبل النقطتين، مثل 203.0.113.10 |
| Port | الرقم الذي بعد النقطتين |
| Password | قيمة 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 يجب تحديث العميل أيضًا: فعليه الآن أن يرسل معرّف القناة الصوتية إلى العقدة. الإصدار الأقدم من العميل لا يزال يتصل بالعقدة، لكن 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 فيتلقى بدلًا من ذلك رمز الإغلاق 4017 من Discord، 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.
لا يتصل
- رُفض الاتصال أو انتهت مهلته: المضيف أو المنفذ خاطئ، أو العقدة متوقفة. انسخ العنوان من نظرة عامة مرة أخرى، وتأكد أن Console تعرض
Lavalink is ready to accept connections. 401أوUnauthorized: كلمة المرور لا تطابق ما فيapplication.yml. انسخها مرة أخرى دون علامات الاقتباس.- خطأ SSL أو TLS: الاتصال الآمن مفعّل في عميلك. عطّله، أو استخدم
http://بدلhttps://. - يتصل ثم لا يشغّل شيئًا: تحقق أولًا من أن إصدار العميل لديك ليس أقدم من الإصدار الموجود في الجدول أعلاه. ثم: يحتاج البوت إلى الاتصال والتحدث في القناة الصوتية، وتحتاج العقدة إلى مصدر يستطيع تشغيل ما طلبته: أخطاء Lavalink ومعناها.
هل ما زلت على عقدة عامة مجانية؟ تقارن عقدة عامة أم عقدتك الخاصة بين الخيارات.



