Editing posts cause notification

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.

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..

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.

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?

저희 사이트 중 하나에서 이 동작을 관찰하고 있습니다.

그룹을 언급하는 게시물을 편집하면 다음 경고가 표시됩니다:

또한 편집 내용을 저장하면 해당 그룹의 구성원들에게 새 알림이 전송되는 것도 확인했습니다.

@tshen 님, 이 문제를 재현할 수 있을까요?

음 @Grayden_Shand 게시글이 수정되기 전에 이미 해당 그룹이 언급되어 있었다고 가정하고 있습니다. 수정을 통해 게시글에 새로운 멘션을 추가하면 해당 사용자/그룹에게 알림이 전송된다는 점은 알고 있습니다.

두 가지 시나리오를 테스트해 보았습니다:

  1. 이미 그룹이 언급된 게시글에 '닌자 편집’을 수행하면 편집 중 경고가 표시되지만, 닌자 편집이 완료된 후 알림은 전송되지 않습니다.
  2. 편집 유예 기간이 지난 후에 편집을 수행하면 편집 중 경고가 표시되지만, 그룹에 새로운 알림은 전송되지 않습니다.

추가적인 재현 단계를 알려주실 수 있을까요?


참고로, 게시글 수준에서 멘션이 알림을 트리거하는지 여부를 제어할 수 있는 토글이 있으면 도움이 될 것 같다는 생각이 듭니다. 이는 편집 시나리오에서 더 많은 제어권을 제공하며, 단순히 다른 사용자가 활용할 수 있는 마법 사용자 카드/프로필 링크를 게시글에 포함시키고 싶을 때에도 유용할 것입니다.

네, 편집되기 전에 이미 게시글에 그룹 언급이 포함되어 있었습니다. 또한, 편집을 한 사용자는 해당 토픽의 소유자와 다른 사용자였습니다.

오늘 개발 환경에서 재현을 시도해 보고 성공하면 보고드리겠습니다.

찾아냈습니다…

알림은 게시물이 처음 생성된 이후에 그룹에 가입한 사용자에게 전송되고 있습니다.

즉, 알림을 받는 사용자들에게는 그들이 멘션 알림을 받은 것이 처음이지만, 누군가가 해당 알림을 받은 것이 처음이라는 뜻은 아닙니다.

반면에 처음부터 그룹에 belonged 있던 사용자들(원래 멘션 알림을 받은 사용자들)은 수정으로 인해 추가 알림을 받지 않습니다.

재현 방법 (사용자 2명 필요)

  1. 새 그룹 생성
  2. 해당 그룹을 멘션하는 새 게시물 또는 주제 생성
  3. 새 사용자 생성
  4. 해당 사용자를 그룹에 추가
  5. 게시물 수정 – 이 시점에서 새 사용자에게 알림이 전송됩니다.
  6. 게시물을 다시 수정 – 새 사용자는 추가 수정에 대해 추가 알림을 받지 않습니다.

여기서 올바른 동작이 무엇인지 확실하지 않습니다.. 수정 시 멘션 알림을 아예 보내지 않는 쪽으로 기울고 싶지만, 구현이 얼마나 복잡한지 모르겠습니다.

또 다른 참고 사항 – 실제로 알림을 받는 사람이 있든 없든, 수정을 수행할 때 "그룹의 X명에게 알림을 보내려 합니다"라는 메시지가 표시됩니다.

이 경고 메시지를 이전에 이 게시물에 대해 알림을 받지 않은 사람의 수와 연결하여(알림을 받을 사람의 정확한 수를 계산하기 위해) 표시할 수 있을까요?

아하, 알려주셔서 감사합니다! 저도 확실히 동일한 동작을 확인했습니다.

게시글 수정을 통해 멘션 알림을 보내는 기능은 저와 다른 사용자들도 가끔씩 사용하는 중요한 기능이므로 이 기능은 유지되어야 하지만, 현재 그룹과의 연동 방식은 어색하게 느껴집니다.

제 현재 의견은 게시글당 그룹 알림을 한 번만 보내야 한다는 것입니다. 처음 그룹 멘션이 이루어진 이후에 그룹에 추가된 사용자는 이후의 게시글 수정으로 인해 그룹 멘션 알림을 받지 않아야 합니다. 게시글이 마지막으로 저장된 이후로 새로운 그룹 멘션이 없다면 게시글 편집 중 그룹 알림에 대한 JIT 교육 배너는 표시되지 않아야 합니다.

이전에 멘션되지 않았던 그룹이 수정 과정에서 멘션되면, 해당 그룹에는 알림이 전송되어야 합니다. 이는 사용자 멘션의 동작 방식과 동일합니다. 새롭게 멘션된 그룹이 있다면 관련 교육 배너도 표시되어야 합니다.

group_mentions 테이블에 레코드가 존재하는지에 기반한 조건 분기 로직을 추가하면 될 것 같습니다. 우리는 게시글 저장 시점에 레코드를 생성합니다.

@codinghorror님, 어떻게 생각하시나요?

이해는 합니다만, 정말 이 문제를 수정해야 할 버그로 봐야 할까요?

편집 시 모든 @group 알림을 완전히 억제하면, 새 @group을 편집해도 멘션 알림이 전혀 발생하지 않게 됩니다. 이는 과거 알림 동작 방식과 매우 큰 차이가 나며, 사용자 입장에서 상당히 의외의 상황이 될 수 있습니다.

반면, 편집 시 새 @group에만 알림을 보내는 방식으로 정교하게 처리하려면 diff를 순회해야 하고, 많은 추가 관리 로직이 필요해 복잡한 코드가 됩니다.

솔직히 여기서 쉬운 해결책을 전혀 떠올리지 못하겠습니다.

예를 들어, 3개의 다른 그룹이 언급된 게시물이 있다고 가정해 보겠습니다. 이 게시물이 수정되어 4번째 언급이 추가되었습니다.

수정을 저장할 때, 이 쿼리를 사용하여 해당 게시물의 현재 그룹 언급 목록을 찾을 수 있습니다.

-- [params]
-- text :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 배너와 관련하여, 이 로직을 API 엔드포인트(/post/<id>/mentions.json)로 노출하여 이 데이터를 비동기적으로 가져올 수 있도록 하는 것이 가능할 것입니다.

새로운 게시물을 만들고 그 방식으로 사람들에게 알리는 것이 더 간단하지 않을까요? 꽤 제한적인 엣지 케이스를 지원하기 위해 여기에서 거대한 복잡성의 탑을 쌓는 것이 조금 두렵습니다.

너무 복잡한 걸 만들고 싶진 않습니다.

이와 관련된 코드를 몇 가지 살펴봤는데(@tshenry 님, 링크 감사합니다), 그렇게까지 복잡할 필요는 없어 보입니다.

현재 그룹 멘션은 여기(L78-80)에서 트리거되고 있습니다. expand_group_mentions() 함수는 그룹 멘션 알림을 받아야 할 사용자를 출력하는 생성기(generator) 역할을 하며(SiteSetting.max_users_notified_per_group_mention와 같은 정책을 준수하면서) 수행됩니다.

이곳이 해당 로직을 넣기에 자연스러운 위치로 보입니다.

create_notification 함수에서 이미 동일한 유형의 알림을 받은 사용자에게는 알림을 억제(suppress)합니다. 이것이 그룹 멘션이 포함된 게시물을 편집할 때 새로운 그룹 멤버에게 알림이 트리거되는 이유입니다. 실제로는 그룹 내 모든 사용자에게 알림이 생성되지만, 이미 알림을 받은 사람들에게는 억제되는 것입니다.

저는 expand_group_mentions() 함수를 업데이트하여 group_mentions 테이블에 기록이 있는 그룹도 필터링하도록 하는 유사한 방식을 제안합니다.

다음과 같은 형태일 것입니다(루비 문법에 대한 제 무지를 양해해 주세요)

  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:

새로운 지원 질문을 올리려다가 이 주제를 발견했습니다.

관련이 있는 것 같습니다.

메시지를 게시한 후, 통보해야 할 사람들을 누락했음을 알게 되면 가장 좋은 방법은 무엇일까요?

  1. 게시물을 편집하여 특정 그룹이나 여러 사람을 @로 언급하는 것?

  2. 그들에게 @로 통보하기 위해 새 메시지를 작성하는 것? 그러면 많은 정보를 반복해야 하거나, 원본 게시물에 대한 링크를 추가해야 합니다.

가능하다면 옵션 1(더 깔끔한 방법)이 더 좋습니다.

누군가 확인해 주실 수 있을까요? 편집 시 개인/그룹을 구체적으로 @로 언급하면, 아직 통보를 받지 않은 사람들에게 알림이 전송되나요? 만약 그렇지 않다면, 구현이 너무 어렵지 않다면 이런 기능이 유용할 것 같습니다.

P.S. 통보가 전송되기 전에 설정 가능한 시간 창을 사용하여 게시물을 편집하는 경우가 종종 있습니다. 하지만 게시물을 올릴 때쯤 되면 그 안에 해낼 수 있을지 확신이 서지 않습니다. 편집이 게시되었을 때만 그것이 편집으로 표시되는지 알게 됩니다.

이 편집을 사용하여 @Rhidian @codinghorror에게 알림을 받는지 테스트해 보겠습니다.

안되는 것 같습니다 :confused: