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.
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?
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.
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.
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.
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?
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.
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.