Ejemplo n.º 1
0
        public async Task Rank(CommandContext ctx, [Description("The user to check the rank for.")] string user = null)
        {
            if (!LevelingData.Servers.ContainsKey(ctx.Guild.Id))
            {
                await ctx.RespondAsync("Leveling is not enabled for this server.\nUse `%enableleveling` if you wish to enable it.");

                return;
            }
            try
            {
                DiscordMember Member = null;
                if (user == null)
                {
                    Member = ctx.Member;
                }
                else
                {
                    try
                    {
                        Member = await ctx.Guild.FindMemberAsync(user);
                    }
                    catch
                    {
                        await ctx.RespondAsync("I couldn't find that user. Try making sure they're in the server?");
                    }
                }
                LevelingServer lvlServer = LevelingData.Servers[ctx.Guild.Id];
                LevelingUser   lvlUser   = LevelingData.Servers[ctx.Guild.Id].Users[Member.Id];
                lvlServer.SortUsersByRank();
                DiscordEmbedBuilder eb = new DiscordEmbedBuilder();
                eb.WithTitle($"{Member.Username}'s Level");
                eb.WithThumbnail(Member.AvatarUrl);
                eb.WithColor(Utils.CBOrange);
                //This looks bad
                //and it is
                eb.WithDescription($"Level **{lvlUser.Level}**\n{lvlUser.CurrentXP}/{lvlServer.XPNeededForLevel(lvlUser.Level + 1)} XP\nServer rank: **{lvlServer.UsersByRank.IndexOf(lvlServer.UsersByRank.FirstOrDefault(x => x.Id == lvlUser.Id)) + 1}/{lvlServer.UsersByRank.Count}**");
                //eb.WithFooter("This is a beta. Server rankings are coming soon.");
                await ctx.RespondAsync(embed : eb.Build());
            }
            catch
            {
                if (user == null)
                {
                    await ctx.RespondAsync("Either this server hasn't set up ranking, or you aren't ranked!");
                }
                else
                {
                    await ctx.RespondAsync("Either this server hasn't set up ranking, or that user isn't ranked!");
                }
            }
        }
Ejemplo n.º 2
0
        public async Task Leaderboard(CommandContext ctx, int page = 1)
        {
            if (!LevelingData.Servers.ContainsKey(ctx.Guild.Id))
            {
                await ctx.RespondAsync("Leveling is not enabled for this server.\nUse `%enableleveling` if you wish to enable it.");

                return;
            }
            if (page < 1)
            {
                await ctx.RespondAsync("Invalid page number!");
            }
            LevelingServer levelingServer = LevelingData.Servers[ctx.Guild.Id];

            levelingServer.SortUsersByRank();
            if (page == 1)
            {
                int usersToShow        = levelingServer.UsersByRank.Count < 20 ? levelingServer.UsersByRank.Count : 20;
                DiscordEmbedBuilder eb = new DiscordEmbedBuilder
                {
                    Title       = $"{ctx.Guild.Name} Leveling Leaderboard",
                    Description = $"**Showing the top {usersToShow} users**"
                };
                for (int i = 0; i < usersToShow; i++)
                {
                    LevelingUser user = levelingServer.UsersByRank[i];
                    eb.Description += $"\n**{i + 1}.** \t<@!{user.Id}> | Level **{user.Level}** | {user.CurrentXP}/{levelingServer.XPNeededForLevel(user.Level + 1)} XP";
                }
                eb.WithColor(Utils.CBOrange);
                await ctx.RespondAsync(embed : eb.Build());
            }
            else
            {
                DiscordEmbedBuilder eb = new DiscordEmbedBuilder
                {
                    Title       = $"{ctx.Guild.Name} Leveling Leaderboard",
                    Description = $"**Showing page {page}**"
                };
                if (levelingServer.UsersByRank.Count < 20 * (int)(page - 1))
                {
                    await ctx.RespondAsync("No users to show on that page!");
                }
                int usersToShow = levelingServer.UsersByRank.Count - (page - 1 * 20) < 20 ? levelingServer.UsersByRank.Count - (page - 1 * 20) : 20;
                for (int i = (20 * (page - 1)); i < (20 * (page - 1)) + 20; i++)
                {
                    LevelingUser user = levelingServer.UsersByRank[i];
                    eb.Description += $"\n**{i + 1},** \t<@!{user.Id}> | Level **{user.Level}** | {user.CurrentXP}/{levelingServer.XPNeededForLevel(user.Level + 1)} XP";
                }
            }
        }