private async Task <LeaderboardData> GetLeaderboardDataAsync(string console, string variant) { LeaderboardData board = new LeaderboardData(); using (var response = await _httpClient.GetAsync("https://www.pathofexile.com/ladder/export-csv/league/" + variant + "/realm/" + console + "/index/1", HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false)) { if (response.IsSuccessStatusCode) { using (var stream = await response.Content.ReadAsStreamAsync()) using (var reader = new StreamReader(stream)) using (var csv = new CsvReader(reader)) { csv.Configuration.RegisterClassMap <LeaderboardDataItemMap>(); await csv.ReadAsync(); csv.ReadHeader(); while (await csv.ReadAsync()) { board.Add(csv.GetRecord <LeaderboardDataItem>()); } } } else { await _log.LogMessage(new LogMessage(LogSeverity.Error, "Leaderboard", "Fetch Failed: https://www.pathofexile.com/ladder/export-csv/league/" + variant + "/realm/" + console + "/index/1")); } } return(board); }
private async Task BuildLeaderboardAsync(Leaderboard leaderboard, SocketGuild guild) { LeaderboardData data = null; try { data = await GetLeaderboardDataAsync(leaderboard.Console, leaderboard.Variant); var channel = guild.GetChannel(leaderboard.ChannelId) as SocketTextChannel; foreach (var msg in await channel.GetMessagesAsync().FlattenAsync()) { await msg.DeleteAsync(); await Task.Delay(1000); } await channel.SendMessageAsync(embed : BuildTopClassEmbed(data, leaderboard.Variant)); await channel.SendMessageAsync(embed : BuildFirstTopAscendancyEmbed(data)); await channel.SendMessageAsync(embed : BuildSecondTopAscendancyEmbed(data)); await channel.SendMessageAsync(embed : BuildDiscordOnlyEmbed(data, leaderboard.Variant)); await Task.Delay(15000); } catch (Exception ex) { await _log.LogMessage(new LogMessage(LogSeverity.Error, "Leaderboard", string.Empty, ex)); return; } }
private Embed BuildTopClassEmbed(LeaderboardData data, string leaderboard) { var sb = new StringBuilder(); var embed = EmbedHelper.Embed(EmbedHelper.Leaderboard) .WithTitle(WebUtility.UrlDecode(leaderboard).Replace("_", " ") + " Leaderboard") .WithDescription("Retrieved " + data.AllRecords.Count.ToString("##,##0") + " records.") .WithCurrentTimestamp() .AddField("Top 10 Characters of each Class", "Rank is overall and not by Class."); var duelists = data.AllRecords.Where(x => x.Class is AscendancyClass.Duelist || x.Class is AscendancyClass.Slayer || x.Class is AscendancyClass.Gladiator || x.Class is AscendancyClass.Champion).ToList(); var marauders = data.AllRecords.Where(x => x.Class is AscendancyClass.Marauder || x.Class is AscendancyClass.Juggernaut || x.Class is AscendancyClass.Chieftain || x.Class is AscendancyClass.Berserker).ToList(); var rangers = data.AllRecords.Where(x => x.Class is AscendancyClass.Ranger || x.Class is AscendancyClass.Raider || x.Class is AscendancyClass.Deadeye || x.Class is AscendancyClass.Pathfinder).ToList(); var scions = data.AllRecords.Where(x => x.Class is AscendancyClass.Scion || x.Class is AscendancyClass.Ascendant).ToList(); var shadows = data.AllRecords.Where(x => x.Class is AscendancyClass.Shadow || x.Class is AscendancyClass.Saboteur || x.Class is AscendancyClass.Assassin || x.Class is AscendancyClass.Trickster).ToList(); var templars = data.AllRecords.Where(x => x.Class is AscendancyClass.Templar || x.Class is AscendancyClass.Inquisitor || x.Class is AscendancyClass.Hierophant || x.Class is AscendancyClass.Guardian).ToList(); var witches = data.AllRecords.Where(x => x.Class is AscendancyClass.Witch || x.Class is AscendancyClass.Necromancer || x.Class is AscendancyClass.Occultist || x.Class is AscendancyClass.Elementalist).ToList(); if (duelists.Count > 0) { sb = new StringBuilder(); foreach (var item in duelists.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Duelists, Slayers, Champions, Gladiators", "```" + sb + "```"); } if (marauders.Count > 0) { sb = new StringBuilder(); foreach (var item in marauders.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Marauders, Juggernauts, Chieftains, Berserkers", "```" + sb + "```"); } if (rangers.Count > 0) { sb = new StringBuilder(); foreach (var item in rangers.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Rangers, Pathfinders, Raiders, Deadeyes", "```" + sb + "```"); } if (scions.Count > 0) { sb = new StringBuilder(); foreach (var item in scions.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Scions, Ascendants", "```" + sb + "```"); } if (shadows.Count > 0) { sb = new StringBuilder(); foreach (var item in shadows.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Shadows, Saboteurs, Assassins, Tricksters", "```" + sb + "```"); } if (templars.Count > 0) { sb = new StringBuilder(); foreach (var item in templars.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Templars, Guardians, Inquisitors, Hierophants", "```" + sb + "```"); } if (witches.Count > 0) { sb = new StringBuilder(); foreach (var item in witches.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Witches, Necromancers, Occultists, Elementalists", "```" + sb + "```"); } return(embed.Build()); }
private Embed BuildSecondTopAscendancyEmbed(LeaderboardData data) { var sb = new StringBuilder(); var embed = EmbedHelper.Embed(EmbedHelper.Leaderboard) .WithTitle("Top 10 Characters of each Ascendancy") .WithDescription("Rank is overall and not by Ascendancy.") .WithCurrentTimestamp(); if (data.Inquisitors.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Inquisitors.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Inquisitors", "```" + sb + "```"); } if (data.Juggernauts.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Juggernauts.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Juggernauts", "```" + sb + "```"); } if (data.Necromancers.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Necromancers.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Necromancers", "```" + sb + "```"); } if (data.Occultists.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Occultists.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Occultists", "```" + sb + "```"); } if (data.Pathfinders.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Pathfinders.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Pathfinders", "```" + sb + "```"); } if (data.Raiders.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Raiders.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Raiders", "```" + sb + "```"); } if (data.Saboteurs.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Saboteurs.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Saboteurs", "```" + sb + "```"); } if (data.Slayers.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Slayers.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Slayers", "```" + sb + "```"); } if (data.Tricksters.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Tricksters.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Tricksters", "```" + sb + "```"); } return(embed.Build()); }
private Embed BuildFirstTopAscendancyEmbed(LeaderboardData data) { var sb = new StringBuilder(); var embed = EmbedHelper.Embed(EmbedHelper.Leaderboard) .WithTitle("Top 10 Characters of each Ascendancy") .WithDescription("Rank is overall and not by Ascendancy.") .WithCurrentTimestamp(); if (data.Ascendants.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Ascendants.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Ascendants", "```" + sb + "```"); } if (data.Assassins.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Assassins.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Assassins", "```" + sb + "```"); } if (data.Berserkers.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Berserkers.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Berserkers", "```" + sb + "```"); } if (data.Champions.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Champions.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Champions", "```" + sb + "```"); } if (data.Chieftains.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Chieftains.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Chieftains", "```" + sb + "```"); } if (data.Deadeyes.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Deadeyes.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Deadeyes", "```" + sb + "```"); } if (data.Elementalists.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Elementalists.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Elementalists", "```" + sb + "```"); } if (data.Gladiators.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Gladiators.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Gladiators", "```" + sb + "```"); } if (data.Guardians.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Guardians.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Guardians", "```" + sb + "```"); } if (data.Hierophants.Count > 0) { sb = new StringBuilder(); foreach (var item in data.Hierophants.Take(10)) { sb = FormatData(sb, item); } embed.AddField("Hierophants", "```" + sb + "```"); } return(embed.Build()); }
private Embed BuildDiscordOnlyEmbed(LeaderboardData data, string leaderboard) { var sb = new StringBuilder(); var embed = EmbedHelper.Embed(EmbedHelper.Leaderboard) .WithTitle("Discordians Only " + leaderboard.Replace("_", " ") + " Leaderboard") .WithDescription("Retrieved " + data.Discordians.Count.ToString("##,##0") + " users with Discord in their name.") .WithCurrentTimestamp() .AddField("Top 10 Characters of each Class Ascendancy", "Rank is overall and not by Ascendancy."); if (data.Discordians.Any(x => x.Class is AscendancyClass.Duelist || x.Class is AscendancyClass.Slayer || x.Class is AscendancyClass.Champion || x.Class is AscendancyClass.Gladiator)) { sb = new StringBuilder(); foreach (var item in data.Discordians.Where(x => x.Class is AscendancyClass.Duelist || x.Class is AscendancyClass.Slayer || x.Class is AscendancyClass.Champion || x.Class is AscendancyClass.Gladiator).Take(10)) { sb = FormatData(sb, item); } embed.AddField("Duelists, Slayers, Champions, Gladiators", "```" + sb + "```"); } if (data.Discordians.Any(x => x.Class is AscendancyClass.Marauder || x.Class is AscendancyClass.Juggernaut || x.Class is AscendancyClass.Chieftain || x.Class is AscendancyClass.Berserker)) { sb = new StringBuilder(); foreach (var item in data.Discordians.Where(x => x.Class is AscendancyClass.Marauder || x.Class is AscendancyClass.Juggernaut || x.Class is AscendancyClass.Chieftain || x.Class is AscendancyClass.Berserker).Take(10)) { sb = FormatData(sb, item); } embed.AddField("Marauders, Juggernauts, Chieftains, Berserkers", "```" + sb + "```"); } if (data.Discordians.Any(x => x.Class is AscendancyClass.Ranger || x.Class is AscendancyClass.Pathfinder || x.Class is AscendancyClass.Deadeye || x.Class is AscendancyClass.Raider)) { sb = new StringBuilder(); foreach (var item in data.Discordians.Where(x => x.Class is AscendancyClass.Ranger || x.Class is AscendancyClass.Pathfinder || x.Class is AscendancyClass.Deadeye || x.Class is AscendancyClass.Raider).Take(10)) { sb = FormatData(sb, item); } embed.AddField("Rangers, Pathfinders, Raiders, Deadeyes", "```" + sb + "```"); } if (data.Discordians.Any(x => x.Class is AscendancyClass.Scion || x.Class is AscendancyClass.Ascendant)) { sb = new StringBuilder(); foreach (var item in data.Discordians.Where(x => x.Class is AscendancyClass.Scion || x.Class is AscendancyClass.Ascendant).Take(10)) { sb = FormatData(sb, item); } embed.AddField("Scions, Ascendants", "```" + sb + "```"); } if (data.Discordians.Any(x => x.Class is AscendancyClass.Shadow || x.Class is AscendancyClass.Saboteur || x.Class is AscendancyClass.Assassin || x.Class is AscendancyClass.Trickster)) { sb = new StringBuilder(); foreach (var item in data.Discordians.Where(x => x.Class is AscendancyClass.Shadow || x.Class is AscendancyClass.Saboteur || x.Class is AscendancyClass.Assassin || x.Class is AscendancyClass.Trickster).Take(10)) { sb = FormatData(sb, item); } embed.AddField("Shadows, Saboteurs, Assassins, Tricksters", "```" + sb + "```"); } if (data.Discordians.Any(x => x.Class is AscendancyClass.Templar || x.Class is AscendancyClass.Guardian || x.Class is AscendancyClass.Inquisitor || x.Class is AscendancyClass.Hierophant)) { sb = new StringBuilder(); foreach (var item in data.Discordians.Where(x => x.Class is AscendancyClass.Templar || x.Class is AscendancyClass.Guardian || x.Class is AscendancyClass.Inquisitor || x.Class is AscendancyClass.Hierophant).Take(10)) { sb = FormatData(sb, item); } embed.AddField("Templars, Guardians, Inquisitors, Hierophants", "```" + sb + "```"); } if (data.Discordians.Any(x => x.Class is AscendancyClass.Witch || x.Class is AscendancyClass.Necromancer || x.Class is AscendancyClass.Occultist || x.Class is AscendancyClass.Elementalist)) { sb = new StringBuilder(); foreach (var item in data.Discordians.Where(x => x.Class is AscendancyClass.Witch || x.Class is AscendancyClass.Necromancer || x.Class is AscendancyClass.Occultist || x.Class is AscendancyClass.Elementalist).Take(10)) { sb = FormatData(sb, item); } embed.AddField("Witches, Necromancers, Occultists, Elementalists", "```" + sb + "```"); } return(embed.Build()); }