public static async Task <KuvuUser> GetKuvuUser(this DiscordUser user, KuvuGuild guild, BotContext botContext = null) { if (user.IsBot) { throw new BotKuvuUserException(); } botContext ??= new BotContext(); var kuvuUser = await botContext.Users.FirstOrDefaultAsync(g => g.DiscordUser == user.Id && g.Guild == guild); if (kuvuUser == null) { kuvuUser = new KuvuUser { DiscordUser = user.Id, Exp = 0, Guild = guild }; await botContext.Users.AddAsync(kuvuUser); await botContext.SaveChangesAsync(); } return(kuvuUser); }
public async Task Leaderboard(CommandContext ctx) { var emojis = new Dictionary <int, string> { [1] = ":first_place:", [2] = ":second_place:", [3] = ":third_place:", [4] = ":four:", [5] = ":five:", [6] = ":six:", [7] = ":seven:", [8] = ":eight:", [9] = ":nine:", [10] = ":keycap_ten:" }; var botContext = new BotContext(); var i = 1; var users = botContext.Users.Where(u => u.Guild.GuildId == ctx.Guild.Id).OrderByDescending(u => u.Exp).Take(10).ToList(); await new ModernEmbedBuilder { Title = ":trophy: " + await ctx.Lang("leaderboard.title"), Description = (await users.SelectAsync(async u => $"**{emojis[i++]} {(await ctx.Guild.GetMemberAsync(u.DiscordUser)).Name(true)}** - level: {u.GetLevel()} ({u.Exp}/{KuvuUser.ConvertLevelToExp(u.GetLevel() + 1)} exp)")).Join("\n"), Url = $"https://kuvubot.xyz/leaderboard/{ctx.Guild.Id}" }.AddGeneratedForFooter(ctx).Send(ctx.Message.Channel); }