Strumenti admin/chiave inglese su piccoli post d'azione

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!

1 Mi Piace