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!"); } } }
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"; } } }