Édition des publications provoque une 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?

Je constate ce comportement sur l’un de nos sites.

Lors de la modification d’un article mentionnant un groupe, j’obtiens l’avertissement suivant :

Je peux également confirmer que les membres de ce groupe reçoivent bien une nouvelle notification lorsque la modification est enregistrée.

Peut-on reproduire cela @tshenry ?

Hmm @Grayden_Shand, je suppose que le post mentionnait déjà le groupe avant d’être édité ? Je sais que si vous ajoutez une nouvelle mention à un post via une édition, cet utilisateur ou ce groupe sera notifié.

J’ai testé deux scénarios :

  1. Si vous effectuez une « édition ninja » sur un post qui mentionnait déjà un groupe, l’avertissement s’affiche pendant l’édition, mais aucune notification n’est envoyée après l’édition ninja.
  2. Si vous effectuez une édition en dehors de la période de grâce d’édition, l’avertissement s’affiche pendant l’édition, mais aucune nouvelle notification n’est envoyée au groupe.

Pourriez-vous m’aider avec d’autres étapes de reproduction ?


En passant, je pense qu’il serait utile d’avoir un interrupteur permettant de contrôler si une mention déclenche une notification au niveau du post. Cela offrirait plus de contrôle dans les scénarios d’édition, ainsi que lorsque vous souhaitez simplement inclure un lien vers une carte utilisateur ou un profil magique dans le post pour que d’autres utilisateurs puissent en profiter.

Oui, la mention du groupe figurait déjà dans le message avant sa modification. De plus, l’utilisateur ayant effectué la modification n’est pas le même que celui qui possède le sujet.

Je vais essayer de reproduire le problème sur mon environnement de développement aujourd’hui et vous tiendrai au courant si j’y parviens.

J’ai trouvé…

La notification est envoyée aux utilisateurs qui ont rejoint le groupe après la création initiale du message.

Ainsi, pour les utilisateurs qui reçoivent la notification, c’est la première fois qu’ils reçoivent une notification de mention, mais pas la première fois que quelqu’un la reçoit.

En revanche, les personnes qui étaient déjà dans le groupe (et qui ont donc reçu la notification de mention initiale) ne reçoivent pas de notification supplémentaire lors de la modification.

Étapes pour reproduire le problème (nécessite deux utilisateurs)

  1. Créer un nouveau groupe
  2. Créer un nouveau message ou sujet mentionnant ce groupe
  3. Créer un nouvel utilisateur
  4. Ajouter cet utilisateur au groupe
  5. Modifier le message — À ce stade, le nouvel utilisateur recevra une notification.
  6. Modifier à nouveau le message — Le nouvel utilisateur ne recevra pas de notifications supplémentaires pour les modifications ultérieures.

Je ne suis pas sûr de quel devrait être le comportement correct ici… Je pencherais vers l’arrêt total de l’envoi des notifications de mention lors des modifications, mais je ne sais pas à quel point cela serait complexe à mettre en œuvre.

Par ailleurs, une autre remarque : le message « Vous êtes sur le point de notifier X personnes dans le groupe » s’affiche lors d’une modification, même si personne ne sera réellement notifié.

Serait-il possible de lier ce message d’avertissement au nombre de personnes qui n’ont pas encore été notifiées à propos de ce message (afin de calculer un nombre précis de personnes qui seront effectivement notifiées) ?

Ah, merci pour cela ! Je constate exactement le même comportement.

L’envoi de notifications de mention via la modification d’un message est une fonctionnalité importante que je sais que j’utilise, tout comme d’autres, de temps à autre. Nous souhaitons donc la conserver, mais son fonctionnement actuel avec les groupes semble étrange.

Mon avis à ce stade serait de ne notifier un groupe qu’une seule fois par message. Les utilisateurs ajoutés à un groupe après qu’une mention de groupe initiale ait été faite ne devraient pas recevoir de notification de mention de groupe à la suite de modifications ultérieures du message. La bannière éducative JIT concernant la notification du groupe ne devrait pas s’afficher lors de la modification d’un message s’il n’y a pas de nouvelles mentions de groupes depuis la dernière sauvegarde du message.

Si un groupe qui n’avait pas été mentionné précédemment est mentionné dans une modification, ils devraient être notifiés. C’est ainsi que cela fonctionne avec les mentions d’utilisateurs. Nous devrions également voir la bannière éducative pertinente s’il y a un groupe nouvellement mentionné.

Je pense que nous pouvons simplement ajouter une logique conditionnelle basée sur l’existence d’un enregistrement dans la table group_mentions. Nous créons un enregistrement au moment de la sauvegarde d’un message.

Qu’en pensez-vous @codinghorror ?

Je suis d’accord, mais devons-nous vraiment considérer cela comme un bug à corriger ?

Si nous supprimons complètement toutes les notifications @group lors d’une modification, modifier un nouveau @group ne déclenchera aucune notification de mention, ce qui constitue un changement majeur par rapport au fonctionnement des notifications dans le passé et risque de surprendre.

Si nous nous lançons dans des solutions élaborées et ne notifions que les nouveaux @group lors d’une modification, nous nous retrouverons avec un code complexe devant parcourir les différences et gérer beaucoup plus de métadonnées.

Je ne vois personnellement aucune solution simple dans ce cas.

Imaginons donc un message contenant trois mentions de groupes différentes. Il est modifié et une quatrième mention est ajoutée.

Lors de l’enregistrement de la modification, nous pouvons utiliser une requête comme celle-ci pour obtenir la liste actuelle des mentions de groupes pour ce message.

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

Ensuite, en comparant les résultats de la requête avec la liste des groupes mentionnés dans le message, nous pouvons identifier les nouvelles mentions.

Cela ne semble pas être un calcul trop lourd, mais peut-être que je passe à côté d’une évidence. Cela ressemble aussi à quelque chose qui pourrait être effectué dans une tâche en arrière-plan.

En ce qui concerne la bannière JIT concernant la notification du/des groupe(s), cette logique pourrait peut-être être exposée via un point de terminaison API (/post/<id>/mentions.json) pour récupérer ces données de manière asynchrone.

Ne serait-il pas plus simple de créer un nouveau message et de prévenir les gens ainsi ? J’ai un peu peur de construire une tour de complexité gigantesque pour prendre en charge ce qui est un cas limite assez spécifique.

Je ne veux pas rendre les choses trop complexes.

J’ai examiné une partie du code à ce sujet (merci à @tshenry pour le lien), et il ne semble pas que cela doive être aussi compliqué.

Les mentions de groupe sont actuellement déclenchées ici (lignes 78-80). La fonction expand_group_mentions() est un générateur chargé de produire les utilisateurs devant recevoir des notifications de mention de groupe (tout en respectant des règles comme SiteSetting.max_users_notified_per_group_mention).

Cela semble être un endroit naturel pour placer cette logique.

Dans la fonction create_notification, nous supprimons les notifications pour toute personne ayant déjà reçu une notification du même type. C’est pourquoi la modification d’un message contenant une mention de groupe déclenche une notification pour les nouveaux membres du groupe : une notification est en fait générée pour tous les utilisateurs du groupe, mais elle est ensuite supprimée pour les personnes qui l’ont déjà reçue.

Je suggère quelque chose de similaire, en mettant à jour la fonction expand_group_mentions() pour filtrer également les groupes qui ont un enregistrement dans la table group_mentions.

Quelque chose comme (veuillez excuser mon manque de connaissance de la syntaxe 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

      # Ajouter une vérification pour les groupes déjà mentionnés
      next if GroupMentions.where(group_id: group.id, post_id: post.id).length > 0

      yield group, group.users
    end

  end

Cela ne résout pas le problème de l’avertissement JIT, cependant.

J’essaie d’aider à résoudre ce problème, faites-moi savoir si je suis simplement ennuyeux… :slight_smile:

J’allais publier une nouvelle question de support, mais j’ai trouvé ce sujet.

Il semble lié.

Si je publie un message et réalise que j’aurais dû notifier certaines personnes que je n’ai pas notifiées, quelle est ma meilleure option ?

  1. Modifier le message et spécifiquement @ mentionner un groupe ou plusieurs personnes ?

  2. Créer un nouveau message pour les @ notifier ? Je devrais alors répéter beaucoup d’informations, ou ajouter un lien vers le message original.

L’option 1 serait ma méthode préférée (plus propre) si possible ?

Pouvez-vous s’il vous plaît confirmer : est-ce que mentionner spécifiquement des individus ou des groupes lors d’une modification les notifie s’ils n’ont pas encore été notifiés ? Sinon, cela semblerait utile si ce n’est pas trop difficile à implémenter ?

PS : Si j’oublie, j’utilise parfois la fenêtre de temps configurable pour modifier le message avant que les notifications ne soient envoyées. Mais au moment où vous postez cela, vous n’êtes jamais tout à fait sûr de pouvoir le faire à temps. Vous ne découvrez que le message a été modifié une fois la modification publiée.

J’utiliserai cette modification pour tester si je reçois une notification @Rhidian @codinghorror

Il semble que non :confused: