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 !
