جديد 📢 عرض الإطلاق لفترة محدودة: خصم حتى 70% على شهرك الأول في كل لعبة.عرض الباقات

كيفية استضافة بوت nextcord على مدار الساعة 24/7

استضافة بوتات DiscordUpdated Nov 6, 20269 min read

لاستضافة بوت 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:

  1. في صفحة استضافة بوتات Discord، انقر أنشئ سيرفرًا على إحدى الخطط. في نافذة الطلب أجب عن لأي منصة بوتك؟ باختيار Discord ثم اختر Python.
  2. افتح خادمك في اللوحة. تفتح بطاقة إعداد بوتك في نظرة عامة عند الخطوة الاتصال بـ Discord. ينبغي أن تقول خطوتها الأولى ما الذي يعمل العبارة يشغّل هذا البوت Python Bot.؛ انقر هذه الخطوة للتحقق منها ثم انقر متابعة.
  3. في الاتصال بـ Discord، الصق رمزك في الصق رمز بوتك، وانقر الاتصال، ثم نعم، متابعة.
  4. في الأذونات، حدّد كودي يستخدم هذا فقط للـ intents المميزة التي يطلبها كودك (البوت أدناه لا يحتاج إلى أي منها)، وانقر إضافة إلى خادم Discord، ثم متابعة.
  5. في كودك، انقر رفع الملفات وارفع bot.py وملف requirements.txt يتضمن nextcord، أو انقر ربط Git.
  6. في صفحة بوت، لوحة الكود، أبقِ بيئة التشغيل على Python 3.12 (recommended) أو 3.13 أو 3.14، وحدّد ملف البدء إن لم يكن bot.py، وانقر حفظ.
  7. انقر تشغيل البوت وتابع Console. عندما يطبع بوتك Logged in as ...، تقول البطاقة بوتك متصل في Discord.

الخطوات العامة لبايثون (الحزم وأسطر وحدة التحكم) موجودة في كيف تستضيف بوت Discord بلغة Python. تغطي هذه الصفحة ما يختلف في nextcord.

ما الذي قسناه

شغّلنا كل مكتبة Discord لبايثون على خوادمنا، بنفس إعداد Python 3.12 الذي تستخدمه خطة البوتات، وبحد ذاكرة قدره 1 GB:

المكتبةالإصدارالذاكرة في حالة السكونمن البدء إلى رد Discord
nextcord3.2.047 MB1.0 ث
discord.py2.7.148 MB1.0 ث
Pycord2.8.151 MB1.1 ث
disnake2.12.247 MB0.9 ث
hikari2.7.061 MB1.3 ث
Python وحده3.129 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 الخاص بك.

بوتك مستضاف في مكان آخر بالفعل؟ انقله إلينا

أحدث مقالات المدونة