O projeto Mutiny é um chat em tempo real, desenvolvido com o intuíto de levar as características de uma "interface" retro, como retratado em muitos filmes e séries dos anos 80/90. Foi inspirado propositalmente em um série que gosto bastante, chamada Halt and catch fire, onde existe uma empresa de jogos virtuais chamada Mutiny e uma das suas aplicações é um chat para sua comunidade. O projeto foi pensado inicialmente no começo da produção de um TCC quando estava fazendo um curso de informática, que por fim não consegui concluir mas depois de um tempo decidi tirá-lo do papel. O mesmo já passou por algumas versões não definitivas, então pensei em recriá-lo e compartilhar com o público.
Primeiramente clone o repositório usando
git clone https://github.com/zNairy/Mutiny/
Em seguida instale os recursos necessários em dependencies/requirements para execução utilizando o pip de acordo com sua versão do Python.
python -m pip install -r dependencies/requirements.txt
Inicie o lado servidor (mutinyServer) para suportar cada cliente que se conecta à ele. Por padrão, tanto o servidor quanto cada cliente é conectado no endereço localhost:5000 se nenhum argumento for passado em sua instância.
python mutinyServer.py
server = Server() # Server('127.0.0.1', 1010)
server.run()
Depois inicie simulando cada cliente executando o mutinyClient, informando seu nome de usuário posteriormente.
Por padrão os perfis de usuários utilizados ficarão salvos em .client/profiles. O mesmo acontece no lado servidor quando um usuário tem êxito ao se conectar, residindo em .server/registeredUsers
- O programa conta com uma variedade de comandos para interação com o usuário. Veja uma lista com os comandos possíveis rodando /commands.
- Comandos que não tem uma acão direta poderá retornar um exemplo de como se utilizá-lo.
- Alguns dos comandos para interagir com outros usuários no privado são: /private, /accept, /decline, /unvite e /leave.
- Você pode mudar a cor do seu nickname usando /namecolor cor_desejada
- Cada usuário quando logado recebe um identificador gerado pelo servidor, de modo que cada um seja único e não possa acessar outro usuário apenas informando seu nickname.
- Como dito anteriormente, os perfis de usuários ficam salvos em .client/profiles. Se um perfil for alterado, não conseguirá mais logar no servidor visto que seu nickname e identificador são verificados à cada nova seção. Esse sistema foi implementado por fins práticos à de se usar uma senha, sendo mais simples e atingindo a ideia original do projeto.
- Os usuários cadastrados no servidor se mantém mesmo quando o mesmo está offline, mas os convites enviados entre eles não.
- O arquivo treeModel mostra a estrutura do programa, entre suas funcões, comandos e utilidades do sistema divididos.
- O projeto não tem por finalidade ser muito complexo, apenas apresentar a ideia original.
- As implementações feitas foram simples, caso queira contribuir implementando opções avançadas como segurança na camada de envio de mensagens como SSL entre outros, abra um pull request ou dê sugestões entrando em contato comigo no Discord.
- No que diz respeito à interface, o chat ainda precisa de uma melhoria por usar a principal funcionalidade para entrada e saída de dados. A entrada no input do terminal faz com que se alguma outra pessoa enviar uma mensagem ela seja "sobreescrita", o que mantém a informação salva mas visualmente não agrada muito. Uma interface gráfica mantendo o estilo de um terminal, mas separando cada área para visualização e entrada das mensagens seria o ideal. (em versões futuras)