🌐 Detecting your location…
📢 Advertisement — Configure AdSense in Appearance → Customize → AdSense Settings

كيفية إنشاء Discord Bot باستخدام Python في عام 2026: البرنامج التعليمي الكامل

⏱️3 min read  ·  533 words

بناءبوت الديسكورد هو مشروع بايثون ممتع وعملي يعلم البرمجة غير المتزامنة وواجهات برمجة التطبيقات والتعامل مع الأحداث. في عام 2026،discord.py يجعلها واضحة. ينشئ هذا الدليل روبوتًا وظيفيًا بأوامر شرطة مائلة وعناصر مضمنة وأزرار تفاعلية، ثم ينشره.

الخطوة 1: إنشاء تطبيق Discord

  1. انتقل إلى بوابة مطور Discord (discord.com/developers)
  2. انقرتطبيق جديد، قم بتسمية الروبوت الخاص بك
  3. اذهب إلىبوت القسم، انقر فوقإضافة بوت
  4. انسخالرمز (ابقِ الأمر سرًا – لا ترتكبه أبدًا)
  5. تمكيننية محتوى الرسالة ضمن نوايا البوابة المميزة
  6. تحتOAuth2، ثم منشئ URL: اخترbot وapplications.commands النطاقات، واختيار الأذونات، واستخدام عنوان URL الذي تم إنشاؤه لدعوة الروبوت إلى خادمك

الخطوة 2: الإعداد

pip install discord.py python-dotenv

# Project structure
mybot/
├── bot.py
├── .env
└── requirements.txt
# .env — never commit this
DISCORD_TOKEN=your_bot_token_here

الخطوة 3: الروبوت الأساسي بأوامر الشرطة المائلة

# bot.py
import os
import discord
from discord import app_commands
from discord.ext import commands
from dotenv import load_dotenv

load_dotenv()

intents = discord.Intents.default()
intents.message_content = True

bot = commands.Bot(command_prefix="!", intents=intents)

@bot.event
async def on_ready():
    # Sync slash commands with Discord
    await bot.tree.sync()
    print(f"Logged in as {bot.user}")

# Slash command
@bot.tree.command(name="hello", description="Greet the user")
async def hello(interaction: discord.Interaction):
    await interaction.response.send_message(
        f"Hello, {interaction.user.mention}!"
    )

# Slash command with parameters
@bot.tree.command(name="add", description="Add two numbers")
async def add(interaction: discord.Interaction, a: int, b: int):
    await interaction.response.send_message(f"{a} + {b} = {a + b}")

bot.run(os.getenv("DISCORD_TOKEN"))

الخطوة 4: التضمينات الغنية

@bot.tree.command(name="userinfo", description="Show user information")
async def userinfo(interaction: discord.Interaction, member: discord.Member = None):
    member = member or interaction.user

    embed = discord.Embed(
        title=f"User Info: {member.display_name}",
        color=discord.Color.blurple()
    )
    embed.set_thumbnail(url=member.display_avatar.url)
    embed.add_field(name="Username", value=str(member), inline=True)
    embed.add_field(name="ID", value=member.id, inline=True)
    embed.add_field(
        name="Joined",
        value=member.joined_at.strftime("%Y-%m-%d"),
        inline=False
    )
    embed.set_footer(text="MyBot")

    await interaction.response.send_message(embed=embed)

الخطوة 5: الأزرار التفاعلية

class ConfirmView(discord.ui.View):
    def __init__(self):
        super().__init__(timeout=60)
        self.value = None

    @discord.ui.button(label="Confirm", style=discord.ButtonStyle.green)
    async def confirm(self, interaction: discord.Interaction, button: discord.ui.Button):
        self.value = True
        await interaction.response.send_message("Confirmed!", ephemeral=True)
        self.stop()

    @discord.ui.button(label="Cancel", style=discord.ButtonStyle.red)
    async def cancel(self, interaction: discord.Interaction, button: discord.ui.Button):
        self.value = False
        await interaction.response.send_message("Cancelled.", ephemeral=True)
        self.stop()

@bot.tree.command(name="confirm", description="Ask for confirmation")
async def confirm_cmd(interaction: discord.Interaction):
    view = ConfirmView()
    await interaction.response.send_message("Are you sure?", view=view)

الخطوة 6: التعامل مع الأحداث

# Welcome new members
@bot.event
async def on_member_join(member):
    channel = member.guild.system_channel
    if channel:
        await channel.send(f"Welcome {member.mention} to the server!")

# React to messages
@bot.event
async def on_message(message):
    if message.author == bot.user:
        return  # ignore the bot's own messages

    if "hello bot" in message.content.lower():
        await message.channel.send("Hello there!")

    await bot.process_commands(message)  # keep prefix commands working

الخطوة 7: نشر الروبوت

# Bots need to run 24/7. Deploy to a small VPS or Railway/Fly.io.

# On a VPS with systemd — /etc/systemd/system/mybot.service
[Unit]
Description=Discord Bot
After=network.target

[Service]
WorkingDirectory=/opt/mybot
ExecStart=/opt/mybot/venv/bin/python bot.py
Restart=always
EnvironmentFile=/opt/mybot/.env

[Install]
WantedBy=multi-user.target

# Enable and start
sudo systemctl enable mybot
sudo systemctl start mybot

الأسئلة المتداولة

س: أوامر الشرطة المائلة مقابل أوامر البادئة؟
ج: أوامر الشرطة المائلة (/command) هي المعيار الحديث — يعرضها Discord في قائمة تحتوي على تلميحات للمعلمات. لا تزال أوامر البادئة (!command) تعمل ولكنها قديمة. استخدم أوامر الشرطة المائلة للروبوتات الجديدة.

س: لماذا لا تظهر أوامر الشرطة المائلة الخاصة بي؟
ج: يجب عليك الاتصالbot.tree.sync() لتسجيلهم في Discord (تم ذلك في on_ready أعلاه). يمكن أن يستغرق نشر المزامنة العالمية ما يصل إلى ساعة؛ المزامنة مع نقابة معينة للاختبار الفوري.

س: كيف أحافظ على رمز الروبوت الخاص بي آمنًا؟
ج: قم بتخزينه في.env الملف (gitignored)، لا تقم بتشفيره مطلقًا، ولا تلتزم به مطلقًا. إذا تم تسريبه، فأعد إنشائه على الفور في بوابة المطور – يتيح الرمز المميز المسرب لأي شخص التحكم في الروبوت الخاص بك.

س: أين يجب أن أستضيف الروبوت الخاص بي مجانًا/رخيصًا؟
ج: لدى Railway وFly.io مستويات مجانية/منخفضة التكلفة. يعتبر VPS (Hetzner، Contabo) بسعر 4-6 دولارات شهريًا مع systemd موثوقًا ورخيصًا. تجنب الطبقات المجانية التي تنام في حالة عدم النشاط – تحتاج الروبوتات إلى التشغيل بشكل مستمر.

س: كيف يمكنني إضافة قاعدة بيانات إلى الروبوت الخاص بي؟
ج: SQLite للروبوتات البسيطة (عبر aiosqlite للبرامج غير المتزامنة)، أو PostgreSQL للبرامج الأكبر حجمًا (asyncpg). تخزين الإعدادات لكل خادم أو بيانات المستخدم أو حالة الأمر. استخدم دائمًا مكتبات قاعدة البيانات غير المتزامنة لتجنب حظر الروبوت.

الخلاصة

يعد إنشاء روبوت Discord باستخدام Python مشروعًا ودودًا يقوم بتدريس البرمجة غير المتزامنة وتكامل واجهة برمجة التطبيقات (API).discord.py تتعامل المكتبة مع الأجزاء الصلبة – يمكنك تحديد أوامر الشرطة المائلة والتضمينات الغنية والأزرار التفاعلية باستخدام أدوات تزيين نظيفة. بمجرد أن يعمل الروبوت الخاص بك محليًا، قم بنشره على خادم VPS صغير باستخدام systemd (أو Railway/Fly.io) بحيث يعمل على مدار الساعة طوال أيام الأسبوع. من هنا، أضف قاعدة بيانات، والمزيد من الأوامر، ومعالجات الأحداث لتطوير الروبوت الخاص بك إلى كل ما يحتاجه مجتمعك.

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা