public async Task QueueRequest(ConnectedUser user, MatchMakerQueueRequest cmd)
        {
            var banTime = BannedSeconds(user.Name);
            if (banTime != null)
            {
                await UpdatePlayerStatus(user.Name);
                await user.Respond($"Please rest and wait for {banTime}s because you refused previous match");
                return;
            }

            // already invited ignore requests
            PlayerEntry entry;
            if (players.TryGetValue(user.Name, out entry) && entry.InvitedToPlay)
            {
                await UpdatePlayerStatus(user.Name);
                return;
            }

            var wantedQueueNames = cmd.Queues?.ToList() ?? new List<string>();
            var wantedQueues = possibleQueues.Where(x => wantedQueueNames.Contains(x.Name)).ToList();

            if (wantedQueues.Count == 0) // delete
            {
                await RemoveUser(user.Name, true);
                return;
            }

            players.AddOrUpdate(user.Name,
                (str) => new PlayerEntry(user.User, wantedQueues),
                (str, usr) =>
                {
                    usr.UpdateTypes(wantedQueues);
                    return usr;
                });


            // if nobody is invited, we can do tick now to speed up things
            if (invitationBattles?.Any() != true) OnTick();
            else await UpdateAllPlayerStatuses(); // else we just send statuses
        }
        public async Task QueueRequest(ConnectedUser user, MatchMakerQueueRequest cmd)
        {
            var banTime = BannedSeconds(user.Name);
            if (banTime != null)
            {
                await UpdatePlayerStatus(user.Name);
                await user.Respond($"Please rest and wait for {banTime}s because you refused previous match");
                return;
            }

            // already invited ignore requests
            PlayerEntry entry;
            if (players.TryGetValue(user.Name, out entry) && entry.InvitedToPlay)
            {
                await UpdatePlayerStatus(user.Name);
                return;
            }

            var wantedQueueNames = cmd.Queues?.ToList() ?? new List<string>();
            var wantedQueues = possibleQueues.Where(x => wantedQueueNames.Contains(x.Name)).ToList();

            var party = server.PartyManager.GetParty(user.Name);
            if (party != null) wantedQueues = wantedQueues.Where(x => x.MaxSize/2 >= party.UserNames.Count).ToList(); // if is in party keep only queues where party fits

            if (wantedQueues.Count == 0) // delete
            {
                await RemoveUser(user.Name, true);
                return;
            }

            await AddOrUpdateUser(user, wantedQueues);
        }