/// <summary>
        /// Fetches all trophies for the game this user has been attached to. Please note that the index numbers are in fact the trophy ID numbers as they are stored on the Game Jolt server!
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        static public Dictionary <int, GJTrophy> FetchAll(GJUser user)
        {
            GJAPI.chat($"Fetching Trophies for {user.gameid}");
            var ret         = new Dictionary <int, GJTrophy>();
            var querystring = $"game_id={user.gameid}&username={user.userid}&user_token={user.token}"; //, user.gamekey);
            var url         = $"https://api.gamejolt.com/api/game/v1/trophies/?{querystring}";

            url += "&signature=" + GJAPI.md5(url + user.gamekey);
            GJAPI.chat($"Request sent: {url}");
            var      ng     = GJAPI.GET(url).Trim().Split('\n');
            GJTrophy trophy = null;

            foreach (string ngline in ng)
            {
                var nglinec = ngline.Trim();
                var p       = nglinec.IndexOf(':');
                var fld     = nglinec.Substring(0, p).ToLower();
                var val     = nglinec.Substring(p + 1);
                if (val[0] == '"')
                {
                    val = val.Substring(1);
                }
                if (val[val.Length - 1] == '"')
                {
                    val = val.Substring(0, val.Length - 1);
                }
                chat($"{fld}:\t'{val}'");
                switch (fld)
                {
                case "success":
                    if (val != "true")
                    {
                        chat("No Success!"); return(null);
                    }
                    break;

                case "id":
                    try {
                        var i = Int32.Parse(val);
                        trophy    = new GJTrophy(user);
                        ret[i]    = trophy;
                        trophy.ID = i;
                    } catch {
                        Console.WriteLine($"Parsing index number ({val}) failed! Is something wrong with the server here?");
                    }
                    break;

                case "title":
                    if (trophy == null)
                    {
                        Console.WriteLine($"Trying to attach a {fld} to a non-existent trophy!"); return(null);
                    }
                    trophy.Name = val;
                    break;

                case "difficulty":
                    if (trophy == null)
                    {
                        Console.WriteLine($"Trying to attach a {fld} to a non-existent trophy!"); return(null);
                    }
                    trophy.TrophyClass = val;
                    break;

                case "description":
                    if (trophy == null)
                    {
                        Console.WriteLine($"Trying to attach a {fld} to a non-existent trophy!"); return(null);
                    }
                    trophy.Description = val;
                    break;

                case "image_url":
                    if (trophy == null)
                    {
                        Console.WriteLine($"Trying to attach a {fld} to a non-existent trophy!"); return(null);
                    }
                    trophy.Image_Url = val;
                    break;

                case "achieved":
                    if (trophy == null)
                    {
                        Console.WriteLine($"Trying to attach a {fld} to a non-existent trophy!"); return(null);
                    }
                    trophy.AchievedDate = val;
                    break;

                default: throw new Exception($"Unknown field {fld}({val})");     // debug! In normal use this line should be on comment
                }
            }
            return(ret);
        }
 private GJTrophy(GJUser user)
 {
     Parent = user;
 }