تعديل المنشورات يتسبب في إرسال إشعارات

Hello,

I have been updated some featured/pinned topics and they seem to be sending out updates every time that I update them. Is there a way to disable this? “Watch first Post” shouldn’t trigger if the post is just slightly edited as far as I can tell?

Thanks!

What you’re describing is not really possible.

What do you mean by “I have been updated”? What exactly did you do, step by step? Describe it in detail? Your question is unanswerable until you provide this information.

Edits don’t alert anyone in Discourse… ever, that I can think of. You will be notified if someone else edits your post by default, using the typical Discourse notifications.

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

Edits notify the original author. I get notifications when @codinghorror fixes my posts with alarming frequency. (I don’t think it’s what this person is describing, but it is edits giving notifications)

Edit: oops

As I said above, already…

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

Sorry fort he lack of clarity.
For some reason, editing a post that I created would notify other users of the edit. It appears that it occurred in topics that used the tagging of a group and that group would be notified (even if the tag was not a new one).

  1. Create a post with multiple tags of groups of members
  2. Let it propagate and send notifications. Wait whatever number of minutes is needed for it to send out to any current watch lists/etc.
  3. Come back to the post and edit it.
  4. Add something useless, like the word unicorn and note that the right hand side of the edit window alerts that you will notify the groups in the post despite not having added or edited anything to do with those tags.
  5. Save
  6. Check the logs and note that all members in those groups are now notified of the edit (though the notifications appear as a New Topic notification.
3 إعجابات

Interesting so this is specific to group mentions? Perhaps you can try to repro this when you have time @jomaxro

It appears to be on my end at least.

I have not been able to repro this. I tested it on try, with 3 users. In one post I mentioned all of them individually, in the other I mentioned a group all 3 were in. They all received the initial mention notification, they did not receive further notifications on edit.




I’m unsure about the type of notification here. Are you referring to a notification that appears on your user profile, i.e., as an extra entry in the list that appears when you click on your avatar up right?

Or is it a small blue dot next to the topic title in the topic list?

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

ألاحظ هذا السلوك في أحد مواقعنا.

عند تعديل منشور يذكر مجموعة، أحصل على التحذير التالي:

كما يمكنني تأكيد أن الأشخاص في تلك المجموعة يتلقون إشعارًا جديدًا عند حفظ التعديل.

إعجابَين (2)

هل يمكننا إعادة إنتاج هذه المشكلة @tshenry؟

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

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

اختبرت سيناريوهين:

  1. إذا قمت بـ “تعديل خفي” لمنشور ذكر بالفعل مجموعة، فستظهر تحذير أثناء التعديل، لكن لن يُرسل إشعار بعد إتمام التعديل الخفي.
  2. إذا قمت بتعديل خارج فترة السماح للتعديل، فستظهر تحذير أثناء التعديل، لكن لن يُرسل إشعار جديد إلى المجموعة.

هل يمكنك المساعدة في تقديم أي خطوات إضافية لإعادة إنتاج المشكلة؟


كإضافة جانبية، أرى أنه قد يكون من المفيد وجود تبديل يتحكم في ما إذا كان الذكر يُفعّل إشعارًا على مستوى المنشور. سيوفر ذلك تحكمًا أكبر في سيناريوهات التعديل، وكذلك عندما تريد فقط تضمين رابط سحري لبطاقة المستخدم/الملف الشخصي في المنشور ليستفيد منه مستخدمون آخرون.

إعجابَين (2)

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

سأحاول تكرار المشكلة في بيئة التطوير الخاصة بي اليوم وأبلغك إذا نجحت.

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

تم حل المشكلة…

يتم إرسال الإشعار إلى المستخدمين الذين انضموا إلى المجموعة بعد إنشاء المنشور الأصلي.

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

لكن الأشخاص الذين كانوا في المجموعة من البداية (وقد تلقوا إشعار الإشارة الأصلي) لا يتلقون إشعارًا إضافيًا من التعديل.

خطوات إعادة الإنتاج (تتطلب مستخدمين اثنين)

  1. إنشاء مجموعة جديدة
  2. إنشاء منشور أو موضوع جديد يذكر هذه المجموعة
  3. إنشاء مستخدم جديد
  4. إضافة هذا المستخدم إلى المجموعة
  5. تعديل المنشور – في هذه النقطة، سيستلم المستخدم الجديد إشعارًا.
  6. تعديل المنشور مرة أخرى – لن يستلم المستخدم الجديد إشعارات إضافية للتعديلات اللاحقة.

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

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

هل من الممكن ربط رسالة التحذير هذه بعدد الأشخاص الذين لم يتم إشعارهم سابقًا بهذا المنشور (لحساب عدد دقيق للأشخاص الذين سيتم إشعارهم)؟

4 إعجابات

آه، شكرًا لك! أرى بالتأكيد نفس السلوك.

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

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

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

أفكر في أننا يمكن أن نضيف ببساطة بعض المنطق الشرطي بناءً على وجود سجل في جدول group_mentions. نقوم بإنشاء سجل في وقت حفظ المنشور.

ما رأيك @codinghorror؟

إعجابَين (2)

أتابع النقاش، لكن هل يجب حقًا اعتبار هذه مشكلة نرغب في إصلاحها؟

إذا قمنا بقمع جميع إشعارات @group تمامًا عند التعديل، فإن تعديل مجموعة @group جديدة لن يولّد إشعارًا بـ"ذكر"، وهو ما يمثل تغييرًا كبيرًا في طريقة عمل الإشعارات سابقًا وقد يكون مفاجئًا جدًا.

وإذا بدأنا في التعقيد والإشعار فقط للمجموعات الجديدة عند التعديل، فسنتعثر في كود معقد يجب أن يتفحص الاختلافات (diffs) ويتطلب الكثير من العمليات الإضافية.

لا أستطيع حاليًا التفكير في أي حل سهل هنا.

4 إعجابات

لذا، تخيل مشاركة تحتوي على ثلاث إشارات مختلفة إلى مجموعات. يتم تعديلها ويتم إضافة إشارة رابعة.

عند حفظ التعديل، يمكننا استخدام استعلام مثل هذا لإيجاد القائمة الحالية لإشارات المجموعات لتلك المشاركة.

-- [المعلمات]
-- النص :post_id

select gm.group_id, g.name
from group_mentions gm
join groups g on (gm.group_id = g.id)
where post_id = :post_id

ثم، بمقارنة نتائج الاستعلام مع قائمة المجموعات التي يتم الإشارة إليها في المشاركة، يمكننا العثور على الإشارة (الإشارات) الجديدة.

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

بشأن لافتة JIT المتعلقة بإشعار المجموعة (المجموعات)، ربما يمكن تعريض هذا المنطق عبر نقطة نهاية واجهة برمجة التطبيقات (/post/<id>/mentions.json) للحصول على هذه البيانات بشكل غير متزامن.

أليس من الأبسط إنشاء منشور جديد وإشعار الناس بهذه الطريقة؟ أنا خائف قليلاً من بناء برج ضخم من التعقيد هنا لدعم حالة هامشية إلى حد ما.

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

لا أريد جعل أي شيء معقدًا جدًا.

كنت أطلع على بعض الكود الخاص بهذا (شكرًا @tshenry على الرابط)، ويبدو أنه لا يحتاج إلى أن يكون معقدًا بهذه الدرجة.

يتم حاليًا تفعيل الإشارات إلى المجموعات هنا (السطور 78-80). دالة expand_group_mentions() هي مولّد مسؤول عن إخراج المستخدمين الذين يجب أن يتلقوا إشعارات الإشارة إلى المجموعة (مع احترام سياسات مثل SiteSetting.max_users_notified_per_group_mention).

يبدو هذا مكانًا طبيعيًا لوضع هذا المنطق.

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

أقترح شيئًا مشابهًا، من خلال تحديث دالة expand_group_mentions() لتصفية المجموعات التي لديها سجل في جدول group_mentions أيضًا.

شيء من هذا القبيل (أرجو أن تعذروني على قلة معرفتي بتركيب لغة Ruby):

  def expand_group_mentions(groups, post)
    return unless post.user && groups

    Group.mentionable(post.user, include_public: false).where(id: groups.map(&:id)).each do |group|
      next if group.user_count >= SiteSetting.max_users_notified_per_group_mention

      # إضافة تحقق للمجموعات التي تم الإشارة إليها بالفعل
      next if GroupMentions.where(group_id: group.id, post_id: post.id).length > 0

      yield group, group.users
    end

  end

هذا لا يفعل شيئًا بشأن تحذير JIT.

أحاول المساعدة في حل هذه المشكلة، فأخبروني إذا كنتُ فقط مُزعجًا… :slight_smile:

إعجابَين (2)

كنت على وشك نشر سؤال دعم جديد، لكنني وجدت هذا الموضوع.

يبدو أنه ذو صلة.

إذا نشرت رسالة وأدركت أنه كان يجب أن أبلغ بعض الأشخاص الذين لم أفعل ذلك، فما هو أفضل خيار لي؟

  1. تعديل المنشور وذكر مجموعة معينة أو عدة أشخاص باستخدام @؟

  2. إنشاء رسالة جديدة لتنبيههم باستخدام @؟ في هذه الحالة، سأضطر إلى تكرار الكثير من المعلومات - أو إضافة رابط إلى المنشور الأصلي.

الخيار الأول هو الطريقة المفضلة لدي (الأكثر نظافة) إذا كان ذلك ممكنًا؟

هل يمكن لأي شخص التأكيد - هل يؤدي ذكر الأفراد/المجموعات باستخدام @ عند التعديل إلى تنبيههم إذا لم يكونوا قد تم تنبيههم بالفعل؟ إذا لم يكن الأمر كذلك، فقد يكون ذلك مفيدًا إذا لم يكن صعب التنفيذ؟

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

سأستخدم هذا التعديل لاختبار ما إذا كنت سأستلم إشعارًا @Rhidian @codinghorror

يبدو أن الأمر لم يحدث :confused:

إعجابَين (2)