Sabemos qual seria o status de fazer com que este plugin atualize automaticamente os usuários no momento em que eles ingressam em um grupo, em vez de sincronizar manualmente? E também uma maneira de especificar quais grupos/cargos devem ser sincronizados entre si, em vez de o plugin assumir o controle ou criar os cargos automaticamente?
É a primeira vez que isso foi solicitado, então, como você pode imaginar, nem mesmo está na fila de espera, por assim dizer.
Isso seria bastante complicado, pois o bot roda em uma thread discreta. Você teria que adicionar um método para enviar mensagens ao bot e garantir que ele esteja escutando a solicitação. Um exercício tecnicamente interessante, mas não trivial.
Alternativamente, pode ser melhor explorar uma alternativa de chamada direta à API em vez de usar o bot. Nesse caso, você teria que decidir se isso justifica a entrega em um plugin diferente, baseado em chamadas discretas, e não em um bot.
Essa não é uma má ideia, mas, por curiosidade, por que você precisa que eles sejam diferentes?
Isso é mais prático.
PR aceito. Infelizmente, meu tempo para trabalhar em funcionalidades significativas sem financiamento é muito limitado.
Bem, como está agora, parece que os papéis são baseados no “nome” em vez do título. Isso significa que meus papéis no Discord acabam tendo ‘dashing’ e sem espaços, por exemplo. Então, supostamente, uma solução alternativa seria fazer com que os papéis sejam baseados não no nome, mas sim no nome completo ou no título padrão.
Dito isso, existem potencialmente grupos no Discourse que eu não gostaria que fossem sincronizados com o Discord de forma alguma.
Isso é intencional para evitar depender de um campo de descrição que pode:
a) conter espaços
b) não ser único
(e geralmente é uma péssima ideia em ciência da computação)
No entanto, se houver uma maneira segura de melhorar isso, estou todo ouvidos. Reconheço que não ‘fica’ muito agradável
O plugin definitivamente poderia ter funcionalidades adicionais adicionadas para desativar a sincronização de grupos específicos, a critério do administrador. PR aceito.
Podemos ter o bot sincronizando automaticamente em um horário agendado enquanto um método de API é explorado? Algo como verificar uma vez por hora, ou 24, etc.?
Acredito que seria possível adicionar uma funcionalidade como ‘repita isso novamente após x horas’ sem problemas.
O problema com isso, no entanto, é que isso parará toda vez que o bot sair do ar (por exemplo, ao reiniciar).
A melhor abordagem absoluta seria:
a) adicionar uma chamada de API discreta conectada a um job Sidekiq a este plugin OU
b) escrever um novo plugin que use chamadas de API normais em vez de utilizar um bot (e incorporar uma sincronização em lote nisso).
Qualquer uma dessas coisas exigirá patrocínio ou um PR.
Estou usando seu plugin atualmente e consegui colocar tudo em um ponto funcional. Parece muito bom, ótimo trabalho!
No entanto, tenho algumas perguntas: agora que tudo está funcionando, preciso que meus usuários façam login via Discord OAuth. Isso cria uma nova conta.
Qual é a melhor maneira de eu gerenciar isso? Preciso mesclar as contas nova e antiga? Tentei fazer isso com minha conta de administrador e recebi o erro “Você não tem permissão para executar o comando discsync!” ao tentar usar o comando !discsync manualmente.
Além disso, ele ainda não copiou nenhum papel do meu Discourse.
Para sua informação, minha conta do Discord aparece nas minhas opções como uma conta associada.
As configurações acima aparecem independentemente de você adicionar este plugin ao seu Discourse.
Se você fizer login por meio da conta social, desde que os e-mails de registro coincidam, a conta será reconhecida e nenhuma nova conta será criada. No entanto, se o usuário se inscreveu no Discord usando um e-mail diferente do usado no Discourse, claro, não há como o sistema saber que se trata do mesmo usuário, então uma nova conta será criada.
Sua conta de administrador é no servidor do Discord? Você também autorizou o bot?
Concordo com isso. No pior dos cenários, posso simplesmente mesclar contas com e-mails que não correspondem.
Sim, está correto. Sou o proprietário das instâncias do Discord e do Discourse. O resultado do “Ping!” é “Pong!”. Nenhuma função foi migrada do Discourse para o Discord.
O bot está no meu servidor do Discord e tem privilégios de administrador. Posso esclarecer o que você quer dizer com “autorizar”?
Meu palpite é que suas permissões ou as do bot no servidor do Discord não estão configuradas corretamente de alguma forma. Estou apenas relembrando como funciona este plugin, já que trabalho com dezenas deles. Minha última alteração nele foi há bastante tempo!
Roger! Fiz uma verificação rápida do meu lado, então, para sua ciência, estou listado como o proprietário do servidor e tenho direitos de administrador.
EDIT: Podemos esclarecer quais direitos o bot precisa? Atualmente, ele está listado como administrador (isso foi concedido a ele por meio de uma função, e não pelo convite OAuth, no entanto).