Skip to content
VDS · التطبيقات والبوتات

بوت Discord: التشغيل والمراقبة

تشغيل بوت Discord على VPS تحت systemd، وتحديد الذاكرة، وقراءة السجلات، والتعامل مع حدود المعدل، والتحديث دون توقف.

آخر تحديث 23 أغسطس 2026

يحتفظ بوت Discord باتصال WebSocket دائم ببوابة Discord، لذا يحتاج إلى جهاز يظل قيد التشغيل. متطلباته من الموارد متواضعة، لكنه على عكس بوت Telegram يتعامل مع عمليات إعادة التشغيل بشكل أسوأ: كل عملية إعادة تشغيل تفرض اتصالًا جديدًا بالبوابة.

التثبيت

useradd -r -m -d /srv/dbot -s /usr/sbin/nologin dbot
cd /srv/dbot && sudo -u dbot git clone https://github.com/you/bot.git .
sudo -u dbot npm ci --omit=dev
install -o dbot -g dbot -m 600 /dev/null /srv/dbot/.env

ضع الرمز والمعرّفات في .env. الرمز الصادر من Discord Developer Portal يمنح صلاحية كاملة على البوت — تعامل معه كما تتعامل مع كلمة مرور.

بالنسبة لمكتبات Python الإجراء نفسه، مع بيئة افتراضية؛ راجع تطبيق Python.

الخدمة

/etc/systemd/system/dbot.service:

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

[Service]
User=dbot
WorkingDirectory=/srv/dbot
EnvironmentFile=/srv/dbot/.env
ExecStart=/usr/bin/node index.js
Restart=always
RestartSec=15
MemoryMax=512M
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now dbot

RestartSec=15 بدلًا من الخمس ثوانٍ القياسية: عند انقطاع الاتصال بالبوابة، تؤدي عمليات إعادة التشغيل المتكررة إلى حظر مؤقت على الاتصالات من جانب Discord.

يمنع MemoryMax بوتًا يعاني من تسرب في الذاكرة من إسقاط الجهاز بأكمله معه — وهو أمر مهم بشكل خاص على VDS-1 بسعة 2 GB.

المراقبة

systemctl status dbot
journalctl -u dbot -f
journalctl -u dbot --since today -p err
systemctl show dbot -p NRestarts

NRestarts هو المقياس الأكثر فائدة: إذا كان العدّاد يزداد كل ساعة، فالبوت يتعطل وRestart=always يخفي ذلك.

استهلاك الذاكرة لخدمة معينة:

systemctl status dbot | grep Memory

للحصول على الصورة العامة للجهاز، راجع رسوم CPU والذاكرة وحركة المرور البيانية في «نظرة عامة» في لوحة التحكم على /hosting/vds/m/<id>.

تحديد المعدل

يفرض Discord حدودًا على استدعاءات API. العلامات هي أخطاء 429 في السجلات وأوامر «تتوقف». ما يساعد:

  • لا ترسل الرسائل في حلقة دون توقف؛
  • عدّل رسالة واحدة بدلًا من إرسال رسائل جديدة؛
  • خزّن البيانات المرجعية مؤقتًا بدلًا من طلبها عند كل حدث؛
  • استخدم طابور Redis للبث الجماعي.

التحديث

cd /srv/dbot
sudo -u dbot git pull
sudo -u dbot npm ci --omit=dev
systemctl restart dbot
journalctl -u dbot -n 50

السطر الأخير إلزامي: تأكد من أن البوت اتصل بالبوابة بدلًا من التعطل بسبب تبعية جديدة.

الأخطاء الشائعة

العَرَضالسبب
البوت متصل لكنه لا يستجيب للأوامرلم تُفعَّل الـ intents المطلوبة في Developer Portal
إعادة اتصال مستمرةRestartSec قصير جدًا، أو تعطل في معالج حدث
Invalid tokenأُعيد توليد الرمز ولم يُحدَّث .env
الأوامر مكررةنسختان من البوت تعملان — تحقق من ps aux | grep node
الجهاز يبدأ بالتبديللا يوجد MemoryMax، تسرب في الكود

لا تشغّل البوت تحت screen أو tmux. الجلسة تنجو من انقطاع SSH، لكن ليس من إعادة تشغيل الجهاز — وبعد شهر ستنسى أين يعمل أصلًا.