# نشر بوت Discord.js

> دليل خطوة بخطوة لنشر بوت Discord.js (Node.js) على Daki Hosting.

يرشدك هذا الدليل إلى نشر بوت Discord.js على Daki Hosting — من إنشاء خادمك حتى يصبح بوتك متصلًا ويقرأ توكنه بأمان.

## ما ستتعلمه

- كيفية إنشاء خادم Node.js لبوتك
- كيفية رفع كودك
- كيفية إعداد أمر التثبيت وأمر التشغيل وصورة Docker
- كيفية ضبط توكن بوتك بأمان باستخدام ملف `.env`
- كيفية تشغيل بوتك والتحقق من أنه يعمل

---

## المتطلبات الأساسية

- حساب Daki (Free Tier أو مدفوع) — انظر [أنشئ حسابًا](https://daki.cc/ar/wiki/guides/account-create)
- بوت Discord لديه **توكن بوت (bot token)**، يُنشأ في [بوابة المطورين في Discord](https://discord.com/developers/applications)
- كود بوتك، ويتضمن `package.json` يحتوي على `discord.js` و`dotenv` كاعتماديات

> **معلومة:** بوتات Discord تتصل **صادرًا** بخوادم Discord ولا تحتاج إلى منفذ وارد. وهذا يعني أن بوتات Discord تعمل على Free Tier والخطط المدفوعة معًا. إذا كان بوتك يخدم طلبات HTTP أيضًا (مثلًا لتفاعلات أوامر الشرطة المائلة slash commands أو webhooks)، فستحتاج إلى خطة مدفوعة، إذ إن المنافذ المتاحة للعامة متوفرة فقط في الخطط المدفوعة. انظر [تخصيصات الشبكة](https://daki.cc/ar/wiki/guides/network-allocations).

---

## النشر

**الخطوة 1: أنشئ خادم Node.js**

1. سجّل الدخول إلى Free Tier Dashboard على [free.daki.cc](https://free.daki.cc) أو إلى Billing Panel على [billing.daki.cc](https://billing.daki.cc).
2. أنشئ خادمًا جديدًا واختر قالب **Node.js** egg.
3. أعطِ خادمك اسمًا (مثل `MyDiscordBot`).

انظر [أنشئ أول خادم لك](https://daki.cc/ar/wiki/guides/create-server) للشرح الكامل.

**الخطوة 2: افتح Portal**

سجّل الدخول إلى Portal عبر SSO (**Open Portal** في صفحة Account في لوحة التحكم، أو صفحة خدمتك في Billing Panel)، أو مباشرة على [portal.daki.cc](https://portal.daki.cc). انظر [نظرة عامة على Portal](https://daki.cc/ar/wiki/guides/portal).

**الخطوة 3: ارفع كود بوتك**

**الخيار A — الرفع كملف ZIP (الأبسط):**
1. اضغط مجلد مشروعك في ملف `.zip` على جهازك.
2. في Portal، انتقل إلى تبويب **Files** وانقر على **Upload**.
3. انقر بالزر الأيمن على ملف `.zip` ثم انقر على **Extract**.

**الخيار B — استخدم SFTP (دون حد للحجم):**
اتصل باستخدام بيانات اعتماد SFTP من تبويب **Settings** وارفع مجلدك مباشرة. انظر [مدير الملفات](https://daki.cc/ar/wiki/guides/file-manager).

> **معلومة:** **لا** تُضمّن مجلد `node_modules` في الرفع — سيُثبَّت تلقائيًا بواسطة أمر التثبيت. أما `package.json` و`package-lock.json` فيجب تضمينهما.

**الخطوة 4: اضبط تبويب Startup**

افتح تبويب **Startup** واضبط الحقول الثلاثة:

**1. Docker Image** — اختر إصدار Node.js الذي يحتاجه بوتك (مثلًا **Node.js 22** أو **Node.js 24**). Node.js 24 LTS خيار آمن افتراضيًا إذا لم تكن متأكدًا. تجنب الإصدارات المعلَّمة **EOL**، فهي لم تعد تتلقى تحديثات أمنية.

**2. Install Command** — اضبطه لتثبيت اعتمادياتك تلقائيًا:
```
npm install
```
**3. Startup Command** — اضبطه على الأمر الذي يشغّل بوتك:
- `node index.js` — إذا كان ملف الدخول لديك `index.js`
- `node bot.js` — إذا كان ملف الدخول لديك `bot.js`
- `npm start` — إذا كان لديك سكربت `start` في `package.json`

يمكنك تعديل هذه الأوامر لتتناسب مع بنية مشروعك.

انظر [إعدادات التشغيل](https://daki.cc/ar/wiki/guides/startup-settings) للشرح الكامل.

**الخطوة 5: أضف توكن بوتك عبر ملف .env**

يحتاج بوتك إلى توكن Discord للاتصال. خزّنه في ملف `.env` على الخادم حتى لا يصل أبدًا إلى كود مصدرك.

1. في تبويب **Files**، انقر على **New File** وسمِّه `.env`.
2. أضف التوكن:
   ```
   BOT_TOKEN=your_discord_bot_token_here
   ```
3. انقر على **Save**.

في كود بوتك، حمّله باستخدام `dotenv`:
```js
require('dotenv').config();

const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });

client.once('ready', () => {
    console.log(`Logged in as ${client.user.tag}`);
});

client.login(process.env.BOT_TOKEN);
```
تأكد من أن `dotenv` مُدرج في اعتماديات `package.json` حتى يُثبَّت بواسطة أمر التثبيت.

انظر [متغيرات البيئة](https://daki.cc/ar/wiki/guides/environment-variables) لمزيد من التفاصيل حول استخدام ملفات `.env`.

**الخطوة 6: شغّل بوتك**

انقر على **Start** في تبويب **Console**. عند نجاح التشغيل ستظهر رسالة تأكيد تسجيل دخول البوت:

```

Logged in as MyBot#1234!

```
إذا ظهرت أخطاء بدلًا من ذلك، فاطّلع على دليل [استكشاف الأخطاء وإصلاحها](https://daki.cc/ar/wiki/guides/troubleshooting).

---

## المشكلات الشائعة

**Error: Cannot find module 'discord.js'**

لم تُثبَّت الاعتماديات. تأكد من أن `package.json` يدرج `discord.js` كاعتمادية، ومن أن أمر التثبيت مضبوط على `npm install` في تبويب **Startup**. أعد تشغيل الخادم لتشغيل التثبيت.

**Error: Cannot find module 'dotenv'**

أضف `dotenv` إلى اعتماديات `package.json` وأعد تشغيل الخادم لإعادة التثبيت.

**Error: An invalid token was provided**

توكن البوت في ملف `.env` غير صحيح أو مفقود. انتقل إلى تبويب **Files**، وافتح `.env`، وتحقق من القيمة. تأكد من عدم وجود مسافات زائدة أو علامات اقتباس أو أسطر جديدة.

**البوت يبدأ لكنه ينفصل بعد قليل**

يحدث هذا عادةً بسبب Gateway Intents مفقودة. في بوابة المطورين في Discord، فعّل الـ Intents المميزة المطلوبة (مثل Message Content Intent) لتطبيق البوت، وتأكد من أن كودك يطلبها.

**الخادم يتعطل فور بدئه**

افتح تبويب **Console** واقرأ الخطأ. الأسباب الشائعة: أمر تشغيل خاطئ (خطأ إملائي في اسم الملف)، أو إصدار Node.js خاطئ، أو غياب `node_modules`. انظر [استكشاف الأخطاء وإصلاحها](https://daki.cc/ar/wiki/guides/troubleshooting).

---

## الخطوات التالية

- [متغيرات البيئة](https://daki.cc/ar/wiki/guides/environment-variables) — دليل كامل عن ملفات `.env` وقراءة المتغيرات في الكود.
- [تجديد خادمك المجاني](https://daki.cc/ar/wiki/guides/save-free-server-from-purge) — شاهد إعلانات لإبقاء خادم Free Tier الخاص بك نشطًا.
- [مدير الملفات](https://daki.cc/ar/wiki/guides/file-manager) — حدّث ملفات الكود بعد إجراء تغييرات.

---
Source: https://daki.cc/ar/wiki/guides/deploy-discordjs
