لاستضافة بوت nextcord على مدار الساعة 24/7، شغّله على جهاز يبقى قيد التشغيل بدلًا من حاسوبك: خادم VPS لينكس مع خدمة systemd إن كنت تستضيفه بنفسك، أو خطة بوتات على استضافة بوتات Discord من PlayNHost (ابتداءً من US$1.99 شهريًا)، حيث ترفع الكود وتلصق الرمز وتضغط على ابدأ. في اختبارنا استخدم بوت nextcord 3.2.0 نحو 47 MB من الذاكرة ووصل إلى Discord بعد نحو 1.0 ثانية من تشغيله. أول ما عليك التحقق منه: يتطلب nextcord 3 الإصدار Python 3.12 أو أحدث. الخطوات على PlayNHost:
- في صفحة استضافة بوتات Discord، انقر أنشئ سيرفرًا على إحدى الخطط. في نافذة الطلب أجب عن لأي منصة بوتك؟ باختيار Discord ثم اختر Python.
- افتح خادمك في اللوحة. تفتح بطاقة إعداد بوتك في نظرة عامة عند الخطوة الاتصال بـ Discord. ينبغي أن تقول خطوتها الأولى ما الذي يعمل العبارة يشغّل هذا البوت Python Bot.؛ انقر هذه الخطوة للتحقق منها ثم انقر متابعة.
- في الاتصال بـ Discord، الصق رمزك في الصق رمز بوتك، وانقر الاتصال، ثم نعم، متابعة.
- في الأذونات، حدّد كودي يستخدم هذا فقط للـ intents المميزة التي يطلبها كودك (البوت أدناه لا يحتاج إلى أي منها)، وانقر إضافة إلى خادم Discord، ثم متابعة.
- في كودك، انقر رفع الملفات وارفع
bot.pyوملفrequirements.txtيتضمنnextcord، أو انقر ربط Git. - في صفحة بوت، لوحة الكود، أبقِ بيئة التشغيل على Python 3.12 (recommended) أو 3.13 أو 3.14، وحدّد ملف البدء إن لم يكن
bot.py، وانقر حفظ. - انقر تشغيل البوت وتابع Console. عندما يطبع بوتك
Logged in as ...، تقول البطاقة بوتك متصل في Discord.
الخطوات العامة لبايثون (الحزم وأسطر وحدة التحكم) موجودة في كيف تستضيف بوت Discord بلغة Python. تغطي هذه الصفحة ما يختلف في nextcord.
ما الذي قسناه
شغّلنا كل مكتبة Discord لبايثون على خوادمنا، بنفس إعداد Python 3.12 الذي تستخدمه خطة البوتات، وبحد ذاكرة قدره 1 GB:
| المكتبة | الإصدار | الذاكرة في حالة السكون | من البدء إلى رد Discord |
|---|---|---|---|
| nextcord | 3.2.0 | 47 MB | 1.0 ث |
| discord.py | 2.7.1 | 48 MB | 1.0 ث |
| Pycord | 2.8.1 | 51 MB | 1.1 ث |
| disnake | 2.12.2 | 47 MB | 0.9 ث |
| hikari | 2.7.0 | 61 MB | 1.3 ث |
| Python وحده | 3.12 | 9 MB |
الطريقة: أصغر برنامج يحمّل المكتبة ويسجّل الدخول برمز مزيّف، مثبّتًا بالطريقة التي تثبّته بها خوادمنا. الذاكرة هي ما كانت العملية تشغله بعد 15 ثانية من رفض Discord للرمز، ويُحسب زمن البدء من التشغيل حتى هذا الرد، فهو يشمل رحلة واحدة إلى Discord. كل رقم هو الوسيط لثلاث تشغيلات بعد تشغيلة إحماء. هذا هو الحد الأدنى: البوت الذي اتصل وانضم إلى خوادم وخزّن الأعضاء مؤقتًا يستخدم أكثر، بمقدار يعتمد على البوت.
ماذا يعني هذا للخطة: يستخدم بوت nextcord الأدنى جزءًا صغيرًا من خطة STARTER بسعة 0.5 GB. حدّد حجم الخطة بحسب ما يحتفظ به بوتك نفسه في الذاكرة، لا بحسب المكتبة.
بوت nextcord أدنى
يرد على /ping بأمر شرطة مائلة ويطبع سطر الجاهزية. يقرأ الرمز من DISCORD_TOKEN، وهو الاسم الذي تعطيه اللوحة لكودك.
requirements.txt
nextcord>=3.2,<4
bot.py
import logging
import os
import nextcord
from nextcord.ext import commands
logging.basicConfig(level=logging.INFO)
bot = commands.Bot()
@bot.event
async def on_ready():
print(f"Logged in as {bot.user}")
@bot.slash_command(description="Check that the bot answers")
async def ping(interaction: nextcord.Interaction):
await interaction.send("Pong!")
bot.run(os.environ["DISCORD_TOKEN"])
نطاق الإصدارات في requirements.txt مقصود: على بايثون قديم جدًا يتوقف pip بخطأ بدلًا من تثبيت nextcord قديم بصمت (انظر أدناه). لا يحتاج commands.Bot() إلى بادئة لأوامر الشرطة المائلة. يسجّل nextcord الأمر /ping لدى Discord بنفسه عند كل اتصال. السطر Logged in as هو ما يحوّل الشارة في نظرة عامة إلى متصل في Discord.
إذا كان الرمز خاطئًا
عندما يرفض Discord الرمز، يطلق nextcord هذا الخطأ (النص الذي طبعه بوت الاختبار لدينا):
LoginFailure: Improper token has been passed.
مع bot.run() ينتهي التتبع بالسطر nextcord.errors.LoginFailure: Improper token has been passed. ويتوقف البوت. تقرأ اللوحة هذا السطر: تعرض الشارة مشكلة في الرمز وتقول اللافتة لم يقبل Discord رمز بوتك. احصل على رمز جديد من Discord Developer Portal: تطبيقك، Bot، Reset Token (يُعرض مرة واحدة فقط). انقر استبدال الرمز في اللافتة، ثم استبدال الرمز في لوحة Discord، والصقه وشغّل البوت مجددًا. انظر كيف تنشئ بوت Discord وتحصل على رمزه.
ما يجب أن يعرفه المضيف عن nextcord
- Python 3.12 أو أحدث. يتطلب كل إصدار من nextcord 3 الإصدار Python 3.12 أو أحدث. على Python 3.10 أو 3.11، يجعل السطر
nextcordالمجرد الأداة pip تثبّت الإصدار 2.6.0 الصادر في سبتمبر 2023، وهو آخر إصدار يدعمهما، وقد يفشل عندها الكود المكتوب لـ nextcord 3. معnextcord>=3.2,<4يرفض pip: تعرض وحدة التحكم خطأ pip والسطر[PlayNHost] pip could not install everything in requirements.txt.، وإذا لم يُثبَّت nextcord على الخادم قط، يتوقف البوت بعدها معModuleNotFoundError: No module named 'nextcord'. اختر 3.12 أو 3.13 أو 3.14 ضمن بيئة التشغيل؛ يسري التغيير عند التشغيل التالي. - الاستيراد هو nextcord. تثبّت
nextcordوتكتبimport nextcordوfrom nextcord.ext import commands. إذا كنت قادمًا من discord.py، فإن دليل الترحيل في nextcord يقول أن تحذف discord.py وتغيّرdiscordإلىnextcordفي الاستيرادات وفي الكود. - الأوامر التي لا يعرفها تُحذف. عند الاتصال يسجّل nextcord الأوامر الجديدة ويحدّث المعدّلة ويحذف من Discord الأوامر التي لا يعرّفها كودك (
rollout_delete_unknown، مفعّل افتراضيًا). إذا كان برنامج ثانٍ يستخدم البوت نفسه، مثل نسخة اختبار على حاسوبك، تُحذف الأوامر التي يعرّفها ذلك البرنامج وحده في كل مرة تتصل فيها نسخة الخادم. استخدم تطبيقًا منفصلًا للاختبار. - لا تلمس on_connect. يجري هذا التسجيل داخل
on_connectالخاص بالبوت. تعريف@bot.event async def on_connect()يستبدله فتتوقف أوامرك عن التحديث. ضع كود البدء فيon_readyكما في الأعلى. - فعّل التسجيل. لا يضبط nextcord التسجيل (logging) بنفسه، وتوصي وثائقه بشدة بضبطه. من دونه يعرض Python التحذيرات والأخطاء فقط؛ و
logging.basicConfig(level=logging.INFO)في البوت أعلاه يعرض أيضًا أسطر المعلومات من المكتبة. - Intents. لا تتضمن الـ intents الافتراضية أي intent مميز، ولا تحتاج أوامر الشرطة المائلة إلى أي منها. تحتاج الأوامر ذات البادئة إلى
intents.message_content = Trueفي كودك وإلى تفعيل Message Content Intent في Developer Portal. إذا طلبه كودك وهو معطّل في Portal، يرفض Discord تسجيل الدخول. انظر إصلاح خطأ «Used disallowed intents» في بوت Discord.
استضفه بنفسك على VPS لينكس
تحقق أولًا من إصدار Python: يجب أن يعرض python3 --version الإصدار 3.12 أو أحدث. يأتي Ubuntu 24.04 مع 3.12 ويأتي Debian 13 مع 3.13؛ ويأتي Debian 12 مع 3.11 ويأتي Ubuntu 22.04 مع 3.10، وكلاهما أقدم من أن يناسب nextcord 3. ثم ثبّت Python، وأنشئ مستخدمًا ومجلدًا للبوت، وثبّت nextcord في بيئة افتراضية:
sudo apt update
sudo apt install -y python3 python3-venv
sudo useradd --system --create-home --home-dir /opt/nextcord-bot bot
sudo cp bot.py requirements.txt /opt/nextcord-bot/
sudo chown bot: /opt/nextcord-bot/bot.py /opt/nextcord-bot/requirements.txt
sudo -u bot python3 -m venv /opt/nextcord-bot/venv
sudo -u bot /opt/nextcord-bot/venv/bin/pip install -r /opt/nextcord-bot/requirements.txt
ضع الرمز في ملف لا يقرؤه إلا root. أنشئ /etc/nextcord-bot.env بالأمر sudo nano /etc/nextcord-bot.env، واكتب سطرًا واحدًا هو DISCORD_TOKEN= يليه رمزك، واحفظه ثم نفّذ sudo chmod 600 /etc/nextcord-bot.env.
ثم أنشئ /etc/systemd/system/nextcord-bot.service:
[Unit]
Description=nextcord Discord bot
Wants=network-online.target
After=network-online.target
[Service]
User=bot
WorkingDirectory=/opt/nextcord-bot
EnvironmentFile=/etc/nextcord-bot.env
Environment=PYTHONUNBUFFERED=1
ExecStart=/opt/nextcord-bot/venv/bin/python bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
شغّله الآن وعند كل إقلاع، ثم تابع مخرجاته:
sudo systemctl daemon-reload
sudo systemctl enable --now nextcord-bot
sudo journalctl -u nextcord-bot -f
يجعل PYTHONUNBUFFERED=1 مخرجات print() تصل إلى السجل فورًا بدلًا من انتظار امتلاء المخزن المؤقت. لتحديث البوت، انسخ الملفات الجديدة، ونفّذ سطر pip install مجددًا، ثم sudo systemctl restart nextcord-bot.
الاستضافة الذاتية أم خطة بوتات
| VPS الخاص بك | خطة بوتات من PlayNHost | |
|---|---|---|
| Python | الإصدار الذي تأتي به توزيعتك، ويجب أن يكون 3.12 أو أحدث لـ nextcord 3 | اختر 3.12 أو 3.13 أو 3.14 ضمن بيئة التشغيل |
| الحزم | تنفّذ pip install بعد كل تغيير | تُثبَّت عند تشغيل يلي تغيّر requirements.txt أو إصدار Python، وعند أول تشغيل بعد يوم من آخر تثبيت |
| إعادة التشغيل | وحدة systemd الخاصة بك | يُشغَّل مجددًا بعد تعطل؛ ويُترك متوقفًا مع ذكر السبب إذا تعطل ثانية خلال دقيقة |
| الرمز | ملف تحميه بنفسك | يُخزَّن مشفّرًا ويُتحقق منه لدى Discord عند لصقه ويُسلَّم إلى كودك باسم DISCORD_TOKEN |
| الأخطاء | تقرأ السجل | تسمّي لافتة وحدة التحكم السبب، مثل رمز خاطئ أو حزمة لم تُثبَّت |
| تحديثات النظام وجدار الحماية وSSH | عليك أنت | ليست من مهامك |
أسئلة يطرحها الناس
لماذا ثبّت pip الإصدار nextcord 2.6.0؟
إصدار Python لديك هو 3.10 أو 3.11. يتطلب nextcord 3 الإصدار 3.12 أو أحدث، لذلك يختار pip أحدث إصدار ما زال يدعم Python لديك. اضبط بيئة التشغيل في لوحة الكود على Python 3.12 أو أحدث وشغّل البوت مجددًا: تُثبَّت الحزم من جديد لأن إصدار Python تغيّر.
اختفت أوامر الشرطة المائلة لديّ. لماذا؟
سبب شائع: برنامج آخر سجّل الدخول بالبوت نفسه وزامن قائمته الخاصة، وnextcord يحذف الأوامر التي لا يعرّفها كوده. شغّل نسخة واحدة فقط لكل تطبيق. أثناء الاختبار، يجعل guild_ids=[your_server_id] على أمر، أو default_guild_ids على commands.Bot()، الأمر يُنشأ في ذلك الخادم فقط، وتقول وثائق Discord إن أوامر الخادم تتحدث فورًا.
هل يمكنني الاحتفاظ بكود discord.py؟
معظمه. بدأ nextcord كنسخة متفرعة من discord.py، لذلك توجد فيه فئات مثل Client وIntents وext.commands باسم nextcord. تختلف أوامر الشرطة المائلة: @bot.slash_command وinteraction.send() في nextcord، وapp_commands في discord.py. احذف discord.py وغيّر الاستيرادات، كما يقول دليل الترحيل في nextcord.
هل يناسب بوت nextcord أصغر خطة؟
نعم. مع نحو 47 MB في اختبارنا، يترك بوت nextcord الأدنى معظم خطة STARTER بسعة 0.5 GB لكودك أنت. انتقل إلى خطة أكبر عندما يحتاج بوتك نفسه إلى ذلك: خوادم كبيرة يخزّن أعضاءها مؤقتًا، أو ملفات أو صور يعالجها، أو بيانات يحتفظ بها في الذاكرة.
مستعد لتشغيل بوتك؟ اختر خطة في استضافة بوتات Discord وارفع بوت nextcord الخاص بك.



