If one wanted to write a plugin specific to the Review Queue (new users)
Is there a few hints you guys can provide on the getting started side of things?
End goal I want to provide a 3rd option to new users from Delete, Delete and Block I want a 3rd Custom option that will do other things.
I have looked through the getting started with plugins topic and that’s’ all well and good just looking on pointers on how to hook into the Review Queue
This is an interesting use case and I’d like to help you get it working.
Actions for reviewable types are returned from the build_actions method.
What I’d recommend is having your plugin open the ReviewableUser class and alias the build_actions method. In your version, get the actions from the method you aliased, then add your new action to the delete bundle.
That should work, although you might end up with some hacky looking code. I’d suggest once you get it working to post it here and we can see if we can tidy it up, and perhaps add internal APIs to help out improve it further.
أنا أجهز حاليًا طلب دمج (PR) لـ إضافة OAuth الخاصة بـ Discord بهدف تخزين معلومات أكثر عن مستخدمي Discord في Discourse. أحاول استخدام نموذج ReviewableUser الخاص بك للحفاظ على الوظائف التي تنفذ الموافقة الآلية.
نظرًا لأن التنفيذ الحالي يدخل في مراجعة للمستخدمين الجدد بشكل غير متزامن، أحتاج إلى التحقق مما إذا تم إنشاء مثل هذه المراجعة وحذفها.
للأسف، أواجه خطأً غريبًا في Ruby وتساءلت عما إذا كنت قد صادفته من قبل.
الكود هو:
def after_create_account(user, auth)
super
data = auth[:extra_data]
if !user.approved && data[:auto_approve]
user.approved = true
user.approved_by_id = Discourse.system_user.id
if reviewable_user = ReviewableUser.find_by(target: user)
reviewable_user.set_approved_fields!(user, Discourse.system_user)
end
end
end
بمجرد استدعاء ReviewUser.find_by، أحصل على استثناء:
*** NameError Exception: wrong constant name #<Class:0x000056134e417870>::DiscordAuthenticator
رغم أنني اعتقدت أنني أحرز تقدمًا جيدًا في Ruby، إلا أنني غير واضح بشأن سبب حدوث هذا!
هل هي مشكلة في المسار؟ لقد جربت العديد من عمليات الـ requires، لكن ذلك أدى إلى تفاقم المشكلة.
إنها تشبه أنماطًا مشابهة في مكان آخر في الكود الأساسي. أي أفكار من قبلكم تُقدّر كثيرًا!
هذا الخطأ المستمر غير مفيد جدًا، أليس كذلك! أعتقد أنه يتعلق بمحركات Rails ومساحات الأسماء. يمكنك تجربة أمر سريع وهو استخدام ::ReviewableUser مع نقطتين عموديتين قبله. هذا يخبر النظام باستخدام مساحة الأسماء الجذرية وليس داخل المحرك.
يبدو هذا الكود أيضًا قديمًا بعض الشيء بالنسبة لواجهة برمجة التطبيقات الخاصة بـ Reviewable. يجب أن يكون شيئًا مثل هذا:
if !user.approved && data[:auto_approve] && reviewable = ::ReviewableUser.pending.find_by(target: user)
reviewable.perform(:approve, Discourse.system_user)
end
تم حل الخطأ. أفترض أنه بسبب عدم قدرته على العثور على Class من قبل، كان يعامله كـ Constant؟ على أي حال، تم حل المشكلة، رائع، شكرًا جزيلاً! لقد تخلصت من المشكلة!
if user = User.find_by(id: args[:user_id])
return if user.approved?
@reviewable = ReviewableUser.needs_review!(
target: user,
created_by: Discourse.system_user,
reviewable_by_moderator: true,
payload: {
username: user.username,
name: user.name,
email: user.email
}
)
هل هناك خطر من أن المهمة قد تُنفَّذ بعد أن تختبر وجود إدخال المراجعة؟
النتيجة هي أن إدخال المراجعة لا يبدو موجودًا، لكن المهمة في انتظار التنفيذ. ثم تُنفَّذ المهمة وتُنشئ إدخال المراجعة، وقد فوّت الفرصة لحذفه لأن كودك لاختبار ذلك قد نُفِّذ بالفعل.
هل هذه حالة سباق محتملة؟
اجعل approved true قبل التحقق من وجود إدخال المراجعة، وستكون قد حَللت المشكلة (لأنه لن يتم إنشاء مراجعة بعد ذلك نظرًا لأنها شرط مسبق).
لقد واجهت هذه المشكلة أثناء اختبار كودي - عملت على بيئة التطوير، ثم فشلت على الإنتاج لأن الأمور نُفِّذت بترتيب مختلف.
ملاحظة: أقدر أنك لم تكتب هذا لدعم حالة الاستخدام هذه، لكن أعتقد أنه من المهم السماح للإضافات بالموافقة التلقائية على المستخدمين الجدد في ظروف خاصة (مثل إضافة Discord التي تفعل ذلك إذا كان المستخدم عضوًا في نقابة موثوقة).
في الواقع، يتم إنشاء السجل القابل للمراجعة بشكل غير متزامن، وهو ما يشكل مشكلة في هذه الحالة، حيث أن تسجيل الدخول سينشئ المستخدم وقد لا يكون سجل الموافقة موجودًا بعد.
الحل الأفضل هو عدم إنشاء السجل القابل للمراجعة في هذه الحالة، غير أن ذلك سيتطلب تعديلات في النواة (core) ليعمل بشكل صحيح. يمكن أن يعمل الأمر على النحو التالي:
يمكن أن يُرجع نتيجة المصادقة حقلًا مثل skip_approval: true.
في النواة، إذا احتوت نتيجة المصادقة على هذا الحقل، فلن يتم إنشاء السجل القابل للمراجعة، وإذا كانت الموافقة مطلوبة، سيتم تحديث الحقول بشكل صحيح.
في الوقت الحالي، اعتمدت على حلي البديل مع وعي بأن الأمر سيحتاج إلى معالجة قبل إزالة الوصول المباشر إلى واجهة برمجة التطبيقات (API).
هل يوجد لدى الفريق أي رغبة في إعطاء الأولوية لذلك قبل إزالة حق الكتابة المباشر للمستخدم.approve؟
أعتقد أن هذا التغيير سيكسر ميزة الموافقة التلقائية الموثوقة الحالية في إضافة تسجيل الدخول عبر ديسكورد (Auth Discord Login plugin) (حتى بدون طلب السحب الذي قدمته للتو إلى هذه الإضافة). @featheredtoast
سأكون سعيدًا بتحديث طلب السحب الخاص بي لدعم هذا التغيير في حال تم تنفيذه.
وجدت مشكلة صغيرة: نشر شخص ما في تصنيف يتطلب موافقة، لذا ظهر في قائمة المراجعة. لقد نشر في التصنيف الخاطئ، لذا حاولت تغييره من قائمة المراجعة. لم تكن هناك مشكلة باستثناء أن التصنيف الذي أحاول نقله إليه يتطلب وسمًا واحدًا، لكن هذا الوسم مقيد بالتصنيف الجديد، بينما لا يزال المنشور في قائمة المراجعة يعتقد أنه في التصنيف الأصلي الذي لا يسمح بذلك الوسم، فأنا عالق. من السهل الموافقة على المنشور وتغييره لاحقًا، لكن يبدو أن هذا شيء يجب إصلاحه.
نعم، بعد النقر على “حذف المستخدم” في قائمة المراجعة، تمت إضافة عنوان البريد الإلكتروني وعنوان IP إلى القوائم الخاضعة للمراقبة، لكن لم تتم إضافة أي عناوين URL. كان المنشور كالتالي:
هل ترغب في [خدمة الكتابة الأكاديمية](https://myassignmenthelp.com/uk/academic-writing-service.html) عبر الإنترنت لدى مزود خدمة الكتابة الأكاديمية رقم 1 عالميًا Myassignmenthelp.com. نقدم خدمة كتابة أكاديمية احترافية تشكّل مجموعة واسعة للطلاب بأفضل الأسعار.
لهذا السبب سيكون من الجيد إضافتها إلى قائمة المراقبة - حتى لو لم يتم اتخاذ أي إجراء تلقائي على الروابط، فإن ذلك سيسمح لنا برؤية نوع الرسائل المزعجة التي يتم نشرها. ضع في اعتبارك أن المشرفين قد يستخدمون قائمة المراجعة، لكن لا يمكنهم (أعتقد) إضافة كلمات مراقَبة.
بعض الملاحظات البسيطة حول تجربة المستخدم: سيكون رائعًا لو تذكرت قائمة المراجعة إعداداتي. نظرًا لأننا نعمل مع فريق من المشرفين، فأنا مهتم شخصيًا برؤية الأعلام الجديدة وأقوم بالفرز حسب “تاريخ الإنشاء”، لكن هذا الإعداد لا يثبت.
هذه ليست فكرة سيئة. لحسن الحظ، يوجد حاليًا حل بديل: تُحفظ فلاتر البحث في سلسلة الاستعلام (عنوان URL). إذا قمت بإضافة إشارة مرجعية لفلتر معين، يمكنك دائمًا العودة إليه.