مكون إضافي لإشراف المٌشاركين في الموضوع

متابعة للمناقشة من إمكانية عمل المستخدمين كمشرفين على مواضيعهم الخاصة:

تم تطوير هذه الإضافة واختبارها الآن بشكل أساسي.

الميزات

لا أحب حقًا شرح وظائفها، لذلك قررت استخدام الصور لتوضيح ما يمكنها فعله.

المستخدمون

  • تضيف زرًا يظهر مباشرة بعد زر topic-admin-button لمنشئ الموضوع العام.
  • الرسائل الخاصة (PM) غير مدعومة لأنني لا أعتقد أنها ضرورية.
  • يجب على الجميع التقدم بطلب قبل الحصول على صلاحيات الإشراف، ولكن يمكن الموافقة على الطلب تلقائيًا.

  • بعد تقديم الطلب، ستظهر أزرار الإشراف.

إدارة المجموعات

  • يظهر هذا الزر في كل موضوع.
  • الخيارات الموجودة أسفل خط التقسيم ستظهر فقط إذا كان المستخدم من الموظفين.

المسؤولون

ملاحظات هامة

بعد التثبيت، يرجى اتباع التعليمات أدناه قبل تمكين الإضافة

  • قبل تمكين هذه الإضافة، تحتاج إلى إنشاء حساب ليتم استخدامه كـ “بوت مساعد المستخدم”. على الرغم من أن هذه الإضافة يمكنها إنشاء مستخدم بوت تلقائيًا أو استخدام @Discobot الموجود، إلا أنني لا أوصي بذلك، لأن مستخدمي البوت الذين تم إنشاؤهم بواسطة الإضافة لا يمكن تعديلهم في لوحة الإدارة. يمكنك منحه أي صلاحيات تريدها، لأنه في الواقع، تم كتابة الكود ذي الصلة خصيصًا لجعل البوت يتصرف دائمًا كمسؤول، ولكن أقترح أنه من الأفضل منحه صلاحيات المسؤول أو المشرف. أثناء التطوير، تحدث أحيانًا أخطاء غير معروفة لا يمكنني إعادة إنتاجها بثبات بسبب هذا السبب.

  • بعد ذلك، تحتاج إلى إنشاء موضوع، يمكن أن يكون رسالة خاصة أو موضوعًا عامًا. املأ topic_id الخاص به في SiteSetting.topic_op_admin_logger_topic. إذا تم تشغيل topic_op_admin_enable_topic_log، فسيقوم البوت المذكور أعلاه بإنشاء منشورات سجل أكثر تفصيلاً داخل الموضوع.

  • بعد إنشاء روبوت مساعد المستخدم، قم بتدوين معرف المستخدم الخاص به، ثم قم بملئه في SiteSetting.topic_op_admin_bot_user_id أعلاه.

  • قد يتسبب فتح إعدادات معينة دون اتباع الخطوات المذكورة أعلاه بشكل صحيح في حدوث أخطاء أو حتى تعطل موقعك.

18 إعجابًا

هل فكرت في معرفة ما إذا كان يمكنك ربط الروبوت بمجموعة تعديل الفئة؟ بصفتي مشرفًا/مسؤولًا كاملاً، أعتقد أنه قد يكون محفوفًا بالمخاطر.

هناك عدد قليل من الإضافات التي تم وضع علامة تجريبية عليها في فئة الإضافات حتى تم اعتبارها خارج مرحلة التطوير مثل “من متصل الآن”.

ربما يمكن لـ @Canapin إلقاء نظرة على الفئة ومناقشتها معك.

عمل رائع، بالتوفيق في التطوير!

أتساءل عما إذا كان يجب أن يكون لدينا علامتي “Alpha” و “Beta” في #plugin؟ :thinking:

سيؤدي ذلك إلى تسهيل العثور على المكونات الإضافية الجديدة ويعكس أيضًا المخاطر التي قد تتحملها عند تثبيتها …

3 إعجابات

الإضافات هي أكواد تعمل جنبًا إلى جنب مع Discourse. لا توجد مشكلة في أن يكون لدى البوت أي أذونات، من المسؤول إلى TL0، لأنه في الواقع مجرد كائن عمليات برمجية، ولديه أذونات غير محدودة.

في الواقع، لقد انتهيت الآن من تطوير هذا الجزء من الإضافة. لكنني سأكون حذرًا بشأن نشر هذه الإضافة في Plugin نظرًا للعواقب الكارثية إذا حدث خطأ ما في إضافة (بدلاً من مكون سمة).

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

3 إعجابات

تم تطوير هذا المكون الإضافي واختباره بشكل أساسي. الآن يمكنك تثبيته بثقة!
(ولكن اتبع الخطوات المكتوبة أعلاه:

5 إعجابات

@Lhc_fl يبدو هذا مفيدًا للغاية، ولكنه يسمح لصاحب الموضوع الأصلي بالنشر في موضوعه الخاص أثناء إغلاقه، كما يمكن للمشرف أو المسؤول القيام بذلك؟ بالنسبة لنا، يبدو هذا تدفقًا أفضل بكثير من جعله يفتح الموضوع، وينشر، ثم يعيد إغلاقه.

إعجاب واحد (1)

أخطط لإضافة هذه الميزة - لكنني كنت مشغولاً مؤخرًا وليس لدي الكثير من الوقت للنظر في المكون الإضافي الخاص بي. يمكن لأي شخص مهتم تقديم طلب سحب

إعجابَين (2)

@Lhc_fl
هذه إضافة لطيفة،

  • هل من الممكن جعل هذا مكون سمة؟ سيتمكن المزيد من الأشخاص من استخدامه،
    ليس لدينا إذن لتثبيت الإضافات على المثيل، ولكن يمكننا تثبيت مكون سمة.

  • هل يمكن إضافة “تقسيم ودمج المواضيع” إلى قائمة الأذونات؟
    شكرا…

لا، هذا مستحيل لأنه يحتاج إلى التفاعل مع قاعدة البيانات.

ربما، لكن الأمر أكثر صعوبة. ليس لدي الطاقة لإضافة ميزات جديدة إليه مؤخرًا.

3 إعجابات

أعتذر لأن هذه الإضافة غير متوافقة مع الإصدار الجديد من discourse بسبب ترقية ember.js، لكنني مشغول جدًا الآن لإصلاحها. إذا كان أي شخص على استعداد لإصلاحها، فيرجى تقديم طلب سحب (PR) على Github.

3 إعجابات

لقد قمت بترقية هذه الإضافة اليوم للتكيف مع الإصدار الجديد من discourse. الآن لم تعد الإضافة #معطلة

9 إعجابات

لقد قمت بتفعيل “User autonomy plugin enabled”، ولكن هناك خطأ بعد إرسال الطلب

هذا هو السجل في طرفية المتصفح


chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:393
SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON
    at D.parse [as parseJSON] (<anonymous>)
    at l (chunk.7b3110aa5b5be8…1d8cd9.js:393:63167)
    at p (chunk.7b3110aa5b5be8…1d8cd9.js:393:63847)
    at k (chunk.7b3110aa5b5be8…41d8cd9.js:308:3688)
    at w (chunk.7b3110aa5b5be8…41d8cd9.js:308:3581)
    at f (chunk.7b3110aa5b5be8…41d8cd9.js:308:3077)
    at invoke (chunk.7b3110aa5b5be8…41d8cd9.js:121:10063)
    at m.flush (chunk.7b3110aa5b5be8…41d8cd9.js:121:9140)
    at g.flush (chunk.7b3110aa5b5be8…41d8cd9.js:121:11012)
    at q._end (chunk.7b3110aa5b5be8…41d8cd9.js:121:16062)
    at q.end (chunk.7b3110aa5b5be8…41d8cd9.js:121:13189)
    at q._run (chunk.7b3110aa5b5be8…41d8cd9.js:121:16576)
    at q.run (chunk.7b3110aa5b5be8…41d8cd9.js:121:13722)
    at c (chunk.7b3110aa5b5be8…41d8cd9.js:161:53419)
    at t.error (chunk.7b3110aa5b5be8…41d8cd9.js:302:131483)
    at l (chunk.7b3110aa5b5be8…41d8cd9.js:191:58317)
    at Object.fireWith [as rejectWith] (chunk.7b3110aa5b5be8…41d8cd9.js:191:59062)
    at C (chunk.7b3110aa5b5be8…41d8cd9.js:194:5783)
    at XMLHttpRequest.<anonymous> (chunk.7b3110aa5b5be8…41d8cd9.js:194:8211)
l	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:393
p	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:393
k	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:308
w	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:308
f	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:308
invoke	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
flush	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
flush	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
_end	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
end	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
_run	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
run	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
c	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:161
t.error	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:302
l	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:191
fireWith	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:191
C	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:194
(anonymous)	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:194
XMLHttpRequest.send		
send	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:194
ajax	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:194
o	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:302
(anonymous)	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:308
e	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:308
D	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:302
submit	@	request-op-admin-form.js:106
(anonymous)	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:421
invoke	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
flush	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
flush	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
_end	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
end	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
_runExpiredTimers	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
setTimeout		
setTimeout	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
_installTimerTimeout	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
_reinstallTimerTimeout	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
_later	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
later	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:121
T	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:161
_triggerAction	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:421
click	@	chunk.7b3110aa5b5be8…8f9.d41d8cd9.js:421