Ferramentas de administrador/chave inglesa em posts de ação pequena

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!

1 curtida