É importante saber quantas cores distintas você tem disponíveis e quão distintas elas devem ser. Por exemplo, um usuário pode ter "amarelo pálido" e outro usuário ter "amarelo ligeiramente mais pálido"?
Se você pode ter muitas cores distintas, basta gerá-las usando um algoritmo determinístico, começando em 0,0,0 e trabalhando até 255,255,255 (isso dá 256 * 256 * 256 cores diferentes!). Se você precisa que as cores sejam mais distintas, você ainda pode usar o algoritmo fixo, mas usar um grande valor - por exemplo, incrementar o valor em 64 ao invés de 1 (o que lhe dá 256/64 ^ 3 ou 64 cores diferentes). p>
Depois de ter esse tipo de algoritmo, basta fornecer um número a cada usuário. Você terá que manter uma lista desses números, mas você pode manter um 'array booleano' de cada um ou simplesmente pesquisar todos os usuários que estiverem procurando o menor número não utilizado.
Como alternativa, calcule as cores off-line e armazene os valores em uma matriz. Cada usuário obtém um índice nesse array. Para um novo usuário, basta procurar em todos os usuários pelo próximo índice não utilizado ou armazenar um sinalizador "usado / gratuito" ao lado da cor e atualizar o array à medida que os usuários forem indo e vindo.