Chat pra Comunidade
Testamos a viabilidade de ter um chat usando gitter (o projeto parecia maneiro mas desacelerou e ta morrendo).
Slack é inviável pelo tamanho da comunidade (apesar de ser a opção mais "madura"). Com o limite de 10k mensagens para perder o histórico, se todo mundo acessar e falar oi, acabou.
Vamos inicialmente avaliar outras alternativas e considerar prós e contras:
DiscordRocket.ChatMatttermost
Discord a principal vantagem é que é gratis e ilimitado, mas o foco da ferramenta é comunidade de jogos, e é outro walled garden, onde a gente não tem controle nenhum sobre os dados (já temos o grupo do facebook com essas caracteristicas). Outra coisa que ele tem que não é interessante são os canais de voz. A chance de virar uma comunidade tóxica por causa disso é enorme.
Rocket.Chat é o mais completo das alternativas opensource, e é feito por brasileiros. Ele roda em node.js + Meteor (tem poucos testes). Ponto negativo além de ser node, é que precisa de MongoDB.
Mattermost é opensource e roda em Go + React JS. O maior problema é o modelo de negócio deles, que tem versão community vs enterprise, e permissões é algo que só tem na enterprise (apesar do código ser aberto e aparentemente ser necessário apenas "desligar" a checagem da licença, o que significa em ultimo caso fazer uma build especifica).
Ponto negativo dele é que ele em funcionalidade é mais incompleto que o Rocket.Chat, mas o código é melhor, parece mais robusto em diversas questões.
Bom a gente tem o Rocket chat, agora precisamos por isso no ar.
Seguindo aquela idéia que comentei a um tempão atrás de no futuro ter um forum pra comunidade (pra tentar sair um pouco do facebook ou como estratégia caso o facebook resolva mudar totalmente as regras).
Baseado nela, a gente precisa ter, inicialmente, um serviço de autenticação. Eu pensei no seguinte:
- Servidor CAS, inicialmente login baseado exclusivamente em usar facebook como provedor (OAuth).
- Usar esse CAS pra controlar quem pode ou não entrar no chat (e futuramente no fórum).
- Condicionar a criação da conta nesse serviço (e banir o usuário dele) baseado na pessoa fazer parte ou não da comunidade no facebook
Isso torna simples remover o acesso de alguem do chat, removendo da comunidade (e no futuro vice versa).
Como não tem como saber pelo usuário quais comunidades ele faz parte com a API atual, tem uma alternativa que é baseado em usar as nossas contas de administrador:
Minha idéia aqui é usar a Hello gem do @thejamespinto pra autenticar o facebook, e usar uma API key de um usuário nosso (pode ser um bot) pra de tempos em tempos sincronizar o usuário do facebook com o do chat e liberar o acesso dele.
Essa sincronização pode acontecer 1 vez por dia e a gente limitar o acesso de novos usuário que tenham X dias de grupo (isso evita os rougue bots, e mascara a limitação do serviço).
O que acham @rubyonrailsbrasil ?