# نشر بوت Python

> دليل خطوة بخطوة لنشر بوت Discord بلغة Python (discord.py أو py-cord) على Daki Hosting.

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

## ما ستتعلمه

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

---

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

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

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

---

## النشر

**الخطوة 1: أنشئ خادم Python**

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

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

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

سجّل الدخول إلى Portal عبر SSO أو مباشرة على [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).

> **معلومة:** ضمّن ملف `requirements.txt` في جذر مشروعك. يستخدمه أمر التثبيت لتثبيت اعتماديات مشروعك.

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

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

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

**2. Install Command** — اضبطه لتثبيت اعتمادياتك تلقائيًا:
```
pip install -r requirements.txt
```
**3. Startup Command** — اضبطه على الأمر الذي يشغّل بوتك:
- `python main.py` — إذا كان ملف الدخول لديك `main.py`
- `python bot.py` — إذا كان ملف الدخول لديك `bot.py`
- `python -m mypackage` — إذا كان مشروعك منظمًا كحزمة (package)

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

انظر [إعدادات التشغيل](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**.

تأكد من أن `python-dotenv` موجود في `requirements.txt`، ثم حمّل الملف في كودك:

```python

from dotenv import load_dotenv

import os

import discord



load_dotenv()

TOKEN = os.environ.get("BOT_TOKEN")



intents = discord.Intents.default()

client = discord.Client(intents=intents)



@client.event

async def on_ready():

    print(f"Logged in as {client.user}")



client.run(TOKEN)

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

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

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

```

Logged in as MyBot#1234

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

---

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

**ModuleNotFoundError: No module named 'discord'**

لم تُثبَّت الاعتماديات. تأكد من أن `discord.py` أو `py-cord` مدرج في `requirements.txt`، ومن أن أمر التثبيت مضبوط على `pip install -r requirements.txt` في تبويب **Startup**. أعد تشغيل الخادم لتشغيل التثبيت.

**ModuleNotFoundError: No module named 'dotenv'**

أضف `python-dotenv` إلى `requirements.txt` وأعد تشغيل الخادم.

**discord.errors.LoginFailure: Improper token has been passed**

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

**خطأ PrivilegedIntentsRequired**

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

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

اقرأ مخرجات تبويب **Console** لمعرفة الخطأ. الأسباب الشائعة: أمر تشغيل خاطئ (خطأ إملائي في اسم الملف أو في المسار)، أو غياب `requirements.txt`، أو حزمة مفقودة. انظر [استكشاف الأخطاء وإصلاحها](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-python
