دعوات الشارات لدعوة نفسك

الوصف والأدلة

مؤخرًا في 2.9.0beta2 يمكن للمستخدمين الذين لديهم حساب بالفعل النقر على روابط الدعوة. ولكن عندما أنشأت روابط دعوة ونقرت عليها، ظهر لي أنني دعوت نفسي، وبما أنني في المستوى TL2+ ونقرت على 5 روابط دعوة مختلفة، فقد حصلت على شارة Champion. يمكنك رؤية لقطة شاشة لذلك أدناه. هذه في منتديات Replit EDU ويمكنك عرض ملفي الشخصي هنا.

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

خطوات إعادة الإنتاج

الوصول إلى المستوى TL2+ (بشكل افتراضي)، وإنشاء روابط دعوة ثم النقر عليها. سيظهر أنك دعوت نفسك في ملفك الشخصي وأنك قبلت دعوتك كما هو موضح أعلاه. وإذا كان لديك ما يكفي من روابط الدعوة، فستحصل على شارات Campaigner و Champion.

4 إعجابات

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

6 إعجابات

ويجب أن تتلقى شارة المروج. (نسيت ذكرها في المنشور الأصلي لأنني كنت أملكها بالفعل قبل ذلك)

إعجابَين (2)

شكراً على لفت انتباهي لهذا الأمر! عند تصميم هذه الميزة، نسيت أن أفكر كشخص شرير. :supervillain:

@dan هل لديك أي أفكار حول كيفية إصلاح هذه المشكلة؟

6 إعجابات

لم أنظر شخصيًا إلى كود discourse ولكن شيئًا كهذا قد يعمل. (هذا مكتوب بلغة JS لأنها ما أعرفها جيدًا)

if (invter != invitee) {
  inviter_count++
}
3 إعجابات

تم إصلاح هذه المشكلة الآن. شكرًا مرة أخرى @not-ethan للإبلاغ عنها! إذا لاحظت أي شيء خاطئ على الإطلاق في نظام الدعوات، فيرجى إخبارنا بذلك. نحن نعمل عليه بنشاط.

5 إعجابات

إعادة فتح الموضوع لأنني فقدت تتبع رسالة خاصة من @not-ethan. @dan إذا لم يكن الأمر مزعجًا، هل تمانع في المساعدة؟

هل يمكنني الحصول على رابط لـ commit أو PR للإصلاح؟ أنا فقط فضولي بشأن ما كان الإصلاح

5 إعجابات

@tobiaseigen @dan أعتقد أنني وجدت طلب السحب FIX: Do not increase invite count for current user by udan11 · Pull Request #15952 · discourse/discourse · GitHub

4 إعجابات

تم إعادة فتحه بناءً على طلب @not-ethan. هل حدث تراجع بطريقة ما؟

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

بعد بعض الاختبارات الإضافية، أواجه هذه المشكلة فقط على Replit Ask:


ولكن ليس على meta هنا أو على منتدى آخر، كل ما يقوله هو أن Ethan accepted your invitation ولكنه لا يمنح الشارات.

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

لا بأس، لقد حصلت للتو على الشارات هنا في ميتا وفي المنتدى الآخر. استغرق الأمر حوالي 12 ساعة.

3 إعجابات

يمكن التأكيد.

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

يا جماعة،
هناك خطأ يمكنك من خلاله إنشاء رمز دعوة واسترداده بنفسك، وبهذه الطريقة يمكنك الحصول على شارات الدعوة، وهو أمر مزعج. ذكر هذا @not-ethan وتم تقديم طلب سحب، لكن الخطأ لا يزال نشطًا. كانت فكرتي هي أنه إذا استخدم شخص ما رمز دعوة للويب، ولكن هذا الشخص مسجل دخوله، فاجعل الرمز يفشل!

إعجابَين (2)

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

هل هناك أي طريقة يمكننا من خلالها تجاوز هذه المشكلة عن طريق تغيير كيفية منح الشارة؟ على سبيل المثال، إذا كان الشخص الذي يسترد الدعوة عضواً بالفعل، فلا تمنح شارة الحملة للشخص الذي أنشأ الدعوة؟

يبدو لي أن هذه مشكلة قد تكون موجودة منذ فترة طويلة دون أن يلاحظها أحد. قد يكون هناك حل آخر وهو التعامل مع هذا على أنه “لا تفعل شيئاً، يعمل حسب التصميم” وترك الأمر لمشرفي المجتمع لمعالجته إذا كانوا قلقين بشأن قيام الأشخاص بإساءة استخدام هذه الطريقة للحصول على المزيد من الشارات.

4 إعجابات

ربما يحتاج استعلام SQL الخاص بي إلى التحقق :slightly_smiling_face:، لكنني أعتقد أنه يمكنك إضافة هذا السطر إلى استعلام الشارة لمنع منحه للأشخاص الذين دعوا أنفسهم - AND i.invited_by_id <> u2.id

لذا شيء مثل هذا:

SELECT u.id user_id, current_timestamp granted_at 
FROM users u 
WHERE u.id IN (
  SELECT invited_by_id 
  FROM invites i 
  JOIN invited_users iu ON iu.invite_id = i.id 
  JOIN users u2 ON u2.id = iu.user_id 
  WHERE i.deleted_at IS NULL
  AND i.invited_by_id <> u2.id
  AND u2.active 
  AND u2.trust_level >= 0 
  AND u2.silenced_till IS NULL 
  GROUP BY invited_by_id 
  HAVING COUNT(*) >= 1 
) AND u.active AND u.silenced_till IS NULL AND u.id > 0 AND
(:backfill OR u.id IN (:user_ids) ) 	
4 إعجابات

رائع! لم ألعب بنظام الشارات منذ فترة، ولكن عند النظر الآن لا أرى الشارات المتعلقة بالدعوات في واجهة المستخدم الخاصة بالشارات في لوحة التحكم. ربما تكون هذه شارات نظام يجب تعديلها في جوهر Discourse؟

إعجابَين (2)