Podemos excluir todas as mensagens 'Automaticamente Impulsionadas' de uma vez?

Pesquisado antes de postar:
Gosto de ‘Auto Bumping dos tópicos’ para manter os tópicos sendo renovados. Mas eu gostaria que, quando um visitante visitasse os tópicos, ele não visse dezenas de mensagens de ‘Automaticamente Bumped’.

Existe alguma maneira de excluí-los ocasionalmente, manualmente ou automaticamente (ou ambos)?

Estou perguntando isso porque descobri que, no meu nível, qualquer que seja o meu desejo, o mesmo já foi em grande parte cuidado.

2 curtidas

Olá @Bathinda!
Você pode clicar manualmente no ícone de excluir, como qualquer outra postagem:

2 curtidas

Obrigado, mas essa não é uma maneira prática de excluir centenas de mensagens de “bump” em tópicos diferentes.

Eu nem consegui selecionar todas as mensagens de “bump” em um único tópico.

1 curtida

Não há um recurso integrado para uma ação em massa como essa.

Você pode usar um script do Rails para excluir mensagens de auto-bump existentes, algo como:

  1. Conecte-se via SSH ao seu servidor
  2. cd /var/discourse
  3. ./launcher enter app
  4. rails c
  5. Post.where("action_code = 'autobumped'").destroy_all

:warning: Sempre faça um backup primeiro, por via das dúvidas.

4 curtidas

Isso é bom o suficiente.
Obrigado.

Existe algum comando com o qual possamos primeiro listar/ver todas essas mensagens antes de dar o comando ‘destroy (excluir)’?

1 curtida

A melhor maneira seria fazê-lo a partir da interface do Discourse com o Data Explorer:

Use a seguinte consulta:

SELECT * from posts
WHERE action_code = 'autobumped'

3 curtidas

Ah!! Essa é a consulta que me deixaria feliz. Obrigado novamente.

2 curtidas

Embora a consulta sugerida mostre os tópicos que contêm mensagens ‘auto-bumped’ em todos os tópicos. Mas provou não ser de muita ajuda.


Ela apenas retorna centenas de tópicos que contêm milhares de mensagens ‘Auto-Bumped’, mas não diz quantas mensagens desse tipo existem em quantos tópicos.

Então, acho que, no final, terei que usar o machado nas ‘salas escuras’ do console do rails apenas (o que é um pouco intimidante).

Estou um pouco preocupado porque isso afetará milhares de tópicos/postagens de uma só vez. Se ao menos houvesse um botão selecionar tudo dentro dos tópicos que selecionasse todas as mensagens de bumping juntas e pudéssemos excluir essas mensagens com um clique dentro de qualquer tópico. E se alguém quisesse excluir todas essas mensagens em Todos os Tópicos com apenas um comando ele teria que entrar no ‘rails’.

Não estou reclamando. Estou apenas me expressando.

1 curtida

A 5ª linha do comando rails que você me passou perguntaria ou solicitaría algo antes de excluir todas essas postagens? Ou ela simplesmente faria o que foi instruída, sem nenhum aviso, etc., ou chance de recuperação?

Se possível, podemos excluir as ‘mensagens de bump’ de qualquer tópico primeiro, em vez de excluir de todo o site?

Além disso, você pode sugerir/dizer algum comando rails para visualizar algumas amostras das postagens que vamos excluir?

Obrigado.

Algo como isto no explorador de dados pode ajudar a dar uma visão geral:


SELECT p.topic_id,
       COUNT(p.id) AS count
FROM posts p
WHERE action_code = 'autobumped'
GROUP BY p.topic_id
ORDER BY count DESC

No entanto, vou dar um aviso sobre o uso do console do Rails para fazer alterações como estas num site ativo se não tiver experiência com ele. Pode querer criar um site de teste e praticar antes de mergulhar. :+1:

3 curtidas

Sim, resolveu o problema na medida em que foi oferecido pelos designers/desenvolvedores.

Mas eu ainda gostaria de dizer que deveria haver algum comando de ‘Admin’, nas configurações de admin ou no tópico que está sendo visualizado, para selecionar todas as ‘mensagens duplicadas (Auto-Bumped)’ em qualquer tópico ou em todos os tópicos e, em seguida, removê-las, sempre que o admin desejar.

Talvez você pudesse ocultar essas mensagens com CSS em vez disso? Infelizmente, não acho que o widget post-small-action inclua atualmente o tipo de ação como uma classe CSS, então você não pode direcionar especificamente as mensagens de “bump”. Talvez um componente de tema pudesse ajudar?

1 curtida

Sim, verifiquei isso antes de sugerir a solução do explorador de dados.
Adicionar classes específicas a ações pequenas poderia ser uma boa sugestão de Feature.

1 curtida

Você pode sugerir algo, por favor.
Posso apenas copiar e colar o mesmo em um componente. Não sei codificar.

Não fiz muito com a API de plugins, mas vi que existe um método que pode adicionar classes a pequenas postagens de ação:

Então, criei um componente de tema que incluiu isso na seção Head:

<script type="text/discourse-plugin" version="1.6.0">
  api.addPostSmallActionClassesCallback(post => {
    return ["small-action-" + post.actionCode]
  });
</script>

…e isso na seção CSS:

.small-action.small-action-autobumped {
  display: none;
}

…e a mensagem de autobump desapareceu!

Não fiz nenhum outro teste, então não sei se haveria outros efeitos colaterais. É possível que as classes small-action-[...] possam entrar em conflito em outro lugar no aplicativo, caso em que você deve escolher um prefixo que tenha garantia de ser exclusivo.

3 curtidas

Note que o método addPostSmallActionClassesCallback foi adicionado apenas no mês passado, portanto, você precisa estar em uma versão bastante recente do Discourse:

2 curtidas

Obrigado.
Por favor, elabore sobre este último no qual caso você deve escolher um prefixo que tenha a garantia de ser exclusivo.

Por exemplo, você poderia usar o prefixo bathinda-, que seria garantido para não conflitar com nada no Discourse, nem agora nem no futuro. Ficaria algo assim:

Head:

<script type="text/discourse-plugin" version="1.6.0">
  api.addPostSmallActionClassesCallback(post => {
    return ["bathinda-" + post.actionCode]
  });
</script>

CSS:

.small-action.bathinda-autobumped {
  display: none;
}
2 curtidas

@simonk

Obrigado novamente. Criei e usei/ativei o componente com sucesso.
Embora, depois de ocultar as mensagens ‘Automatically Bumped’, ele fica assim.

Um pouco ‘desagradável’, melhor do que nenhuma/outra solução.

Ah, entendi, é por causa das mensagens de intervalo de tempo que não estão ocultas. Isso é complicado porque você não pode selecionar um elemento anterior com CSS.

1 curtida