Comunidades Discourse frequentemente precisam automatizar a filiação a grupos com base em condições, como posse de distintivos ou filiação a outros grupos.
Casos de uso comuns incluem:
Usuários que não estão no grupo ‘assinantes’
Usuários que não estão banidos de postar em Marketplace
Usuários no NL0 ou NL1, mas não no NL2
Usuários que concluíram o tutorial para novos usuários ou são membros há mais de um ano
Usuários que pertencem a cliente_1, cliente_2 ou cliente_3 e não são estagiários
Anteriormente, resolver isso exigia scripts personalizados que sincronizavam os grupos periodicamente. O plugin Dynamic Groups elimina essa necessidade.
Este plugin introduz um campo de expressão booleana nas configurações do grupo, permitindo que administradores definam regras que determinam dinamicamente a filiação ao grupo.
Exemplos:
usuários que não estão no grupo ‘assinantes’ trust_level_0 AND NOT subscribers
usuários que não estão banidos de postar em Marketplace trust_level_2 AND NOT banned_users
usuários que estão no NL0 ou NL1, mas não no NL2 trust_level_0 AND NOT trust_level_2
usuários que concluíram o tutorial para novos usuários ou são membros há mais de um ano badge:certified OR badge:anniversary
usuários que pertencem ao cliente 1, 2 ou 3 e não são estagiários (client_1 OR client_2 OR client_3) AND NOT interns
Configuração
Depois que o plugin for instalado e habilitado, uma nova aba aparecerá na interface de administração do grupo:
Ao inserir ou atualizar a expressão booleana, o sistema levará alguns momentos para popular o grupo com os usuários correspondentes. A partir desse momento, a filiação ao grupo será atualizada automaticamente conforme o status do usuário mudar.
Importante:
Quando uma regra é definida, o grupo é marcado como automático, desabilitando alterações manuais de membros. Para reverter o grupo para gerenciamento manual, basta limpar o campo de expressão. Os membros existentes permanecerão, e você recuperará o controle manual.
Olá, obrigado por desenvolver este plugin super útil!
Atualmente, estou usando o Discourse Dynamic Groups para adicionar automaticamente todos os usuários não anônimos a um grupo especial. Minha expressão booleana é:
NOT anonymous_users
Comportamento esperado:
Quando um novo usuário se registra (que não pertence ao grupo anonymous_users), ele deve ser automaticamente adicionado a este grupo, sem qualquer intervenção manual.
Comportamento atual:
Novos usuários registrados não são adicionados imediatamente ao grupo. Eles só são adicionados depois que eu salvo novamente a expressão booleana nas configurações do grupo.
Isso significa que o grupo não é atualizado automaticamente à medida que os usuários se juntam, a menos que eu acione uma sincronização manual.
Recebo o erro: Unknown keyword, group or badge: 'anonymous_users'
Se eu mudar o nome do grupo para o meu grupo real, por exemplo:
trust_level_0 AND NOT estagiários
Ainda recebo: Unknown keyword, group or badge: 'estagiários'
Verifiquei duas vezes e estou copiando o nome exclusivo do grupo diretamente da página de administração do grupo, então não há erros de digitação.
Existe algo que eu possa estar perdendo, ou há algo mais que eu precise configurar para que os grupos personalizados sejam reconhecidos na expressão?
Ao tentar reproduzir, identifiquei dois bugs e um deles provavelmente te atingiu. Você pode atualizar o plugin para a versão mais recente 59640f1 e ver se isso resolve o problema?
O plugin ainda não lida muito bem com a renomeação de grupos. Se você renomear um grupo, você deve salvar as regras de todos os grupos que dependem dele (apenas insira um espaço após a expressão booleana e remova-o novamente para habilitar o botão Salvar). Isso será resolvido em uma versão posterior.
Usuários com nível de confiança 1 também são membros do grupo de nível de confiança 0. Portanto, o comportamento é esperado. Você poderia excluir o grupo de nível de confiança 1 para obter apenas usuários TL0. Semelhante ao exemplo da primeira postagem
Embora eu entenda o motivo, isso causa alguns problemas quando você deseja mexer no Título Padrão, no Flair e no Efeito.
Isso pode ser contornado revelando a aba no console do navegador ou removendo a expressão na aba de Grupos Dinâmicos, atualizando a página, fazendo as alterações, colando-a de volta e atualizando novamente.
Mas me pergunto se não seria melhor ocultar apenas os campos que não são úteis, em vez de toda a aba. Algo mais parecido com isso:
É, eu já tinha descoberto isso no tempo entre eu postar e você responder!! Eu não tinha percebido que você integra isso na funcionalidade principal — e ainda por cima de forma muito elegante.
Já risquei minha sugestão incorreta.
Acho que a outra solução alternativa que eu mencionei está boa então.
Vamos realizar uma rodada de manutenção em todos os plugins no próximo mês ou mais. Talvez precisemos rever a flag ‘automático’, já que, pelo que me lembro, era apenas uma maneira rápida de desativar a funcionalidade de adicionar/remover membros. Todas as outras coisas provavelmente são efeitos colaterais indesejados.