Outils d'administration/clé sur les petits messages d'action

Je me suis souvenu de ce message d’il y a quelque temps. Au cas où cela pourrait être utile à quelqu’un d’autre à l’avenir, voici ma solution finale à ce problème !


Suppression des publications d’action mineure indésirables

Le script Rails ci-dessous est nécessaire pour effectuer cette opération. Je l’ai nommé smalldelete.rb et je l’ai placé dans /var/www/discourse/script à l’intérieur du conteneur.

Nous devons également parcourir et nous assurer que chaque publication d’action mineure que nous souhaitons supprimer contient le mot delete dans la section de la publication elle-même, afin de la différencier de celles que nous pourrions vouloir conserver. Voici un exemple de ce que je veux dire avec une publication Auto Bump :

Vous pouvez changer ce mot-clé pour autre chose si nécessaire en modifiant la ligne p.raw.strip.downcase == \"delete\" par un autre mot-clé.

Script pour smalldelete.rb


class TopicCleaner
  def self.delete_small_actions(topic_id, dry_run: false)
    topic = Topic.find_by(id: topic_id)
    unless topic
      puts "Topic #{topic_id} not found"
      return
    end

    posts = topic.posts.where(post_type: Post.types[:small_action])
    to_delete = posts.select { |p| p.raw.strip.downcase == "delete" }

    if to_delete.empty?
      puts "No small action posts with 'delete' found in topic #{topic_id}"
      return
    end

    puts "Found #{to_delete.size} matching posts in topic ##{topic_id}"

    to_delete.each do |post|
      if dry_run
        puts "Would PERMANENTLY delete post ##{post.id} (created #{post.created_at}, by #{post.user.username})"
      else
        post.destroy()
        puts "🗑️ Permanently deleted post ##{post.id}"
      end
    end

    puts dry_run ? "Dry run complete — no posts deleted." : "Finished permanent cleanup of topic #{topic_id}"
  end
end

Le script trouve un sujet par son ID, puis vérifie chaque publication de ce sujet pour voir si elle contient le mot-clé défini, et rien d’autre. Si c’est le cas, il prépare cette publication spécifique pour la suppression.


Une fois le script configuré, nous pouvons accéder à la console Rails et le charger :

load Rails.root.join("script/smalldelete.rb")

puis, enfin, nous pouvons exécuter

TopicCleaner.delete_small_actions(topic_id, dry_run: false)

Le drapeau dry_run est également inclus pour lister exactement ce qui serait définitivement supprimé, si désiré.


Maintenant, bien sûr, ces changements sont entièrement esthétiques et n’ont aucune incidence sur le contenu, car les publications supprimées de manière logicielle ne seront de toute façon pas visibles par les non-membres du personnel.

Je suis particulièrement amateur de tout ce qui est beau et bien rangé, donc je peux certainement imaginer des cas où certains propriétaires de forum voudront l’utiliser !

1 « J'aime »