A primeira vez que notei uma segunda notificação para a mesma resposta sem que um link, citação ou menção fossem adicionados na edição foi após a edição em Topics from some categories do not appear on /latest - #36 by JammyDodger. Este caso é ligeiramente diferente das minhas etapas de reprodução abaixo, mas acho que o problema subjacente é o mesmo.
A segunda postagem onde isso aconteceu foi em Messages section for sidebar - #13 by nathank. Foi semelhante: a edição não adicionou nada que resultasse em uma notificação — as citações já estavam lá antes — e ainda assim fui notificado uma segunda vez.
Aqui estão as etapas para reproduzir que encontrei e que funcionaram [1]
Você precisa de 3 usuários: OP, notifiedUser, spammer
OP cria um tópico
notifiedUser responde
OP responde à postagem de notified user notifiedUser é notificado sobre a resposta (esperado)
spammer responde à postagem de notifiedUser. A resposta contém um link para outra postagem de notifiedUser e uma citação da postagem à qual você está respondendo. (opcional: você também pode @mencionar notifiedUser) notifiedUser é notificado sobre a resposta (esperado) [Caso você tenha adicionado uma @menção, a notificação é sobre a @menção (esperado)]
notifiedUser lê as novas respostas para marcar as notificações como lidas e navega de volta para outro lugar para que não percamos uma notificação.
spammer edita a resposta e corrige um erro de digitação (ou adiciona edit1) notifiedUser é notificado sobre ser citado (inesperado, eles já foram notificados sobre esta resposta antes e a citação já estava lá, não há necessidade de avisá-los)
spammer edita a resposta novamente para corrigir outro erro de digitação (ou adiciona edit2) notifiedUser é notificado sobre ser linkado (inesperado, eles já foram notificados sobre esta resposta antes e o link já estava lá, não há necessidade de avisá-los)
O vídeo mostra apenas as etapas finais 5-7. Spammer à esquerda, notifiedUser à direita
pelo menos na maioria das vezes, às vezes até adicionar uma @menção na edição não aciona uma nova notificação ↩︎
Mude as linhas 589-599 de:
# linked, quoted, mentioned, chat_quoted podem ser suprimidos se você já tiver uma notificação de resposta
if [
Notification.types[:quoted],
Notification.types[:linked],
Notification.types[:mentioned],
Notification.types[:chat_quoted],
].include?(type)
if existing_notifications.find { |n| n.notification_type == Notification.types[:replied] }
return
end
end
Para:
# linked, quoted, mentioned, chat_quoted podem ser suprimidos se você já tiver qualquer notificação sobre esta
postagem
if [
Notification.types[:quoted],
Notification.types[:linked],
Notification.types[:mentioned],
Notification.types[:chat_quoted],
].include?(type)
return if existing_notifications.any?
end
Isso funcionará, mas estou um pouco preocupado porque há outras notificações que podem passar despercebidas aqui. (notificações de plugins, por exemplo, que talvez queiramos suprimir)
@lindsey, há uma questão de produto aqui: quando devemos suprimir uma notificação?
Não tenho certeza. Isso não é uma notificação de resposta no meu vídeo? E, no entanto, ainda há uma notificação sobre a citação e o link depois. Portanto, estender isso para outros tipos de notificação pode não ajudar aqui. Mas talvez cubra outros casos extremos.
Será que o problema na minha reprodução é a notificação de “2 respostas”? Isso quebra a verificação de notificações existentes por aquela resposta quando a resposta é editada?
Em geral, eu esperaria nenhuma notificação adicional por causa de uma edição se todos os gatilhos já estivessem na postagem quando eu a li antes. Corrigir um erro de digitação não relacionado a menção/link/citação não deveria resultar em uma nova notificação.
Acho que, no caso de um gatilho ser substituído, eu preferiria que a notificação existente e não lida fosse alterada (ou substituída) em vez de receber uma segunda. Remover a @menção na postagem de um usuário para evitar ruído não deveria resultar em uma segunda notificação sobre a citação. Eu esperaria que a notificação sobre a @menção desaparecesse.
Acho que o único caso em que eu gostaria de uma nova notificação é se uma edição adicionasse um tipo de notificação mais importante. Então, quando alguém linkou minha postagem e mais tarde adiciona uma edição que me @menciona, faz sentido me avisar porque eles parecem não estar mais falando sobre algo que escrevi, mas diretamente comigo. Como uma edição não eleva mais o tópico, as @menções podem ser uma maneira útil de alertar os usuários sobre edições.
Acho que Moin descreve o ideal da perspectiva do usuário, mas acho que teríamos dificuldade em acertar esta parte:
Talvez possamos gerenciar isso para notificações no aplicativo, mas não podemos cancelar o envio de notificações push ou notificações por e-mail. (Em geral, sou hesitante em adicionar mais complexidade às notificações, então, embora alguns possam se contentar com notificações diferentes no aplicativo e por e-mail/push, eu preferiria que evitássemos isso.)
Concordo com isto, no entanto:
Se uma postagem deve notificar um usuário (por exemplo, o autor da postagem cita o Usuário A), notifique o(s) usuário(s) relevante(s) (por exemplo, o Usuário A recebe uma notificação de que foi citado).
Se uma edição nessa postagem não alterar quem deve ser notificado ou por quê (por exemplo, o autor da postagem edita um erro de digitação), não notifique ninguém.
Se uma edição nessa postagem alterar quem deve ser notificado (por exemplo, o autor da postagem menciona o Usuário B) ou por quê (por exemplo, o autor da postagem menciona o Usuário A), notifique o(s) usuário(s) impactado(s) (por exemplo, o Usuário B recebe uma notificação de menção, o Usuário A recebe uma notificação de menção).