Atribuição automática de títulos com base no nível de confiança no Discourse

Olá a todos,

Configurei um sistema de classificação com títulos personalizados, mas, como sabem, o Discourse não tem uma forma integrada de atribuir um título padrão a todos os novos usuários. Então, criei uma solução alternativa onde:

  • Novos membros estão no Grupo 1
  • Membros ativos estão no Grupo 2
  • E assim por diante…

O método que usei é o seguinte:

cd /var/discourse
./launcher enter app
rails c

User.where(trust_level: 0).update_all(title: "عضو جديد")
User.where(trust_level: 1).update_all(title: "عضو جديد")
User.where(trust_level: 2).update_all(title: "عضو مشارك")
User.where(trust_level: 3).update_all(title: "عضو مبدع")

O Problema

Tenho que executar esses comandos manualmente toda vez que um novo usuário entra. Se eu executar o script hoje e um novo membro postar amanhã, eles não receberão o título automaticamente, então preciso fazer login no servidor e executar os comandos novamente.

Tentei automatizar com um script Ruby e chamá-lo via crontab, mas recebo um erro.

Perguntei ao ChatGPT, e ele me disse:

“O modelo User não é carregado quando você executa o script diretamente com Ruby fora do ambiente Discourse.”

O problema é que não tenho a configuração adequada de config/environment dentro dos arquivos do Discourse.

Eu adicionei, mas não funcionou.

Minha Pergunta

Existe uma maneira de automatizar isso sem usar crontab? Ou como posso executar corretamente um script que atualiza os títulos dos usuários sem entrar manualmente no console Rails cada vez?

Obrigado desde já!

2 curtidas

Alguma ajuda?

Talvez seja possível criando automações personalizadas para Discourse Automation e Create custom Automations, mas não sei como funciona.

1 curtida

Você pode conseguir isso com um script de automação personalizado usando os gatilhos User Event e User Promoted Event. Quando um novo usuário é criado (User Event) ou seu nível de confiança muda (User Promoted Event), você pode acionar um script para atribuir automaticamente um título com base em seu nível de confiança.

5 curtidas

Obrigado @jahan_gagan! Alguma ajuda para fazer este script?

Uau! Bom hack! :clap:

Parece lamentável que algumas configurações de grupo não estejam disponíveis para grupos automatizados, como níveis de confiança. Seria possível definir o título do usuário com base no grupo de nível de confiança em que ele está, mas não está.

Você poderia tentar fazer isso usando o sistema de distintivos. Crie um distintivo que é concedido quando um membro atinge o nível de confiança que você deseja e, em seguida, defina “Permitir que o distintivo seja usado como título”.

Você pode então criar uma automação usando o script “Associação de grupo de usuários por distintivo” que é executado todos os dias e atualiza o título e o flair do usuário.

5 curtidas

Um componente de tema que adicionasse essas informações ao cartão do post/usuário seria mais flexível? Dessa forma, os usuários ainda poderiam usar o campo de título para outras coisas, conforme pretendido (distintivos, identificadores de grupo, algo personalizado que você possa querer adicionar), e ter isso adicionado por um componente de tema significaria que eles não poderiam alterá-lo/removê-lo.

1 curtida

Olá,

Estou tentando implementar isso usando a automação do sistema de distintivos, mas estou enfrentando uma limitação.

Para executar o script user_group_membership_through_badge, devo especificar um grupo. No entanto, já utilizo os grupos padrão do sistema: Nível de Confiança 1, 2, 3, 4. Esses grupos são integrados e não podem ser selecionados na ferramenta de automação.

Se eu criar novos grupos para usar com esta automação, temo que todos os membros atuais não sejam transferidos automaticamente — e eu perca o mapeamento preciso de usuários para seus níveis de confiança.

Aqui está uma captura de tela mostrando o erro quando o campo de grupo é deixado em branco:

Existe alguma maneira de aplicar a atualização de distintivo para título sem exigir um grupo?
Ou existe uma solução alternativa para direcionar os grupos de Nível de Confiança diretamente dentro desta automação?

@xkhalid Montei um plugin rápido (também meu primeiro!) que:
<s

  • Atribui um título a novos usuários
  • Altera o título para o correspondente ao seu Nível de Confiança. Ex: TL1 → TL2: os usuários recebem o título TL2 agora, em vez do título TL1.
    </s
  • Atualiza os títulos dos usuários a cada 12 horas (planos para tornar a frequência configurável)

Todos os títulos configuráveis ​​nas configurações :slightly_smiling_face:.

4 curtidas

Obrigado!

Depois de adicionar isto a app.yml

- git clone https://github.com/NateDhaliwal/add-title-based-on-trust-level.git

e reconstruir, encontrei um erro de 502 Bad Gateway. Alguma solução?
Por agora, removi-o de app.yml e tudo funciona bem.

Hum, estranho. Se não me engano, esse erro às vezes pode aparecer após uma reconstrução, mas esperar que ele se resolva (ou outra reconstrução).

Sim, eu sei — mas esse problema só aconteceu depois que adicionei o repositório Git e reconstruí. Ele me deu este erro.

No entanto, tentarei novamente mais tarde.


E quanto a este problema? Poderia estar relacionado?

1 curtida

Vou dar outra olhada nisso, obrigado por me informar.

1 curtida

@xkhalid você poderia tentar agora? Acabei de atualizar.

1 curtida

Obrigado! Agora funciona.

Mas não está refletido para todos os usuários. Por exemplo, este usuário está no nível de confiança 1 e é um novo usuário, mas nenhum título foi atribuído.

Vai levar tempo ou?

@xkhalid Enviei uma correção. Por favor, me diga se agora funciona.
Obrigado!

Quero agradecer ao @NateDhaliwal pelo seu plugin!

Foi muito útil! e o título atualiza a cada 12 horas.

1 curtida

Olá, obrigado pelo seu ótimo plugin!

Tenho uma necessidade mais complexa:
Gostaria de definir títulos de usuário automaticamente com base em uma combinação de associação a grupos (por exemplo: grupo A ou grupo B) e nível de confiança (por exemplo: TL2, TL3, etc.). Por exemplo, um usuário no grupo A com TL2 receberia o título “A - TL2”, e assim por diante.

Seria possível estender seu plugin para suportar este recurso, ou você tem algum conselho sobre como implementá-lo?
Eu mesmo não tenho experiência em codificação, então agradeceria muito qualquer sugestão ou ajuda.

Muito obrigado!

Estes grupos são os grupos primários do usuário?

Sim, quero usar o grupo principal do usuário para decidir o título.