Supprimer tous les messages d'un utilisateur dans une catégorie

Salut à tous,

Récemment, j’ai eu besoin de supprimer tous les messages d’un utilisateur dans une catégorie spécifique. Mettant de côté les « débats » sur la suppression de contenu, j’ai pensé : « Oh, c’est facile, il suffit d’utiliser la recherche, puis de cocher tous les résultats avec les cases à cocher et de les supprimer ».

Cependant, il semble que cela me permette de supprimer les sujets plutôt que les messages, même si la recherche me donne les messages comme résultats, pas nécessairement les sujets (bien qu’ils soient aussi présents, oui).

Existe-t-il un moyen « sûr » de faire cela ? Au début, je pensais que cela nécessiterait une opération très extrême sur la base de données (et je ne rejette pas cette possibilité), mais puisque je peux supprimer en masse plus de 50 sujets depuis l’interface… peut-être y a-t-il un moyen de faire de même pour les messages uniquement ? (Ou une méthode via la console, je ne veux simplement pas « essayer » et faire exploser la base de données :P)

Merci !

Je n’ai pas d’expérience personnelle avec cela, mais je pense que vous pouvez effectuer une suppression « douce » via l’API —

Il existe également quelques sujets sur la suppression « définitive » si vous recherchez « rails delete post ».

Si vous pouvez fournir quelques détails supplémentaires sur ce que vous essayez d’accomplir, les personnes pourraient avoir des conseils plus spécifiques.

Bonjour @JammyDodger,

Merci pour les liens.

Je veux simplement supprimer tous les messages d’un utilisateur dans une catégorie spécifique. :stuck_out_tongue:

PS : Peut-être en utilisant la console ? Je ne veux juste pas faire exploser ma base de données…

Une discussion est en cours sur un sujet similaire dans ce fil : Delete deleted-posts permanently in bulk?

J’espère que cela pourra vous inspirer ?

Désolé pour la necro, je peux créer un nouveau message si nécessaire.

Nous avons une catégorie politique et certains utilisateurs souhaiteraient supprimer tous leurs messages de cette catégorie pour des raisons évidentes. Y a-t-il un moyen facile de le faire pour eux ?

Une solution peut être d’utiliser la console Rais.

cd /var/discourse
./launcher enter app
rails c

Ensuite, vous pouvez suivre le formulaire suivant en renseignant le slug de la catégorie et le nom d’utilisateur.
Vous copiez le code et le collez dans la console.

Remarque :

  • Il ne supprime pas le premier message afin d’éviter la suppression du sujet
  • Si vous ciblez une sous-catégorie, fournissez le parent, par exemple : slug_parent/slug_cat.

:warning: Veuillez effectuer une sauvegarde avant toute modification.

Category
  .find_by_slug_path_with_id("=CATEGORY_SLUG=")
  .tap do |c|
    u = User.find_by_username("=USERNAME=")
    Post
      .joins(:topic)
      .where(user_id: u.id)
      .where("topics.category_id = ?", c.id)
      .where.not(post_number: 1)
      .where(deleted_at: nil)
      .find_each { |p| PostDestroyer.new(Discourse.system_user, p).destroy }
  end

Merci ! C’est fantastic.