コード例 #1
0
        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);
        }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
        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());
        }
コード例 #4
0
        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());
        }
コード例 #5
0
        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());
        }
コード例 #6
0
        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());
        }