Editar posts causa notificação

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?

Estou observando esse comportamento em um dos nossos sites.

Ao editar uma postagem que menciona um grupo, recebo o seguinte aviso:

Posso também confirmar que as pessoas desse grupo recebem uma nova notificação quando a edição é salva.

Conseguimos reproduzir isso, @tshenry?

Hmm @Grayden_Shand, estou assumindo que a postagem já havia mencionado o grupo antes de ser editada? Sei que, se você adicionar uma nova menção a uma postagem por meio de uma edição, esse usuário/grupo será notificado.

Testei dois cenários:

  1. Se você fizer uma “edição ninja” em uma postagem que já mencionava um grupo, o aviso será exibido durante a edição, mas nenhuma notificação será enviada após a edição ninja.
  2. Se você fizer uma edição fora do período de graça para edições, o aviso será exibido durante a edição, mas nenhuma nova notificação será enviada ao grupo.

Você pode ajudar com mais algum passo de reprodução?


Como observação lateral, vejo que seria útil ter uma opção de alternância que controle se uma menção dispara uma notificação no nível da postagem. Isso proporcionaria mais controle em cenários de edição e também quando você apenas deseja incluir um link mágico de cartão de usuário/perfil na postagem para que outros usuários o utilizem.

Sim, a menção ao grupo já estava no post antes da edição. Além disso, o usuário que fez a edição era diferente daquele que era o dono do tópico.

Vou tentar reproduzir isso no meu ambiente de desenvolvimento hoje e reportarei se tiver sucesso.

Descobri…

A notificação está sendo enviada para usuários que se juntaram ao grupo após a criação original da postagem.

Portanto, para os usuários que estão recebendo a notificação, é a primeira vez que ELES recebem a notificação de menção, mas não a primeira vez que QUALQUER PESSOA recebe a notificação.

Mas as pessoas que já estavam no grupo desde o início (e que receberam a notificação original de menção) não recebem uma notificação adicional da edição.

Passos para reproduzir (requer dois usuários)

  1. Criar um novo grupo
  2. Criar uma nova postagem ou tópico que mencione esse grupo
  3. Criar um novo usuário
  4. Adicionar esse usuário ao grupo
  5. Editar a postagem — Nesse ponto, o novo usuário receberá uma notificação.
  6. Editar a postagem novamente — O novo usuário não receberá notificações adicionais por edições subsequentes.

Não tenho certeza de qual seria o comportamento correto aqui… Acho que eu tenderia a não enviar notificações de menção em edições de forma alguma, mas não sei o quão complicado isso seria na implementação.

Além disso, outra observação — a mensagem “Você está prestes a notificar X pessoas no grupo” aparece quando você faz uma edição, independentemente de alguém será ou não notificado de verdade.

É possível vincular essa mensagem de aviso ao número de pessoas que ainda não foram notificadas anteriormente sobre esta postagem (para calcular uma contagem precisa do número de pessoas que serão notificadas)?

Ah, entendi, obrigado por isso! Definitivamente vejo o mesmo comportamento.

Enviar notificações de menção através da edição de uma postagem é uma função importante que sei que eu e outros usamos de vez em quando, então queremos que isso permaneça, mas a forma como funciona com grupos parece estranha.

Minha opinião neste momento seria notificar um grupo apenas uma vez por postagem. Usuários adicionados a um grupo após uma menção inicial ao grupo ter sido feita não devem receber uma notificação de menção ao grupo como resultado de edições subsequentes da postagem. O banner educativo JIT sobre notificar o grupo não deve ser exibido durante a edição de uma postagem se não houver novas menções ao grupo desde que a postagem foi salva pela última vez.

Se um grupo que não havia sido mencionado anteriormente for mencionado em uma edição, eles devem ser notificados. É assim que funciona com menções a usuários. Também devemos ver o banner educativo relevante se houver um grupo recém-mencionado.

Estou pensando que podemos simplesmente adicionar alguma lógica condicional com base na existência de um registro na tabela group_mentions. Criamos um registro no momento de salvar uma postagem.

O que você acha, @codinghorror?

Entendo, mas devemos realmente considerar isso um bug que queremos corrigir?

Se suprimirmos completamente todas as notificações de @group na edição, editar um novo @group não gerará uma notificação de menção, o que representa uma grande mudança em relação ao funcionamento das notificações no passado e pode ser muito surpreendente.

Se começarmos a ser mais elaborados e notificarmos apenas os novos @groups na edição, ficaremos presos a um código complexo que precisa percorrer as diferenças e realizar muito mais controle.

Certamente, não consigo pensar em nenhuma solução fácil aqui.

Então, imagine um post com três menções a grupos diferentes. Ele é editado e uma quarta menção é adicionada.

Ao salvar a edição, podemos usar uma consulta como esta para encontrar a lista atual de menções a grupos para aquele post.

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

Em seguida, comparando os resultados da consulta com a lista de grupos mencionados no post, podemos encontrar a(s) nova(s) menção(ões).

Isso não parece ser um cálculo muito grande, mas talvez eu esteja ignorando algo óbvio. Isso também parece ser o tipo de coisa que poderia ser feita em uma tarefa em segundo plano.

Quanto ao banner JIT sobre notificar o(s) grupo(s), talvez essa lógica pudesse ser exposta por um endpoint de API (/post/<id>/mentions.json) para obter esses dados de forma assíncrona.

Não seria mais simples criar uma nova postagem e notificar as pessoas dessa forma? Estou um pouco receoso de construir uma torre gigantesca de complexidade aqui para apoiar o que é um caso de borda bastante específico.

Eu não quero tornar nada muito complexo.

Estava examinando parte do código disso (obrigado @tshenry pelo link), e não parece que precise ser tão complicado.

As menções a grupos estão sendo acionadas aqui (linhas 78-80). A função expand_group_mentions() é um gerador responsável por gerar os usuários que devem receber notificações de menção a grupos (respeitando políticas como SiteSetting.max_users_notified_per_group_mention).

Isso parece ser o local natural para colocar essa lógica.

Na função create_notification, suprimimos notificações para qualquer pessoa que já tenha recebido uma notificação do mesmo tipo. É por isso que editar uma postagem com uma menção a grupo aciona uma notificação para novos membros do grupo — uma notificação é realmente gerada para todos os usuários do grupo, mas é então suprimida para pessoas que já receberam a notificação.

Estou sugerindo algo semelhante, atualizando a função expand_group_mentions() para também filtrar grupos que já possuem um registro na tabela group_mentions.

Algo assim (por favor, desculpe minha falta de conhecimento sobre a sintaxe do 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

      # Adicionar verificação para grupos já mencionados
      next if GroupMentions.where(group_id: group.id, post_id: post.id).length > 0

      yield group, group.users
    end

  end

Isso não resolve o aviso JIT, porém.

Tentando ajudar a resolver isso, me avise se eu estiver apenas sendo chato… :slight_smile:

Eu estava prestes a postar uma nova pergunta de suporte, mas encontrei este tópico.

Parece relacionado.

Se eu postar uma mensagem e perceber que deveria ter notificado algumas pessoas que não avisei, qual é a melhor opção?

  1. Editar a postagem e mencionar especificamente um grupo ou várias pessoas com @?

  2. Criar uma nova mensagem para notificá-los com @? Nesse caso, teria que repetir muitas informações ou adicionar um link para a postagem original.

A opção 1 seria meu método preferido (mais limpo), se possível?

Alguém poderia confirmar: mencionar indivíduos ou grupos com @ ao editar notifica-los se eles ainda não foram notificados? Se não for assim, parece que seria útil implementar essa funcionalidade, desde que não seja muito difícil de fazer?

PS: Às vezes, quando esqueço, uso a janela de tempo configurável para editar a postagem antes que as notificações sejam enviadas. Mas, ao fazer isso, nunca se tem certeza se conseguirá fazer a tempo. Só descobre se aparecerá como uma edição quando a edição for publicada.

Vou usar esta edição para testar se recebo uma notificação @Rhidian @codinghorror

Parece que não :confused: