Lembrei-me desta publicação de um tempo atrás. Caso mais alguém possa se beneficiar disso no futuro, aqui estava minha solução para este problema no final!
Excluindo Publicações de Ação Pequena Indesejadas
O script do Rails abaixo é necessário para fazer isso - eu o nomeei como smalldelete.rb e o coloquei em /var/www/discourse/script enquanto estava dentro do contêiner.
Também precisamos verificar e garantir que cada publicação de ação pequena que queremos destruir tenha a palavra delete colocada na seção real da publicação, para diferenciá-las daquelas que talvez queiramos manter. Aqui está um exemplo do que quero dizer com uma publicação de Auto Bump (Aumento Automático):
Você pode alterar essa palavra-chave para outra coisa, se necessário, editando a linha p.raw.strip.downcase == \"delete\" para outra palavra-chave.
Script para smalldelete.rb
class TopicCleaner
def self.delete_small_actions(topic_id, dry_run: false)
topic = Topic.find_by(id: topic_id)
unless topic
puts "Tópico #{topic_id} não encontrado"
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 "Nenhuma publicação de ação pequena com 'delete' encontrada no tópico #{topic_id}"
return
end
puts "Encontradas #{to_delete.size} publicações correspondentes no tópico ##{topic_id}"
to_delete.each do |post|
if dry_run
puts "Iria excluir PERMANENTEMENTE a publicação ##{post.id} (criada em #{post.created_at}, por #{post.user.username})"
else
post.destroy()
puts "🗑️ Excluída permanentemente a publicação ##{post.id}"
end
end
puts dry_run ? "Execução de teste concluída — nenhuma publicação excluída." : "Concluída a limpeza permanente do tópico #{topic_id}"
end
end
O script encontra um tópico pelo ID e, em seguida, verifica cada publicação nesse tópico para ver se contém a palavra-chave definida e nada mais. Se isso for verdadeiro, ele prepara essa publicação específica para exclusão.
Assim que o script estiver configurado, podemos entrar no console do rails e carregá-lo:
load Rails.root.join("script/smalldelete.rb")
então, finalmente, podemos executar
TopicCleaner.delete_small_actions(topic_id, dry_run: false)
O sinalizador dry_run também está incluído para listar exatamente o que seria excluído permanentemente, se desejado.
Agora, é claro, essas alterações são inteiramente estéticas e não fazem diferença em termos de conteúdo, já que as publicações excluídas logicamente não serão exibidas para não membros da equipe de qualquer maneira.
Sou um fã particular de deixar tudo bonito e organizado, então posso definitivamente ver alguns casos em que certos proprietários de fóruns podem querer fazer uso disso!
