public LeaderboardsOptions(LeaderboardsType type = LeaderboardsType.EXP, int pageNumber = 0, ulong mentionedUserId = 0, ulong guildId = 0, string commandSpecified = "") { this.type = type; this.pageNumber = pageNumber; this.mentionedUserId = mentionedUserId; this.guildId = guildId; this.commandSpecified = commandSpecified; }
public async Task ShowLeaderboardsAsync(IDiscordMessage e, LeaderboardsType t = LeaderboardsType.Experience) { using (var context = new MikiContext()) { IDiscordEmbed embed = Utils.Embed; Locale locale = Locale.GetEntity(e.Channel.Id.ToDbLong()); switch (t) { case LeaderboardsType.Commands: { embed.Title = locale.GetString("miki_module_accounts_leaderboards_commands_header"); embed.Color = new IA.SDK.Color(0.4f, 1.0f, 0.6f); List <User> output = context.Users.OrderByDescending(x => x.Total_Commands) .Take(12) .ToList(); int i = 1; foreach (User user in output) { embed.AddInlineField($"#{i}: {string.Join("", user.Name.Take(16))}", $"{user.Total_Commands} commands used!"); i++; } await embed.SendToChannel(e.Channel); } break; case LeaderboardsType.Currency: { embed.Title = locale.GetString("miki_module_accounts_leaderboards_mekos_header"); embed.Color = new IA.SDK.Color(1.0f, 0.6f, 0.4f); List <User> output = context.Users.OrderByDescending(x => x.Currency) .Take(12) .ToList(); int i = 1; foreach (User user in output) { embed.AddInlineField($"#{i}: {string.Join("", user.Name.Take(16))}", $"{user.Currency} mekos!"); i++; } await embed.SendToChannel(e.Channel); } break; case LeaderboardsType.LocalExperience: { embed.Title = locale.GetString("miki_module_accounts_leaderboards_local_header"); embed.Color = new IA.SDK.Color(1.0f, 0.6f, 0.4f); long guildId = e.Guild.Id.ToDbLong(); List <LocalExperience> output = context.Experience.Where(x => x.ServerId == guildId).OrderByDescending(x => x.Experience).ToList(); List <User> users = context.Users.Where(x => output.Any(y => y.UserId == x.Id)).ToList(); int i = 1; foreach (User user in users) { embed.AddInlineField($"#{i}: {string.Join("", user.Name.Take(16))}", $"{output.Find(x => x.UserId == user.Id).Experience} experience!"); i++; } await embed.SendToChannel(e.Channel); } break; case LeaderboardsType.Experience: { embed.Title = locale.GetString("miki_module_accounts_leaderboards_header"); embed.Color = new IA.SDK.Color(1.0f, 0.6f, 0.4f); List <User> output = context.Users.OrderByDescending(x => x.Total_Experience) .Take(12) .ToList(); int i = 1; foreach (User user in output) { embed.AddInlineField($"#{i}: {string.Join("", user.Name.Take(16))}", $"{user.Total_Experience} experience!"); i++; } await embed.SendToChannel(e.Channel); } break; } } }
public async Task ShowLeaderboardsAsync(IDiscordMessage mContext, LeaderboardsType leaderboardType = LeaderboardsType.Experience, int page = 1) { using (var context = new MikiContext()) { Locale locale = Locale.GetEntity(mContext.Channel.Id.ToDbLong()); int p = Math.Max(page - 1, 0); IDiscordEmbed embed = Utils.Embed .SetColor(1.0f, 0.6f, 0.4f) .SetFooter(locale.GetString("page_index", p + 1, Math.Ceiling(context.Users.Count() / 12f)), ""); switch (leaderboardType) { case LeaderboardsType.Commands: { embed.Title = locale.GetString("miki_module_accounts_leaderboards_commands_header"); List <User> output = await context.Users .OrderByDescending(x => x.Total_Commands) .Skip(12 * p) .Take(12) .ToListAsync(); for (int i = 0; i < output.Count; i++) { embed.AddInlineField($"#{i + (12 * p) + 1}: {string.Join("", output[i].Name.Take(16))}", $"{output[i].Total_Commands} commands used!"); } await embed.SendToChannel(mContext.Channel); } break; case LeaderboardsType.Currency: { embed.Title = locale.GetString("miki_module_accounts_leaderboards_mekos_header"); List <User> output = await context.Users .OrderByDescending(x => x.Currency) .Skip(12 * p) .Take(12) .ToListAsync(); for (int i = 0; i < output.Count; i++) { embed.AddInlineField($"#{i + (12 * p) + 1}: {string.Join("", output[i].Name.Take(16))}", $"{output[i].Currency} mekos!"); } await embed.SendToChannel(mContext.Channel); } break; case LeaderboardsType.LocalExperience: { embed.Title = locale.GetString("miki_module_accounts_leaderboards_local_header"); long guildId = mContext.Guild.Id.ToDbLong(); List <LocalExperience> output = await context.Experience .Where(x => x.ServerId == guildId) .OrderByDescending(x => x.Experience) .Skip(12 * p) .Take(12) .ToListAsync(); int amountOfUsers = await context.Experience.Where(x => x.ServerId == guildId).CountAsync(); List <User> users = new List <User>(); for (int i = 0; i < output.Count; i++) { users.Add(await context.Users.FindAsync(output[i].UserId)); } for (int i = 0; i < users.Count; i++) { embed.AddInlineField($"#{i + (12 * p) + 1} : {string.Join("", users[i].Name.Take(16))}", $"{output[i].Experience} experience!"); } await embed.SendToChannel(mContext.Channel); } break; case LeaderboardsType.Experience: { embed.Title = locale.GetString("miki_module_accounts_leaderboards_header"); List <User> output = await context.Users .OrderByDescending(x => x.Total_Experience) .Skip(12 * p) .Take(12) .ToListAsync(); for (int i = 0; i < output.Count; i++) { embed.AddInlineField($"#{i + (12 * p) + 1}: {string.Join("", output[i].Name.Take(16))}", $"{output[i].Total_Experience} experience!"); } await embed.SendToChannel(mContext.Channel); } break; case LeaderboardsType.Reputation: { embed.Title = locale.GetString("miki_module_accounts_leaderboards_reputation_header"); List <User> output = await context.Users .OrderByDescending(x => x.Reputation) .Skip(12 * p) .Take(12) .ToListAsync(); for (int i = 0; i < output.Count; i++) { embed.AddInlineField($"#{i + (12 * p) + 1}: {string.Join("", output[i].Name.Take(16))}", $"{output[i].Reputation} reputation!"); } await embed.SendToChannel(mContext.Channel); } break; } } }