العودة إلى المدونة

تشغيل بوت ديسكورد 24 ساعة على سيرفر VPS: دليل عملي

فريق تحرير IM Host14 أكتوبر 20267 دقائق قراءة
تشغيل بوت ديسكورد 24 ساعة على سيرفر VPS: دليل عملي

لتشغيل بوت ديسكورد 24 ساعة، شغّله على سيرفر VPS لينكس يعمل باستمرار كخدمة مُدارة من النظام، إما كوحدة systemd أو كحاوية Docker مع سياسة إعادة تشغيل، حتى يبدأ مع إقلاع السيرفر ويعود تلقائيًا بعد أي تعطل. أغلب البوتات المبنية بـ discord.js أو discord.py تُبقي اتصال WebSocket مفتوحًا مع الـ Gateway الخاص بديسكورد، ولهذا تحتاج سيرفرًا لا ينام. احفظ التوكن في ملف متغيرات بيئة، وفعّل فقط الـ Intents التي تحتاجها، وأضف سجلات تخبرك عندما يتعطل شيء.

بوت Gateway أم Interactions Endpoint؟

يوفر ديسكورد طريقتين لاستقبال الأحداث، والاختيار بينهما يحدد نوع الاستضافة.

  • بوتات الـ Gateway تفتح اتصال WebSocket صادرًا إلى ديسكورد وتستقبل الأحداث لحظيًا: الرسائل، وانضمام الأعضاء، والتفاعلات، وتغيّرات القنوات الصوتية، وأوامر Slash. هكذا تعمل discord.js وdiscord.py افتراضيًا. العملية يجب أن تبقى شغالة، لكن لأن الاتصال صادر فلا تحتاج منفذًا مفتوحًا للدخول ولا دومينًا.

  • الـ Interactions Endpoint رابط HTTPS تعطيه لديسكورد بدل ذلك، فيرسل إليه أوامر Slash وضغطات الأزرار وغيرها كطلبات POST. يجب أن يتحقق الـ Endpoint من توقيع Ed25519 لكل طلب (الترويستان X-Signature-Ed25519 وX-Signature-Timestamp مع المفتاح العام لتطبيقك)، وأن يرسل ردًا أوليًا خلال 3 ثوانٍ أو يؤجل الرد ويكمله لاحقًا. وبهذه الطريقة لا تصلك أحداث الـ Gateway مثل الرسائل العادية.

إذا كان البوت يقرأ الرسائل، أو يتفاعل مع انضمام الأعضاء، أو يشغّل صوتًا، أو يتابع حالة المستخدمين، فأنت تحتاج الـ Gateway، والـ VPS هو مكانه الطبيعي. وإذا كان يرد على أوامر Slash فقط، فالـ Interactions Endpoint خيار ممكن، مع أنه يحتاج بدوره خادم HTTPS موثوقًا.

ما حجم السيرفر الذي يحتاجه بوت ديسكورد؟

بوت الإشراف أو الأدوات أو المجتمع المعتاد في عدد قليل من السيرفرات يستهلك معالجًا قليلًا وذاكرة متواضعة، وأكثر ما يستهلكها بيئة التشغيل والـ Cache الخاص بالمكتبة. وتزيد المتطلبات مع:

  • عدد السيرفرات والأعضاء: المكتبات تحفظ السيرفرات والقنوات والأعضاء والرسائل في الذاكرة. تقليل الـ Cache، مثل حجم ذاكرة الرسائل أو تخزين الأعضاء، يبقي استهلاك RAM تحت السيطرة.

  • الموسيقى والصوت: معالجة الصوت عبر FFmpeg أثقل بكثير على المعالج من الأوامر النصية.

  • ميزات الذكاء الاصطناعي: استدعاء API لنموذج خفيف، أما تشغيل نموذج محليًا فليس كذلك.

  • قاعدة بيانات: PostgreSQL أو SQLite للإعدادات والمستويات والتذاكر والسجلات.

لمعظم البوتات المنفردة تكفي 1 vCPU و2 GB RAM وزيادة. راقب الذاكرة كلما انضم البوت إلى سيرفرات أكثر. وإذا كنت تفاضل بين VPS والـ Serverless والمنصات المُدارة، فمقارنتنا أين تستضيف وكيل الذكاء الاصطناعي تنطبق على البوتات أيضًا.

الخطوة 1: إنشاء البوت واختيار الـ Intents

من Discord Developer Portal أنشئ تطبيقًا، وأضف إليه مستخدم بوت، وانسخ التوكن. بعدها حدد الـ Gateway Intents، وهي التي تتحكم في الأحداث التي يرسلها لك ديسكورد:

  • الـ Intents العادية مثل Guilds وGuildMessages متاحة لكل البوتات.

  • الـ Intents المميزة (Privileged)، وهي Message Content وServer Members وPresence، يجب تفعيلها في الـ Developer Portal قبل أن يطلبها الكود. والبوت الموجود في 100 سيرفر أو أكثر يجب توثيقه، والبوتات الموثقة تحتاج موافقة ديسكورد لاستخدام هذه الـ Intents.

اطلب فقط ما تستخدمه. البوت المبني على أوامر Slash لا يحتاج Message Content، لأن خيارات الأمر تصل داخل الـ Interaction نفسها.

// discord.js
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
  intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages,
            GatewayIntentBits.MessageContent] // مميز: فعّله من الـ Portal
});
client.login(process.env.DISCORD_TOKEN);
# discord.py
import os, discord
intents = discord.Intents.default()
intents.message_content = True  # مميز: فعّله من الـ Portal
client = discord.Client(intents=intents)
client.run(os.environ["DISCORD_TOKEN"])

الخطوة 2: تجهيز السيرفر

على سيرفر Ubuntu أو Debian جديد حدّث الحزم، وأنشئ مستخدم نظام مخصصًا للبوت، وأمّن SSH بالمفاتيح وجدار ناري، وقد شرحنا ذلك في تأمين سيرفر VPS لينكس بمفاتيح SSH وUFW وFail2ban. بوت الـ Gateway لا يحتاج أي منفذ للدخول، فيكفي أن يسمح الجدار الناري بـ SSH فقط.

sudo apt update && sudo apt install -y python3-venv
sudo adduser --system --group --home /opt/discord-bot bot
# انسخ الكود إلى /opt/discord-bot ثم مع discord.py:
sudo -u bot python3 -m venv /opt/discord-bot/venv
sudo -u bot /opt/discord-bot/venv/bin/pip install -r /opt/discord-bot/requirements.txt

الخطوة 3: حماية التوكن

التوكن يعني تحكمًا كاملًا في البوت، فمن يملكه يستطيع التصرف باسم البوت في كل سيرفر هو عضو فيه.

  • احفظه في ملف متغيرات بيئة لا يقرؤه إلا مستخدم البوت، مثل /opt/discord-bot/.env وبداخله DISCORD_TOKEN=...، بصلاحيات 600.

  • لا ترفعه إلى Git أبدًا، وأضف .env إلى .gitignore.

  • إذا تسرّب، فأعد توليده من الـ Developer Portal فورًا وحدّث الملف.

الخطوة 4: تشغيله كخدمة

الخيار الأول: systemd

[Unit]
Description=Discord bot
Wants=network-online.target
After=network-online.target

[Service]
User=bot
WorkingDirectory=/opt/discord-bot
EnvironmentFile=/opt/discord-bot/.env
ExecStart=/opt/discord-bot/venv/bin/python bot.py
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

احفظ الملف باسم /etc/systemd/system/discord-bot.service، ثم نفّذ sudo systemctl daemon-reload وsudo systemctl enable --now discord-bot. ومع بوت discord.js اجعل ExecStart يشير إلى Node.js وملف البداية الخاص بك.

الخيار الثاني: Docker Compose

services:
  bot:
    build: .
    env_file: .env
    restart: unless-stopped
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"

Docker مناسب للبوتات متعددة الأجزاء (البوت وقاعدة البيانات ولوحة تحكم ويب)، ويجعل النقل إلى سيرفر آخر سهلًا. وإعدادات السجلات تمنع ملفات الـ Logs من ملء القرص ببطء.

إعادة الاتصال وإعادة التشغيل

اتصال الـ Gateway ينقطع من وقت لآخر: تذبذب في الشبكة، أو طلب من ديسكورد بإعادة الاتصال، أو جلسة أُلغيت. مكتبتا discord.js وdiscord.py تعيدان الاتصال واستئناف الجلسة تلقائيًا، فلا تكتب حلقة إعادة اتصال بنفسك. ما لا تستطيع المكتبة إصلاحه هو تعطل العملية بسبب استثناء غير معالج، وهنا يأتي دور Restart=always أو restart: unless-stopped. واترك مهلة قبل إعادة التشغيل مثل RestartSec حتى لا تُغرق ديسكورد بمحاولات دخول متكررة، فبدء جلسات Gateway جديدة له حدود.

السجلات والمراقبة

  • مع systemd تابع السجلات بالأمر journalctl -u discord-bot -f، ومع Docker استخدم docker compose logs -f bot.

  • سجّل الأخطاء مع سياق كافٍ لإعادة إنتاجها (اسم الأمر ومعرّف السيرفر)، ولا تسجّل التوكن أو رسائل المستخدمين الخاصة أبدًا.

  • أضف إشارة صحة: نبضة دورية إلى خدمة مراقبة توافر، أو أمرًا يعرض زمن استجابة الـ Gateway.

  • راقب الذاكرة على مدى أسابيع، فالارتفاع البطيء المستمر يعني غالبًا Cache بلا حد أو تسربًا في الذاكرة.

الـ Sharding للبوتات الكبيرة

اتصال Gateway واحد لا يخدم إلا عددًا محدودًا من السيرفرات. يفرض ديسكورد استخدام الـ Sharding عندما يصل البوت إلى 2,500 سيرفر، ومن الحكمة التخطيط له قبل ذلك. كل Shard اتصال مستقل يتولى مجموعة من السيرفرات. توفر discord.js أداة ShardingManager التي تشغّل كل Shard كعملية منفصلة، وتوفر discord.py الـ AutoShardedClient. وعند هذا الحجم ستنتقل غالبًا من VPS صغير إلى سيرفر أكبر أو عدة سيرفرات تتشارك قاعدة بيانات واحدة.

تحديث البوت بأمان

  • ثبّت إصدارات المكتبات في package.json أو requirements.txt، واقرأ سجل التغييرات قبل الترقيات الكبيرة، فكل من discord.js وdiscord.py أدخلت تغييرات غير متوافقة في إصدارات رئيسية سابقة.

  • اختبر ببوت تطوير منفصل في سيرفر تجريبي خاص قبل إعادة تشغيل بوت الإنتاج.

  • انشر بسكربت قصير: اسحب الكود، وثبّت الاعتماديات، وأعد تشغيل الخدمة، وراجع السجلات.

  • أبقِ نظام التشغيل محدّثًا، وتفعيل التحديثات الأمنية التلقائية خيار افتراضي معقول على Ubuntu وDebian.

وإذا كنت تشغّل بوتات على منصات أخرى، فالأنماط نفسها تنطبق: راجع تشغيل بوت تيليجرام 24 ساعة على VPS، وللبوتات المعتمدة على Webhook مع تخزين المحادثات راجع استضافة بوت واتساب 24 ساعة.

أسئلة شائعة

هل يمكن استضافة بوت ديسكورد مجانًا؟

يمكنك تشغيله على جهازك ما دام يعمل. الباقات المجانية كثيرًا ما تدخل في السكون عند الخمول فينقطع اتصال الـ Gateway، لذلك نادرًا ما تمنحك تشغيلًا حقيقيًا 24 ساعة.

هل يحتاج بوت ديسكورد منافذ مفتوحة أو دومين؟

بوت الـ Gateway لا يحتاج، لأنه يتصل بديسكورد اتصالًا صادرًا. أما الـ Interactions Endpoint فيحتاج، لأن ديسكورد يجب أن يصل إليه عبر HTTPS.

لماذا لا يستطيع البوت قراءة نص الرسائل؟

لأن Message Content من الـ Intents المميزة. فعّله في الـ Developer Portal واطلبه في الكود، أو انتقل إلى أوامر Slash التي لا تحتاجه.

كم RAM يحتاج بوت ديسكورد؟

البوتات الصغيرة تعمل براحة ضمن 2 GB. ما يرفع المتطلبات هو الـ Cache الكبير للأعضاء، وتشغيل الموسيقى، ونماذج الذكاء الاصطناعي المحلية.

استضافة بوت ديسكورد على IM HOST

سيرفرات استضافة وكلاء الذكاء الاصطناعي تعمل على مدار الساعة وعليها Docker وNode.js وPython وPostgreSQL مع pgvector مثبتة مسبقًا، مع صلاحيات root كاملة ونسخ احتياطي يومي مجاني، وهي مناسبة للبوتات التي تضم ميزات ذكاء اصطناعي أو قاعدة بيانات أو عدة خدمات. وإذا فضّلت سيرفرًا بسيطًا، فإن سيرفر VPS لينكس يمنحك جهاز KVM غير مُدار على أقراص NVMe مع صلاحيات root كاملة وعنوان IPv4 مخصص، وهذا كل ما يحتاجه بوت الـ Gateway.

المزيد من مدونتنا

اكتشف المزيد من الأدلة العملية ورؤى الخدمات من فريق IM Host.

عرض كل المقالات