جديد 📢 عرض الإطلاق لفترة محدودة: خصم حتى 70% على شهرك الأول في كل لعبة.عرض الباقات

كيف تربط بوت Discord الخاص بك بـ Lavalink

استضافة LavalinkUpdated Nov 6, 20265 min read

يحتاج بوتك إلى ثلاث قيم من عقدة Lavalink الخاصة بك: المضيف والمنفذ وكلمة المرور. المضيف والمنفذ هما العنوان في نظرة عامة للعقدة؛ وكلمة المرور في application.yml. يجب أن تدعم مكتبة العميل لديك الإصدار 4 من Lavalink وتشفير الصوت DAVE من Discord، ويبقى خيار الاتصال الآمن (SSL) معطلًا.

  1. في نظرة عامة لسيرفر Lavalink، انسخ العنوان (المضيف والمنفذ)، وانسخ كلمة المرور من application.yml.
  2. في تبويب البوت، البيئة لسيرفر بوتك، أضف LAVALINK_HOST وLAVALINK_PORT وLAVALINK_PASSWORD.
  3. أضف كود العميل لمكتبتك (أمثلة أدناه)، مع إبقاء خيار الاتصال الآمن (SSL) معطلًا.
  4. أعد تشغيل البوت وتأكد من أنه يبلّغ بأن العقدة متصلة.

كل خطوة بالتفصيل أدناه.

ما يطلبه كل عميل

الإعدادالقيمة
Hostالجزء من العنوان الذي قبل النقطتين، مثل 203.0.113.10
Portالرقم الذي بعد النقطتين
Passwordقيمة password: تحت lavalink: ثم server: في application.yml
Secure / SSLمعطّل: تستخدم العقدة http وws العاديين

أين تجدها: كيف تستضيف سيرفر Lavalink على مدار الساعة 24/7.

ملف application.yml مفتوح في محرر الملفات، وفيه سطر كلمة المرور تحت lavalink ثم server.

استخدم إصدارًا من العميل يدعم DAVE

منذ 2 مارس 2026 لا تسمح Discord بدخول القنوات الصوتية (باستثناء قنوات المسرح) إلا للعملاء الصوتيين الذين يدعمون تشفيرها من طرف إلى طرف، أي بروتوكول DAVE. يدعم Lavalink بروتوكول DAVE منذ الإصدار 4.2.0، وتعمل عقدتك بالإصدار 4.2.2. وبحسب ملاحظات إصدار Lavalink 4.2.0 يجب تحديث العميل أيضًا: فعليه الآن أن يرسل معرّف القناة الصوتية إلى العقدة. الإصدار الأقدم من العميل لا يزال يتصل بالعقدة، لكن Lavalink لا يستطيع فتح الاتصال الصوتي، فلا يُشغَّل شيء. إصدار كل عميل شائع يجب استخدامه، أو أي إصدار أحدث:

العميلاللغةاستخدم هذا الإصدار أو أحدث
ShoukakuNode.js4.3.0 (28 فبراير 2026)
lavalink-clientNode.js2.9.7 (2 مارس 2026). بدأ العمل على DAVE في 2.9.3 (27 فبراير 2026)؛ ويصف مؤلفه الإصدار 2.9.7 بأنه أول إصدار رئيسي يدعم DAVE.
WavelinkPython3.5.1 (11 أبريل 2026)
Lavalink.pyPython5.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:

  1. افتح صفحة البوت لسيرفر البوت واضغط البيئة.
  2. تحت إضافة متغير، أضف LAVALINK_HOST وLAVALINK_PORT. وأضف LAVALINK_PASSWORD مع تحديد إبقاء هذه القيمة سرية.
  3. أعد تشغيل البوت. تصل المتغيرات إليه عند بدء تشغيله.

للمزيد: كيف تضبط متغيرات البيئة والأسرار لبوت 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 كيف تدخل قناة صوتية وتشغّل مقطعًا بعد أن تتصل العقدة.

الحزم: 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 ومعناها.

هل ما زلت على عقدة عامة مجانية؟ تقارن عقدة عامة أم عقدتك الخاصة بين الخيارات.

بوتك مستضاف في مكان آخر بالفعل؟ انقله إلينا

أحدث مقالات المدونة