private async Task DownloadBadgesAsync(CocApi.Model.WarClan warClan, string folder) { HttpClient httpClient = _httpClientFactory.CreateClient(); HttpResponseMessage response = await httpClient.GetAsync(warClan.BadgeUrls.Large); if (response.IsSuccessStatusCode) { HttpContent content = response.Content; using Stream stream = await content.ReadAsStreamAsync(); using var fs = new FileStream(Path.Combine(folder, "large.png"), FileMode.Create); await stream.CopyToAsync(fs); } response = await httpClient.GetAsync(warClan.BadgeUrls.Medium); if (response.IsSuccessStatusCode) { HttpContent content = response.Content; using Stream stream = await content.ReadAsStreamAsync(); using var fs = new FileStream(Path.Combine(folder, "medium.png"), FileMode.Create); await stream.CopyToAsync(fs); } response = await httpClient.GetAsync(warClan.BadgeUrls.Small); if (response.IsSuccessStatusCode) { HttpContent content = response.Content; using Stream stream = await content.ReadAsStreamAsync(); using var fs = new FileStream(Path.Combine(folder, "small.png"), FileMode.Create); await stream.CopyToAsync(fs); } }
private void Update(CocApi.Model.ClanWar clanWar, CocApi.Model.WarClan warClan, string clanFolder, string statsFolder) { Logger.LogTrace("Running update..."); try { File.WriteAllText(Path.Combine(clanFolder, "name.txt"), warClan.Name); File.WriteAllText(Path.Combine(clanFolder, "attacks.txt"), warClan.Attacks.ToString()); File.WriteAllText(Path.Combine(clanFolder, "clanLevel.txt"), warClan.ClanLevel.ToString()); File.WriteAllText(Path.Combine(clanFolder, "clanProfileUrl.txt"), warClan.ClanProfileUrl); File.WriteAllText(Path.Combine(clanFolder, "destructionPercentage.txt"), FormatNumber(warClan.DestructionPercentage)); File.WriteAllText(Path.Combine(clanFolder, "members.txt"), warClan.Members.Count.ToString()); File.WriteAllText(Path.Combine(clanFolder, "result.txt"), warClan.Result.ToString()); File.WriteAllText(Path.Combine(clanFolder, "stars.txt"), warClan.Stars.ToString()); File.WriteAllText(Path.Combine(clanFolder, "tag.txt"), warClan.Tag.ToString()); Logger.LogTrace("Created various stats files."); List <CocApi.Model.ClanWarAttack> bestClanAttacks = new(); CocApi.Model.ClanWarAttack[] clanAttacks = clanWar.Attacks.Where(a => a.AttackerClanTag == warClan.Tag && a.DefenderTag != null).ToArray(); var grouped = clanAttacks.GroupBy(a => a.DefenderTag); foreach (IGrouping <string, CocApi.Model.ClanWarAttack> group in grouped) { bestClanAttacks.Add(group .OrderByDescending(a => a.Stars) .ThenByDescending(a => a.DestructionPercentage) .ThenByDescending(a => a.Duration) .First()); } for (int i = _settings.Value.MinTownhall; i < _settings.Value.MaxTownhall + 1; i++) { File.WriteAllText(Path.Combine(statsFolder, $"{i} three.txt"), bestClanAttacks.Count(a => a.DefenderTownHall == i && a.Stars == 3).ToString()); File.WriteAllText(Path.Combine(statsFolder, $"{i} two.txt"), bestClanAttacks.Count(a => a.DefenderTownHall == i && a.Stars == 2).ToString()); File.WriteAllText(Path.Combine(statsFolder, $"{i} one.txt"), bestClanAttacks.Count(a => a.DefenderTownHall == i && a.Stars == 1).ToString()); int[] attackerThs = new int[] { i--, i, i++ }; foreach (int attackerTh in attackerThs) { if (attackerTh < _settings.Value.MinTownhall || attackerTh > _settings.Value.MaxTownhall) { continue; } CocApi.Model.ClanWarAttack[] scope = clanAttacks.Where(a => a.AttackerTownHall == attackerTh && a.DefenderTownHall == i).ToArray(); CocApi.Model.ClanWarAttack[] scopeBest = bestClanAttacks.Where(a => a.AttackerTownHall == attackerTh && a.DefenderTownHall == i).ToArray(); int tries = scope.Length; int threes = scopeBest.Count(a => a.Stars == 3); if (tries == 0) { File.WriteAllText(Path.Combine(statsFolder, $"{attackerTh}v{i}P.txt"), "0"); } else { float percent = (float)threes / tries * 100; string s = FormatNumber(percent); File.WriteAllText(Path.Combine(statsFolder, $"{attackerTh}v{i}P.txt"), s); } File.WriteAllText(Path.Combine(statsFolder, $"{attackerTh}v{i}Three.txt"), threes.ToString()); File.WriteAllText(Path.Combine(statsFolder, $"{attackerTh}v{i}Tries.txt"), tries.ToString()); } } Logger.LogTrace("Done writing files to stats."); } catch (Exception err) { Logger.LogError(err, "An error occured at {0}", nameof(Update)); } }