public async Task AttachCompletionToAchievements(List <Achievement> achievements) { if (string.IsNullOrEmpty(SteamID)) { return; } if (!_cache.TryGetValue(String.Concat(_achievedCacheKey, "_", SteamID), out SteamCommunity.PlayerAchievements playerAchievements)) { SteamClient client = new SteamClient(); client.Authenticator = APIKeyAuthenticator.ForProtectedResource(Environment.GetEnvironmentVariable("SteamAPIKey")); playerAchievements = await SteamCommunity.GetPlayerAchievementsAsync(client, SteamID, 236850); _cache.Set(String.Concat(_achievedCacheKey, "_", SteamID), playerAchievements, TimeSpan.FromMinutes(2)); } achievements.ForEach(a => a.Achieved = playerAchievements.Achievements.FirstOrDefault(ac => ac.Name == a.Name)?.IsAchieved ?? false); }
public async Task AttachPercentageToAchievements(List <Achievement> achievements) { if (!_cache.TryGetValue(_percentageCacheKey, out List <SteamCommunity.GlobalAchievement> achievementPercentages)) { SteamClient client = new SteamClient(); client.Authenticator = APIKeyAuthenticator.ForProtectedResource(Environment.GetEnvironmentVariable("SteamAPIKey")); achievementPercentages = await SteamCommunity.GetGlobalAchievementPercentagesForAppAsync(client, 236850); _cache.Set(_percentageCacheKey, achievementPercentages, TimeSpan.FromHours(12)); } Dictionary <string, string> achievementNameMatcher = new Dictionary <string, string>(); foreach (var achievement in achievements) { int maxMatch = achievementPercentages.Max(ac => FuzzyMatchAPIName(ac.APIName, achievement.Name)); achievementNameMatcher.Add(achievement.Name, achievementPercentages.FirstOrDefault(ac => FuzzyMatchAPIName(ac.APIName, achievement.Name) == maxMatch)?.APIName); } achievements.ForEach(a => a.Percentage = achievementPercentages.FirstOrDefault(ac => ac.APIName == achievementNameMatcher[a.Name])?.Percent ?? 0); }