انتقل إلى الدليل

الوثائق 9.6.24

تكامل Discord

استخدم التكاملات المتاحة في لوحتك المثبتة.

Webhook#

أنشئ webhook في القناة المقصودة واحفظه في الإعدادات. الرابط والرمز سريان. أرسل اختبارًا مضبوطًا قبل التنبيهات.

الصلاحيات#

امنح الصلاحيات المطلوبة فقط. راجع القناة والرمز ورد المزود عند الفشل. جدّد الرموز المكشوفة وأخفها من السجلات.

افصل بين التكاملات الثلاثة#

الإعدادات ← التكاملات تفصل عنوان webhook ورمز البوت وبيانات OAuth. تخص الإشعارات وهوية البوت وتسجيل الدخول. عمل webhook لا يؤكد جاهزية الأوامر أو OAuth.

احتفظ بعنوان webhook والرمز وسر العميل بسرية. رابط دعوة المجتمع العام مختلف؛ لا تضع webhook سريًا في حقل دعوة الموقع.

تحقق من الإشعارات بطريقة مضبوطة#

اختر قناة مناسبة للفريق وافحص الوصول إليها قبل إرسال بيانات اللاعبين.

  1. أنشئ webhook خاصًا بك وفق الدليل الرسمي واحفظ العنوان كاملًا.
  2. تحقق من العنوان المقطوع والمسافات والقيم القديمة لقناة أخرى.
  3. استخدم اختبارًا متاحًا أو حدثًا طبيعيًا آمنًا؛ لا تحظر لاعبًا ولا تبدأ دفعًا حقيقيًا للاختبار.
  4. راجع القناة والوقت والمحتوى، وابحث عن مرحلة الفشل دون تكرار الحدث باستمرار.

البوت وOAuth والأسرار المنشورة#

امنح البوت الصلاحيات المطلوبة فقط. حفظ رمزه لا يجهز تشغيله أو كل أوامره. احفظ معرّف OAuth وسره منفصلين وطابق عنوان العودة مع تكامل الدخول المثبت.

اختبر الدخول في جلسة منفصلة مع إبقاء جلسة إدارية متاحة. أخبر الدعم بالمسار المحدد والوقت والخطأ دون أسرار.

استبدل القيم المنشورة لدى المزوّد وحدّث اللوحة وأي تثبيت يستخدم القيمة القديمة. تحقق مجددًا من المسار الطبيعي وأخف الأسرار في الصور.

تتبّع الإشعار الغائب من الحدث إلى القناة#

إذا غابت رسالة Discord، تأكد أولًا من حدوث الحدث المتوقع وإعداد التكامل الذي يستخدمه. حفظ عنوان webhook لا يثبت أن كل حدث ينتج إشعارًا. سجّل الخادم أو الموقع ووقت الحدث قبل تغيير بيانات الاعتماد، وقارن سجل اللوحة بتاريخ القناة ضمن الفترة الزمنية نفسها.

إذا ظهر الحدث العادي في اللوحة وغاب عن Discord، افحص القناة المقصودة وعنوان webhook المحفوظ. حذف webhook أو تغيير قناة أو نسخ عنوان ناقص يحتاج تصحيحًا في المرحلة المناسبة. احفظ السياق السابق غير السري حتى يكون التعديل قابلًا للمراجعة. نشاط قناة تخص خادمًا آخر لا يثبت نجاح إشعارك.

إذا وصلت الرسالة إلى قناة غير متوقعة، قيّد الوصول إليها وصحح الوجهة قبل المزيد من الاختبارات. لا تولّد عقوبات متكررة لتشخيص التسليم. قدّم للدعم فئة الحدث والوقت وخطأ بعد إزالة الأسرار، دون عنوان webhook كامل أو بيانات لاعبين خاصة. ثم تحقق بإشعار عادي وآمن بعد التصحيح.

افهم ما يحتفظ به حفظ التكامل#

رمز البوت وOAuth client secret حقلا كلمة مرور سريان. في تنفيذ الإعدادات الحالي، ترك أي منهما فارغًا عند الحفظ يُبقي القيمة المخزنة. لذلك لا يعني الحقل الفارغ الظاهر وحده عدم وجود سر معدّ؛ اقرأ شرح الحقل قبل استبداله. انتبه لهذا السلوك أيضًا عند تعديل حقل تكامل آخر فقط.

عند تدوير بيانات اعتماد، الصق البديل في حقله واحفظ بحساب مخول. لعنوان webhook ومعرّف client ID حقول وسلوك مستقلان. لا تفترض أن الحفظ الفارغ يلغي رمز بوت أو سر OAuth؛ ألغِ البيانات المكشوفة عبر Discord. اذكر الحقل الذي غيّرته لتجنب الخلط بين البيانات الجديدة والقديمة.

دوّن نوع بيانات الاعتماد المتغيرة ووقتها دون القيمة. ثم تحقق من المسار المحدد: تسليم للقناة للـ webhook، وظيفة متاحة للبوت، أو نتيجة دخول فعلية لـ OAuth. نجاح أحد المسارات لا يؤكد الآخرين. عند تجهيز صورة للدعم، افحص أيضًا عنوان المتصفح وبيانات اللاعبين الظاهرة.

شخّص عودة تسجيل Discord بأمان#

ابدأ محاولة دخول جديدة من الموقع الصحيح وأكمل المسار في جلسة المتصفح نفسها. يستخدم OAuth قيمة state لربط الطلب الصادر بالعودة. فتح callback قديم أو خلط محاولات متعددة قد يجعل العودة غير مرتبطة بالجلسة الحالية. سجّل الصفحة التي ظهر الخطأ عند العودة إليها، ولا تفسر فشل الدخول اعتمادًا على نجاح webhook.

إذا ظهر state غير صالح أو خطأ مشابه، سجله وابدأ من مدخل الدخول العادي بدل تحديث callback مرارًا. تحقق من عدم حجب الإعدادات أو الإضافات للكوكيز أو التنقل المطلوب. أبقِ جلسة مسؤول موجودة متاحة أثناء التحقيق، واذكر إن غيّرت الحساب أو الموقع بين المحاولات.

افصل دخول حساب Discord للمنصة عن بيانات التكامل المخصصة المحفوظة لموقع مستأجر. حدّد المسار الفاشل قبل تغيير client ID أو إعادة التوجيه. لا ترسل رابط callback يحتوي رموز تفويض أو state أو بيانات جلسة أو أسرار إلى قناة دعم عامة. الخطأ والوقت ووصف المسار أنسب للفحص الأولي.

راجع محتوى الإشعار حسب حاجة الفريق#

الوصول يؤكد التسليم؛ السياق الواضح للأشخاص الصحيحين فحص مستقل. راجع رسالة عادية من التكامل: هل يميّز الخادم أو الموقع والوقت ونوع الإجراء؟ اقرأ التنسيق الحالي دون افتراض محرر قوالب أو مرشح لا توفره اللوحة.

قيّد القناة للفريق المعني. اخفِ معرّفات اللاعبين والتفاصيل غير اللازمة عند التصدير أو التصوير. الكشف قد لا يحمل السياق كله؛ طابق الوقت بسجل اللوحة. إذا اشتركت عدة خوادم، تحقق من وضوح تسمياتها.

للرسالة المبهمة دوّن النوع والوقت والنص المنقح. وضّح المخرجات مع الدعم دون افتراض وظائف أو معاقبة لاعب للاختبار. الهدف اتفاق الفريق على المورد والحدث دون إفشاء أسرار غير ضروري.

افحص اختيار الحساب ودخول Discord الملغى#

في OAuth افحص حسابًا خاطئًا وإلغاء إذن، لا النجاح فقط. قد يكون Discord آخر مفتوحًا بالمتصفح. اقرأ الهوية بالتفويض وتأكد من المقصود. هذا مسار هوية؛ تغيير قناة webhook لا يصلحه.

إذا ألغى المستخدم أو رفض، سجّل النتيجة وابدأ من المدخل العادي. لا توزّع callback قديمًا بقيم خاصة بالدخول. بعد النجاح تحقق من الحساب وسياق الموقع. توقف قبل إدارة حساب غير متوقع. إنشاء آخر أو شراء خطة لا يثبت الربط.

دوّن المسار والحساب المتوقع والنتيجة والوقت دون token أو client secret أو state أو رمز تفويض. دخول المنصة يختلف عن تكامل موقع مستأجر. تسمية المسار تساعد الدعم دون تغيير بيانات غير مرتبطة.

تحقق من البوت كخدمة مستقلة#

الموقع وwebhook والبوت مكونات منفصلة. يجب أن تتطابق Client ID وGuild ID والبيانات الخاصة مع الموقع وخادم Discord نفسه.

استخدم إصدار LTS مدعوماً من Node.js؛ يتطلب البوت Node 22 LTS على الأقل. تستخدم الخدمة الخاصة المثبتة Node 24.21.0 LTS: /opt/tosun-discord-node/v24.21.0/bin/node. يستخدم المثال الملف التنفيذي نفسه لفحص doctor في ExecStartPre وللتشغيل في ExecStart. شغّل npm ci وdoctor أيضاً مع بيئة التشغيل هذه في PATH. فشل doctor يمنع تسجيل الدخول. لا تفعّل الخدمة قبل استكمال بيانات الاعتماد المطلوبة.

  1. تحقق من معرفات الأدوار والقنوات الرقمية؛ لا تمنح Administrator لكل الفريق.
  2. يثبت المشغل مفاتيح خاصة بالموقع ويرحّل سجل العمليات. يستخدم npm ci ملف القفل؛ يفحص npm run doctor دون دخول Discord.
  3. ترك حقل السر فارغاً يحفظ قيمته؛ الأسرار الجديدة تحتاج مفتاح تشفير الموقع. أعد التشغيل بعد تغيير token/API.

راجع النتيجة غير المؤكدة قبل التكرار#

المهلة لا تثبت فشل العملية. التفاعل المكتمل نفسه لا يكرر التغيير، لكن الأمر الجديد ينشئ معرفاً جديداً.

  1. لا تُعاد processing وunknown لمجرد مرور الوقت. تحقق من النتيجة والمعرف قبل تكرار المال أو العناصر أو الحظر أو أوامر الخادم.
  2. تحتاج Screenshot وlive-watch وsync وdiag جلسة لوحة مصرحاً بها. لا ترسل الرموز أو المفاتيح أو كلمات مرور القاعدة للدعم.

فصل أسرار Discord عن مفاتيح AC#

رمز البوت وعنوان webhook وسر OAuth وترخيص Tosun بيانات مختلفة. تبقى أسرار البوت في إعداد خدمته الخاص أو حقول Discord المصرح بها، وليس في Lua المشترك أو NUI أو ملف خادم AC.

مفاتيح AC مكانها server.cfg أو configs/anticheat_server.lua. رموز الصور والفيديو القصيرة تجيز رفع الأدلة المحدد فقط. جدّد كل سر لدى مزوده وأعد تشغيل الخدمة بصورة مضبوطة. استخدم أمر حالة وقناة اختبار؛ عند نتيجة غير مؤكدة راجع السجل قبل تكرار عمليات المال أو الحظر.

ثبّت بوت Discord كخدمة منفصلة من الحزمة#

يعمل discord-bot على Node.js ولا يبدأ بأمر ensure. أنشئ تطبيقك في Discord Developer Portal واستخدم Application ID وGuild ID ومعرفات الأدوار والقنوات الخاصة بك. احتفظ بالرمز في ملف بيئة خاص.

حساب قاعدة الموقع مقيد افتراضياً بـ localhost لدى المزود. تشغيل البوت على جهاز FiveM آخر لا يفتح الاتصال تلقائياً. استخدم خدمة مُدارة على مضيف الموقع أو اتصالاً خاصاً معتمداً لحساب موقعك وحده. لا تستخدم root للمزود ولا تفتح MySQL للجميع. اختبر الأوامر القديمة التي تستعلم مباشرة عن جداول اللعبة بشكل منفصل.

بصفتك مالك الموقع احفظ token وClient ID وGuild ID في إدارة الموقع → بوت Discord. نزّل الملف الخاص عبر Download private bot setup واحفظه باسم .env في مجلد بوتك. يحتوي مفاتيح الموقع المحدد فقط بخلاف المثال الفارغ في ZIP. لا تشاركه ولا ترفعه إلى مستودع المصدر.

  1. ثبّت إصدار Node.js LTS مدعوماً من 22 فما فوق وجهز أمثلة الإعداد بسكربت التثبيت.
  2. ادع البوت بنطاقي bot وapplications.commands وامنح الصلاحيات المطلوبة فقط.
  3. اضبط قاعدة الموقع وواجهة HTTPS. مفتاح توقيع الأوامر خاص بهذا البوت والموقع؛ ليس ترخيص Tosun ولا مفتاح SaaS الرئيسي.
  4. نفّذ npm run doctor قبل التشغيل. تحقق بعد ذلك من حالة الاتصال والأدوار؛ doctor لا يسجل الدخول إلى Discord.
cd discord-bot
sh setup.sh
# Configure the private .env and site bot settings first.
npm run doctor
npm start