Permitir que os usuários bloqueiem palavras-chave

|||
|-|-|-|
| :information_source: | Resumo | Este componente de tema permite que os usuários bloqueiem palavras-chave. Requer a criação de três campos de usuário personalizados nas configurações de Administrador para funcionar.
| :eyeglasses:|Pré-visualização| Não consigo pré-visualizar isso no criador de temas porque requer a criação de campos de usuário, mas incluí capturas de tela abaixo. |
| :hammer_and_wrench:|Repositório| Github - a-very-old-sock/discourse-keyword-block |
| :question:|Guia de Instalação|Como instalar um tema ou componente de tema|
| :open_book:|Novo em Temas do Discourse?| Guia para iniciantes sobre como usar temas do Discourse

<!- Preencha "repoName" e "repoURL" para o botão de instalação automática →

Instale este componente de tema

<!- Descreva este tema/componente em uma ou duas frases →

Este componente de tema permite que os usuários bloqueiem palavras-chave, especificadas pelo usuário em Preferências > Perfil. Requer a criação de três campos de usuário personalizados nas configurações de Administrador para funcionar.

<!- Adicione capturas de tela (se aplicável) →

Bloqueie palavras-chave no título ou no resumo do tópico:

Bloqueie tópicos ou posts de resposta que contenham a palavra-chave, bem como tópicos sugeridos que contenham a palavra-chave:

<!- Adicione mais detalhes e explique as configurações (se aplicável) →

Este componente de tema permite que um usuário individual especifique palavras-chave que ele não deseja ver, e oculta os tópicos e posts de resposta contendo essa palavra-chave com um link para mostrar de qualquer maneira. Palavras observadas é uma configuração de administrador que se aplica a todos os usuários em todo o site; isso permite que usuários individuais especifiquem suas próprias palavras-chave que não desejam ver.

Cenário de exemplo: um fórum de animais de estimação pode ter um tópico geral sobre como lidar com pelos de animais onde o tópico principal não é marcado com um tipo específico de animal. O Usuário A responde sobre seu cachorro, o Usuário B responde sobre seu gato, mas o Usuário A não quer ver nada sobre gatos. O que este componente de tema faz é permitir que o Usuário A coloque “gato” em sua lista de bloqueio, e então onde quer que “gato” apareça em um tópico ou resposta, ele é substituído por “Bloqueado por conter gatos” com um clique para mostrar de qualquer maneira.

O usuário deve especificar uma lista separada por vírgulas de suas palavras-chave bloqueadas em um campo de usuário personalizado em Preferências > Perfil, e pode especificar se as palavras-chave a serem bloqueadas diferenciam maiúsculas de minúsculas ou devem corresponder à palavra inteira. (A diferenciação de maiúsculas e minúsculas e a correspondência de palavra inteira se aplicam a toda a lista de bloqueio, não a palavras individuais).

Este componente de tema requer que você crie três campos de usuário personalizados em Admin > Personalizar > Campos de Usuário para funcionar. Por padrão, as configurações do componente de tema esperam que esses campos de usuário sejam 1, 2 e 3 na ordem listada abaixo. Se você tiver outros campos de usuário personalizados definidos, precisará inserir os números corretos dos campos de usuário nas configurações do componente de tema. (A numeração dos campos de usuário começa em 1, então conte a lista de quantos outros campos de usuário você definiu). Veja o guia Meta Criar e configurar campos de usuário personalizados para mais detalhes.

1 - Lista de termos bloqueados do usuário

Tipo de Campo: Campo de Texto

Nome do Campo: (qualquer nome funcionará aqui) Termos Bloqueados

Descrição do Campo: (qualquer descrição funcionará aqui) Bloqueie palavras ou frases que aparecem em posts ou tópicos. Separado por vírgulas. Para bloquear um nome de usuário, inclua @ se a correspondência de palavra inteira estiver selecionada.

:white_check_mark: Editável após o cadastro
:cross_mark: Obrigatório no cadastro
:cross_mark: Mostrar no perfil público
:cross_mark: Mostrar no cartão do usuário
:cross_mark: Pesquisável

2 - Diferenciação de maiúsculas e minúsculas

Tipo de Campo: Confirmação

Nome do Campo: (qualquer nome funcionará aqui) Termos bloqueados - diferencia maiúsculas de minúsculas

Descrição do Campo: (qualquer descrição funcionará aqui) As palavras na lista “Termos bloqueados” diferenciam maiúsculas de minúsculas.

:white_check_mark: Editável após o cadastro
:cross_mark: Obrigatório no cadastro
:cross_mark: Mostrar no perfil público
:cross_mark: Mostrar no cartão do usuário
:cross_mark: Pesquisável

3 - Pesquisar palavras inteiras ou parciais

Tipo de Campo: Confirmação

Nome do Campo: (qualquer nome funcionará aqui) Termos bloqueados - palavras inteiras

Descrição do Campo: (qualquer descrição funcionará aqui) Os termos bloqueados devem aparecer como palavras completas, não como palavras parciais

:white_check_mark: Editável após o cadastro
:cross_mark: Obrigatório no cadastro
:cross_mark: Mostrar no perfil público
:cross_mark: Mostrar no cartão do usuário
:cross_mark: Pesquisável

O CSS abaixo está incluído no componente de tema e impedirá que quaisquer campos de usuário personalizados sejam exibidos no formulário de cadastro. Se você tiver outros campos de usuário personalizados que deseja exibir no formulário de cadastro, precisará substituí-lo com seu próprio CSS personalizado.

.login-form .user-fields {
    display: none;
}

Eu testei isso apenas com o tema Padrão. Posts e tópicos são bloqueados quando as categorias são definidas para exibir Categorias/Mais Recentes e Categorias/Mais Votados, mas não em Categorias/Em Destaque ou em qualquer uma das visualizações de caixa de categoria. É improvável que eu mude isso porque não preciso disso para o meu próprio site, mas pull requests são bem-vindos.

Atualmente, isso apenas bloqueia um post que contém uma palavra-chave no título ou no resumo visível no navegador. Não consegui descobrir como verificar o conteúdo do post inteiro ao visualizar resultados de pesquisa ou uma lista de tópicos, mas agradeceria qualquer ideia de como fazer isso.

Pretendo que isso também funcione na visualização de pesquisa de página inteira, mas em 24/02/2023 estou atualmente lutando para fazer isso funcionar. Editarei isso se conseguir fazer o bloqueio funcionar na pesquisa.

Isso é compatível com o componente de tema Resumos de Tópicos; não é compatível com Pré-visualizações de Listas de Tópicos. Não testei isso extensivamente com outros componentes de tema.

3 curtidas

Após criar campos de usuário personalizados e ativar o componente, recebo isto:

Alguma ideia do que ele está tentando me avisar? Por causa disso, talvez:

O tema/componente User Keyword Blocker está gerando erros: TypeError: null is not an object (evaluating 'e.match')

backtrace
Message

O tema/componente User Keyword Blocker está gerando erros:
TypeError: null is not an object (evaluating 'e.match')

Backtrace

viewingCategoryId@https://foorumi.katiska.eu/theme-javascripts/2d7e05cf5f7eb3e5f8699871f25f32a21d9221c2.js?__ws=foorumi.katiska.eu:209:77
@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:1347:71
@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:3677:13
get@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:1347:56
Ee@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:1324:40
map@[native code]
@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:5042:163
@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:1347:71
@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:3677:13
get@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:1347:56

Env

HTTP HOSTS: foorumi.katiska.eu

Então… o que diabos eu fiz de errado?

1 curtida

Hmm, não tenho certeza, não consegui reproduzir isso nem com um campo de usuário recém-criado nem com um campo de usuário inexistente.

Parece que você tem o tema padrão? Você tem algum outro componente de tema ativado? Parece que tem algo a ver com a correspondência de regex, mas não deveria gerar erros se não encontrar nada.

Claro que tenho outros componentes :wink: Mas com certeza — pode ser um conflito entre este e algum outro componente ou plugin.

Vou tentar investigar um pouco mais em algum momento.

E esse ponto aconteceu agora :wink:

O conflito acontece entre isso e topic list preview. Pelo menos na minha configuração.

Então, deixo você e o @merefield discutirem qual de vocês (quem? Eu realmente odeio inglês) conserta e o quê :wink:

1 curtida

Muito ocupado para dar suporte a conflitos com Componentes de Tema de terceiros, mas estou aberto a PRs. Por enquanto, você terá que decidir entre eles. :slight_smile:

2 curtidas

Eu me pergunto se isso poderia ser usado para estender a função de silenciar usuários?

Ou seja, colocar o usuário silenciado em uma lista de bloqueio para ocultar respostas para o usuário silenciado?

Acho que é possível na teoria, mas não estou encontrando uma maneira fácil de fazer isso agora. Atualmente, o que estou fazendo é usar decorateCooked, que não parece permitir acesso fácil ao elemento pai onde as informações da resposta estão. Posso mexer mais nisso e ver se consigo fazer funcionar, mas sem promessas.

Isso bloqueará menções de um nome de usuário na postagem se o nome de usuário estiver incluído na lista de bloqueio; se a correspondência de palavra inteira estiver ativada, o nome de usuário na lista de bloqueio precisa incluir a menção @, mas se a correspondência de palavra inteira estiver desativada, apenas o nome de usuário sem @ pode ser incluído.

1 curtida

Eu não acho que serei capaz de torná-los compatíveis também, mas observei no OP que eles não são compatíveis. PRs são bem-vindos, no entanto.

Minhas desculpas. Analisando isso. O que eu quis dizer com estender bloqueio/silenciar usuário. É adicionar o nome de usuário a uma lista de palavras bloqueadas. Minha teoria é que talvez o nome de usuário esteja em:

[quote=“asc, post:9, topic:256228”]

Então, se por exemplo adicionasse seu nome de usuário “asc”, qualquer postagem com as respostas acima seria exibida como oculta.

Apenas para confirmar, a palavra bloqueada não é mostrada? Apenas um link para desocultar a postagem? Ou a palavra observada pode ser substituída para não mostrar a palavra bloqueada?

Se sim, isso se aproximaria do bloqueio mais completo que alguns usuários desejam.