Я вспомнил этот пост, опубликованный немного назад. На случай, если кому-то ещё пригодится эта информация в будущем, вот моё итоговое решение данной проблемы!
Удаление нежелательных мелких действий (small action posts)
Для этого потребуется следующий скрипт на Ruby on Rails — я назвал его smalldelete.rb и разместил в директории /var/www/discourse/script внутри контейнера.
Также необходимо пройти по всем постам и убедиться, что в каждом из тех, которые нужно удалить, в теле поста содержится слово delete. Это позволит отличить их от тех, что стоит сохранить. Вот пример того, что я имею в виду, на примере поста Auto Bump:
При необходимости вы можете изменить это ключевое слово на другое, отредактировав строку p.raw.strip.downcase == "delete".
Скрипт для 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_id} не найдена"
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 "В теме #{topic_id} не найдено постов с пометкой 'delete'"
return
end
puts "Найдено #{to_delete.size} подходящих постов в теме ##{topic_id}"
to_delete.each do |post|
if dry_run
puts "Будет ПОЛНОСТЬЮ удалён пост ##{post.id} (создан #{post.created_at}, автор: #{post.user.username})"
else
post.destroy()
puts "🗑️ Пост ##{post.id} навсегда удалён"
end
end
puts dry_run ? "Тестовый запуск завершён — посты не удалены." : "Завершена окончательная очистка темы #{topic_id}"
end
end
Скрипт находит тему по её ID, затем проверяет каждый пост в этой теме на наличие заданного ключевого слова и ничего больше. Если условие выполняется, пост помечается для удаления.
После настройки скрипта можно зайти в консоль Rails и загрузить его:
load Rails.root.join("script/smalldelete.rb")
затем, наконец, запустить:
TopicCleaner.delete_small_actions(topic_id, dry_run: false)
Флаг dry_run также предусмотрен для вывода списка того, что было бы удалено навсегда, если это необходимо.
Конечно, эти изменения носят исключительно визуальный характер и не влияют на содержание, так как мягко удалённые посты всё равно не отображаются для пользователей, не являющихся сотрудниками.
Однако я лично люблю, когда всё выглядит аккуратно и опрятно, поэтому вполне могу представить ситуации, когда владельцы форумов захотят воспользоваться этим инструментом!
