يمكن استدعاء الدوال في حقل المتغيرات (Variables) الخاص بالبلوك أو مباشرة في نص الرد باستخدام #{...}:

#{discord_add_role(message_from, '1465674567090704592')}

معرفات خادم Discord والقناة والدور والرسالة هي قيم رقمية طويلة. أسهل طريقة لنسخها هي تفعيل الإعدادات → المتقدمة → وضع المطور (Settings → Advanced → Developer Mode). بعد ذلك، سيظهر خيار نسخ المعرف (Copy ID) في قائمة السياق لأي كائن.

يتم شرح اتصال البوت في مقالة كيفية إنشاء بوت محادثة في Discord.

أين تحصل على معرف الرسالة

يتم تخزين معرف الرسالة التي قامت بتشغيل البلوك في المتغير discord_message_id. لا تحتاج إلى استرداده بشكل منفصل:

#{discord_delete_message(discord_message_id)}

إذا كنت بحاجة إلى بيانات غير متوفرة في المتغيرات المحددة مسبقًا، فإن webhook الكامل متاح في المتغير discord_webhook. يتم ملؤه عند تعيين أي قيمة للمتغير save_webhook:

data = discord_webhook["data"]

msg_id = data["id"]

result = discord_reply_to_message(msg_id, "هذا رد على الرسالة")

المتغيرات التي يتم إنشاؤها تلقائيًا

يتم ملء هذه المتغيرات تلقائيًا لكل حدث ولا تتطلب أي تكوين إضافي.

المتغير الوصف مثال
guild_id معرف الخادم 1465674567090704591
discord_event نوع الحدث ككلمة واحدة message
discord_message_id معرف الرسالة مع البادئة mid mid1465674569095319625
message_from معرف كاتب الحدث مع البادئة uid uid413984787162726410
from_username اسم مستخدم Discord للكاتب 00rei
from_name اسم العرض للكاتب في الدردشة Rus
username اسم المستخدم للرسائل المباشرة إلى البوت 00rei
is_bot 1 إذا كان كاتب الحدث بوتًا آخر 0
nickname الاسم المستعار في الخادم؛ فارغ إذا لم يتم تعيينه Moderator
roles قائمة بمعرفات أدوار الكاتب ["1465674567090704592"]
is_admin 1 إذا كان المستخدم مسؤولًا أو مالك الخادم 1
reply_from معرف كاتب الرسالة التي يتم الرد عليها uid493121376652230668
reply_from_username اسم مستخدم الكاتب الذي يتم الرد عليه _deikin
reply_from_name اسم العرض للكاتب الذي يتم الرد عليه Rus
reply_to_bot 1 إذا كان الرد موجهًا إلى البوت 0
reply_message_id معرف الرسالة التي يتم الرد عليها mid1534837349219958804
reply_text نص الرسالة التي يتم الرد عليها من في الخدمة اليوم؟

البادئات uid و cid و mid هي جزء من القيمة. قم بتمرير هذه المتغيرات إلى الدوال كما هي؛ لا تحتاج إلى إزالة البادئات.

from_name مقابل from_username

يحتوي from_name على الاسم الذي يجب استخدامه لمخاطبة المستخدم في الدردشة:

  1. الاسم المستعار في الخادم، إذا تم تعيينه.
  2. اسم العرض للحساب.
  3. اسم المستخدم.

هذا هو المتغير الموصى باستخدامه في التحيات لأن from_username قد يبدو مثل _deikin أو 00rei.

يتم ملء المتغيرات reply_* فقط عندما تكون الرسالة الواردة ردًا على رسالة أخرى. بالنسبة للرسائل العادية، يتم مسحها جميعًا.

لذلك، فإن الشرط التالي يميز بشكل موثوق الرد عن الرسالة العادية:

#{reply_from != ''}

تشير المتغيرات nickname و roles و is_admin إلى كاتب الحدث الحالي.

لا يوفر Discord هذه البيانات لأحداث التفاعل، لذلك يجب إجراء فحوصات المسؤول على حدث رسالة أو أمر شرطة مائلة.

يتم تخزين نص الرسالة الواردة في المتغير القياسي question، تمامًا كما في القنوات الأخرى.


الأحداث

بالإضافة إلى الرسائل العادية، يتم أيضًا إرسال أحداث الخدمة إلى المسار (funnel).

يتم تخزين نصها في المتغير question، لذا يمكنك التعامل معها باستخدام شروط النص العادية.

discord_event النص في question متى يحدث
message نص الرسالة يرسل عضو رسالة
message_edit نص الرسالة المحدث يتم تحرير رسالة
interaction /warn @user spam يتم استخدام أمر شرطة مائلة أو النقر على زر
reaction_add new_like ❤️ uid413984787162726410 يتم إضافة تفاعل
reaction_remove reaction_remove ❤️ uid413984787162726410 يتم إزالة تفاعل
message_delete message_delete mid1465674569095319625 يتم حذف رسالة
messages_delete_bulk messages_delete_bulk 12 يتم حذف رسائل متعددة
member_join member_join uid413984787162726410 ينضم عضو إلى الخادم
member_leave member_leave uid413984787162726410 يغادر عضو الخادم
member_update member_update uid413984787162726410 يتغير الاسم المستعار أو أدوار العضو
member_ban member_ban uid413984787162726410 يتم حظر عضو
member_unban member_unban uid413984787162726410 يتم إلغاء حظر عضو

بالنسبة للتفاعل المخصص، يتم استخدام معرف الرموز التعبيرية المخصصة بدلاً من الرمز التعبيري نفسه:

new_like beer:1479419477396291696 uid413984787162726410

راجع قسم التفاعلات للحصول على التفاصيل.

إذا كان يجب أن يتم تشغيل البلوك فقط للرسائل العادية التي يرسلها الأعضاء، أضف الشرط التالي:

discord_event == 'message'

يقوم هذا بتصفية جميع أحداث الخدمة مرة واحدة.

التحقق من نص الحدث فقط غير موثوق لأن العضو يمكنه إرسال رسالة يدويًا مثل member_join.

هام: يتم تشغيل member_update بواسطة أي تحديث للعضو، بما في ذلك دور تم تعيينه بواسطة البوت نفسه. يمكن للبلوك الذي يتفاعل مع member_update ويعين دورًا أن ينشئ حلقة، لذلك يجب دائمًا تقييد هذه الشروط بشكل مناسب.


الرسائل

الدالة الوصف
discord_send_message(channel_id, text) إرسال رسالة إلى أي قناة
discord_send_dm(user_id, text) إرسال رسالة مباشرة إلى عضو
discord_reply_to_message(message_id, text) الرد على رسالة
discord_edit_message(message_id, text) تحرير رسالة أرسلها البوت
discord_delete_message(message_id) حذف رسالة
discord_bulk_delete_messages(channel_id, message_ids) حذف رسائل متعددة مرة واحدة
discord_get_message(channel_id, message_id) استرداد رسالة
discord_pin_message(message_id) تثبيت رسالة
discord_unpin_message(message_id) إلغاء تثبيت رسالة

قيود Discord: لا يوجد حد زمني لتحرير أو حذف رسائلك الخاصة. يعمل الحذف الجماعي فقط للرسائل التي يقل عمرها عن 14 يومًا، ويمكنك حذف ما بين 2 و 100 رسالة في المرة الواحدة.


التفاعلات

الدالة الوصف
discord_send_reaction(message_id, reaction) إضافة تفاعل
discord_delete_reaction(message_id, reaction, user_id) إزالة تفاعل. إذا تم حذف user_id، تتم إزالة تفاعل البوت

تقبل المعلمة reaction إما رمزًا تعبيريًا عاديًا، مثل ❤️، أو معرف رمز تعبيري مخصص للخادم.

أين تحصل على معرف التفاعل المخصص

أضف التفاعل المخصص المطلوب إلى أي رسالة في القناة.

سيظهر رد اتصال مثل هذا في الدردشة:

new_like beer:1479419477396291696 uid413984787162726410

هنا:

beer:1479419477396291696

هو معرف التفاعل.

يمكنك نسخه واستخدامه في دوال التفاعل:

#{discord_send_reaction(discord_message_id, 'beer:1479419477396291696')}

تظهر الرموز التعبيرية العادية في ردود الاتصال كما هي:

new_like ❤️ uid413984787162726410

حيث uid413984787162726410 هو معرف العضو الذي أضاف التفاعل.


الإشراف

الدالة الوصف
discord_timeout_member(user_id, seconds) فرض مهلة على عضو لعدد محدد من الثواني، حتى 28 يومًا
discord_remove_timeout(user_id) إزالة المهلة مبكرًا
discord_kick_member(user_id) طرد عضو من الخادم؛ يمكنه العودة باستخدام دعوة
discord_ban_member(user_id, delete_message_seconds) حظر عضو؛ تحدد الوسيطة الثانية عدد الثواني من سجل الرسائل المراد حذفها، حتى 7 أيام
discord_unban_member(user_id) إلغاء حظر عضو

لا يسمح Discord للبوت بإشراف عضو يكون دوره أعلى من دور البوت. لا يمكن أيضًا إشراف مالك الخادم.


الأدوار والأعضاء

الدالة الوصف
discord_add_role(user_id, role_id) تعيين دور
discord_remove_role(user_id, role_id) إزالة دور
discord_get_roles() الحصول على أدوار الخادم ومعرفاتها
discord_get_member(user_id) الحصول على بيانات العضو، بما في ذلك الاسم المستعار والأدوار وتاريخ الانضمام
discord_set_nickname(user_id, nickname) تغيير الاسم المستعار للعضو في الخادم

يجب أن يكون دور البوت أعلى من الدور الذي يعينه.

لا يمكن تعيين دور @everyone والأدوار التي تديرها التكاملات، بما في ذلك الأدوار التابعة لبوتات أخرى.


القنوات والتذاكر

الدالة الوصف
discord_create_channel(name, type, parent_id, permission_overwrites) إنشاء قناة
discord_delete_channel(channel_id) حذف قناة
discord_set_channel_permission(channel_id, target_id, allow, deny, type) السماح أو منع أذونات القناة
discord_create_invite(channel_id, max_age, max_uses) إنشاء رابط دعوة
discord_get_invites() الحصول على روابط دعوة الخادم

بالنسبة لـ discord_create_channel، يكون type الافتراضي هو:

القيمة نوع القناة
0 قناة نصية
2 قناة صوتية
4 فئة

يمكنك تمرير معرف فئة في parent_id لإنشاء القناة داخل تلك الفئة.

بالنسبة لـ discord_set_channel_permission، تحدد الوسيطة الأخيرة من يتلقى الأذونات:

القيمة الهدف
1 عضو
0 دور

تقبل المعلمتان allow و deny القيم التالية:

القيمة الإذن
1024 عرض القناة
2048 إرسال الرسائل
3072 عرض القناة وإرسال الرسائل
65536 قراءة سجل الرسائل

بالنسبة لـ discord_create_invite، يتم تحديد عمر الدعوة بالثواني.

على سبيل المثال:

86400

يعني 24 ساعة.

قيمة max_uses بقيمة 0 تعني استخدامات غير محدودة.


الأوامر الشرطية المائلة

الدالة الوصف
discord_get_commands() الحصول على الأوامر المسجلة على الخادم
discord_set_commands(commands) استبدال مجموعة الأوامر بأكملها

تقبل discord_set_commands قائمة من الأوامر:

#{discord_set_commands('[
  {
    "name": "rules",
    "description": "عرض قواعد الخادم"
  },
  {
    "name": "warn",
    "description": "إصدار تحذير",
    "options": [
      {
        "type": 6,
        "name": "user",
        "description": "المستخدم",
        "required": true
      },
      {
        "type": 3,
        "name": "reason",
        "description": "السبب",
        "required": false
      }
    ]
  }
]')}

متطلبات Discord

  • يجب أن يحتوي name على أحرف صغيرة فقط، بدون مسافات، ويجب أن يكون طوله بين 1 و 32 حرفًا.
  • description مطلوب ويجب أن يكون طوله بين 1 و 100 حرف.
  • يجب أن تظهر الخيارات المطلوبة قبل الخيارات الاختيارية.
  • تمرير قائمة فارغة يزيل جميع أوامر البوت من الخادم.

أنواع الخيارات

النوع الوصف
3 سلسلة نصية
4 عدد صحيح
5 منطقي
6 عضو
7 قناة
8 دور

عند استدعاء أمر، يتم إرساله إلى المسار كسلسلة نصية مثل:

/warn @user spam

بمعنى آخر، يتم فصل اسم الأمر وقيم الخيارات بمسافات.

يمكنك التعامل معه باستخدام شرط نص عادي.

ليست هناك حاجة لوظيفة منفصلة للأزرار. يتم تكوين الأزرار في كتلة استجابة عادية، ويتم استلام النقر على الزر بنفس طريقة استلام أمر الشرطة المائلة: تظهر قيمة الزر في النص.


النقاط ولوحة المتصدرين

يتضمن تكامل ديسكورد نظام تقدير مدمج. يتم منح النقاط لمؤلف الرسالة المقتبسة.

يمكنك استخدامه لبناء المستويات والرتب ولوحات المتصدرين.

الوظيفة الوصف
discord_add_thanks_score(value) إضافة نقاط لمؤلف الرسالة المقتبسة
discord_add_thanks_score_for_answer(value) إضافة نقاط للعضو الذي رد
discord_minus_thanks_score(value) إزالة النقاط
discord_get_score(user_id) إرجاع نقاط العضو كرقم. بدون وسيطة، يستخدم مؤلف الحدث
discord_get_level(user_id, points_per_level) الحصول على مستوى العضو. الحد الافتراضي: 100 نقطة لكل مستوى
discord_get_user_info(user_id) الحصول على النقاط وموقع لوحة المتصدرين والاسم ككائن واحد
discord_get_top(count, shift, humanize, delimiter) الحصول على لوحة المتصدرين

بالنسبة لـ discord_get_top:

  • count — عدد الصفوف المراد إرجاعها؛
  • shift — عدد الصفوف المراد تخطيها، مفيد للترقيم؛
  • humanize=true — إرجاع نص جاهز للعرض؛
  • delimiter — الفاصل بين اسم العضو والنقاط.

عند مقارنة النقاط في شرط كتلة، استخدم discord_get_score. ترجع هذه الوظيفة رقمًا، لذا تعمل المقارنات الرقمية كما هو متوقع.


أمثلة

الترحيب بعضو جديد عبر رسالة مباشرة

شرط الكتلة:

member_join

في حقل المتغيرات:

discord_send_dm(
    message_from,
    'مرحبًا، #{from_name}! تحقق من القواعد المثبتة.'
)

حذف رسالة تحتوي على كلمة ممنوعة وإيقاف العضو مؤقتًا لمدة 24 ساعة

شرط الكتلة: قائمة بالكلمات الممنوعة.

شرط إضافي:

is_admin != 1

الوظائف:

discord_delete_message(discord_message_id)

discord_timeout_member(message_from, 86400)

تعيين دور لرد فعل على رسالة محددة

شرط الكتلة:

new_like 🍕

شرط إضافي:

contains(discord_message_id, '1534927170965602324')

الوظيفة:

discord_add_role(
    message_from,
    '1465674567090704592'
)

إنشاء قناة تذكرة خاصة من زر

ticket = discord_create_channel(
    'ticket-' + from_username
)

ticket_channel = get(
    get(ticket, 'data'),
    'id'
)

discord_set_channel_permission(
    ticket_channel,
    guild_id,
    None,
    1024,
    0
)

discord_set_channel_permission(
    ticket_channel,
    message_from,
    3072,
    None,
    1
)

discord_send_message(
    ticket_channel,
    'صف مشكلتك في رسالة واحدة.'
)

السطر الأول من الإذن يخفي القناة عن الجميع (guild_id يمثل دور @everyone هنا).

السطر الثاني يجعل القناة متاحة للعضو الذي أنشأ التذكرة.


منح نقاط للشكر وتعيين دور بناءً على المستوى

شرط الكتلة:

thanks;thx;thank you

شرط إضافي:

reply_from != '' and reply_from != message_from and reply_to_bot != 1

الوظائف:

discord_add_thanks_score(1)

if (discord_get_level(reply_from) >= 1) {
    discord_add_role(
        reply_from,
        '1465674567090704592'
    )
}

الشرط:

reply_from != message_from

يمنع الأعضاء من منح النقاط لأنفسهم.

الشرط:

reply_to_bot != 1

يمنع منح النقاط للبوت.


عرض نقاطك باستخدام أمر

شرط الكتلة:

/xp

في حقل المتغيرات:

points = discord_get_score()

lvl = discord_get_level()

نص الاستجابة:

#{from_name}، لديك #{points} XP · المستوى #{lvl}

عرض لوحة المتصدرين باستخدام أمر

شرط الكتلة:

/top

نص الاستجابة:

🏆 لوحة متصدرين XP:

#{discord_get_top(10, 0, true, ' — ')}