بناءبوت الديسكورد هو مشروع بايثون ممتع وعملي يعلم البرمجة غير المتزامنة وواجهات برمجة التطبيقات والتعامل مع الأحداث. في عام 2026،discord.py يجعلها واضحة. ينشئ هذا الدليل روبوتًا وظيفيًا بأوامر شرطة مائلة وعناصر مضمنة وأزرار تفاعلية، ثم ينشره.
📋 Table of Contents
الخطوة 1: إنشاء تطبيق Discord
- انتقل إلى بوابة مطور Discord (discord.com/developers)
- انقرتطبيق جديد، قم بتسمية الروبوت الخاص بك
- اذهب إلىبوت القسم، انقر فوقإضافة بوت
- انسخالرمز (ابقِ الأمر سرًا – لا ترتكبه أبدًا)
- تمكيننية محتوى الرسالة ضمن نوايا البوابة المميزة
- تحت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) بحيث يعمل على مدار الساعة طوال أيام الأسبوع. من هنا، أضف قاعدة بيانات، والمزيد من الأوامر، ومعالجات الأحداث لتطوير الروبوت الخاص بك إلى كل ما يحتاجه مجتمعك.
🔗 Share this article
✍️ Leave a Comment