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!
