Ricordo questo post di un po’ di tempo fa. Nel caso in cui qualcun altro possa trarne beneficio in futuro, ecco la mia soluzione a questo problema alla fine!
Eliminare i Post di Piccola Azione Indesiderati
Lo script rails seguente è necessario per fare ciò: l’ho chiamato smalldelete.rb e l’ho posizionato in /var/www/discourse/script mentre ero all’interno del container.
Dobbiamo anche esaminare e assicurarci che ogni post di piccola azione che vogliamo eliminare abbia la parola delete inserita nella sezione effettiva del post, per differenziarli da quelli che potremmo voler conservare. Ecco un esempio di cosa intendo con un post Auto Bump:
Puoi cambiare quella parola chiave con qualcos’altro se necessario modificando la riga p.raw.strip.downcase == \"delete\" con un’altra parola chiave.
Script per 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
Lo script trova un topic tramite ID, quindi controlla ogni post in quel topic per vedere se contiene la parola chiave definita, e nient’altro. Se questo è vero, allora prepara quel post specifico per l’eliminazione.
Una volta impostato lo script, possiamo entrare nella console rails e caricarlo:
load Rails.root.join("script/smalldelete.rb")
quindi, infine, possiamo eseguire
TopicCleaner.delete_small_actions(topic_id, dry_run: false)
Il flag dry_run è incluso anche per elencare esattamente ciò che verrebbe eliminato permanentemente, se desiderato.
Ora, ovviamente, queste modifiche sono interamente estetiche e non fanno alcuna differenza in termini di contenuto, poiché i post eliminati in modo “soft” non saranno comunque visibili ai non membri dello staff.
Tuttavia, sono un particolare fan del rendere tutto bello e ordinato, quindi posso certamente vedere alcuni casi in cui i proprietari di determinati forum potrebbero voler fare uso di questo!
