Admin-Werkzeuge/Schraubenschlüssel für kleine Aktionsbeiträge

Ich habe diesen Beitrag von vor einer Weile wiedergefunden. Falls jemand anderes in Zukunft davon profitieren kann, hier war meine Lösung für dieses Problem!


Unerwünschte „Small Action“-Beiträge löschen

Das unten stehende Rails-Skript wird benötigt, um dies zu tun – ich habe es smalldelete.rb genannt und es im Container unter /var/www/discourse/script abgelegt.

Wir müssen auch jeden „Small Action“-Beitrag, den wir löschen möchten, überprüfen und sicherstellen, dass das Wort delete in den eigentlichen Beitragsbereich eingefügt wird, um ihn von dem zu unterscheiden, was wir behalten möchten. Hier ist ein Beispiel dafür, was ich mit einem Auto Bump-Beitrag meine:

Sie können dieses Schlüsselwort bei Bedarf ändern, indem Sie die Zeile p.raw.strip.downcase == \"delete\" in ein anderes Schlüsselwort ändern.

Skript für 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

Das Skript findet ein Thema anhand seiner ID und überprüft dann jeden Beitrag in diesem Thema, um festzustellen, ob er das definierte Schlüsselwort und nichts anderes enthält. Wenn dies zutrifft, wird dieser spezifische Beitrag zum Löschen vorgemerkt.


Sobald das Skript eingerichtet ist, können wir in die Rails-Konsole gehen und es laden:

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

dann können wir schließlich ausführen

TopicCleaner.delete_small_actions(topic_id, dry_run: false)

Das Flag dry_run ist ebenfalls enthalten, um genau aufzulisten, was bei Bedarf dauerhaft gelöscht würde.


Nun sind diese Änderungen natürlich rein ästhetischer Natur und machen keinen Unterschied in Bezug auf den Inhalt, da weich gelöschte Beiträge für Nicht-Mitarbeiter ohnehin nicht angezeigt werden.

Ich bin jedoch ein besonderer Fan davon, alles schön und ordentlich aussehen zu lassen, daher kann ich mir durchaus einige Fälle vorstellen, in denen bestimmte Forenbesitzer dies nutzen möchten!

1 „Gefällt mir“