Example #1
0
        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);
            }
        }
Example #2
0
        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));
            }
        }