Recordé esta publicación de hace un tiempo. En caso de que a alguien más le sea útil en el futuro, ¡esta fue mi solución a este problema al final!
Eliminando Publicaciones de Acción Pequeña No Deseadas
El script de Rails a continuación es necesario para hacer esto; lo he llamado smalldelete.rb y lo he colocado en /var/www/discourse/script mientras estoy dentro del contenedor.
También debemos revisar y asegurarnos de que cada publicación de acción pequeña que queremos destruir tenga la palabra delete colocada en la sección real de la publicación, para diferenciarlas de las que podríamos querer conservar. Aquí hay un ejemplo de lo que quiero decir con una publicación de Auto Bump (Reactivación Automática):
Puedes cambiar esa palabra clave por otra si es necesario editando la línea p.raw.strip.downcase == \"delete\" por otra palabra clave.
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} no 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 "No se encontraron publicaciones de acción pequeña con 'delete' en el tópico #{topic_id}"
return
end
puts "Se encontraron #{to_delete.size} publicaciones coincidentes en el tópico ##{topic_id}"
to_delete.each do |post|
if dry_run
puts "Se eliminaría PERMANENTEMENTE la publicación ##{post.id} (creada #{post.created_at}, por #{post.user.username})"
else
post.destroy()
puts "🗑️ Publicación eliminada permanentemente ##{post.id}"
end
end
puts dry_run ? "Ejecución de prueba completa — no se eliminaron publicaciones." : "Finalizada la limpieza permanente del tópico #{topic_id}"
end
end
El script encuentra un tópico por ID y luego verifica cada publicación en ese tópico para ver si contiene la palabra clave definida, y nada más. Si esto es cierto, entonces preparará esa publicación específica para su eliminación.
Una vez que el script esté configurado, podemos ir a la consola de rails y cargarlo:
load Rails.root.join("script/smalldelete.rb")
luego, finalmente, podemos ejecutar
TopicCleaner.delete_small_actions(topic_id, dry_run: false)
La bandera dry_run también se incluye para listar exactamente lo que se eliminaría permanentemente, si se desea.
Ahora, por supuesto, estos cambios son completamente estéticos y no marcan ninguna diferencia en términos de contenido, ya que las publicaciones eliminadas provisionalmente no se mostrarán a los no miembros del personal de todos modos.
Sin embargo, soy un fanático particular de hacer que todo se vea agradable y ordenado, ¡así que definitivamente puedo ver algunos casos en los que ciertos propietarios de foros querrán hacer uso de esto!
