public async Task GuildProfile(EventContext e) { using (MikiContext context = new MikiContext()) { GuildUser g = await context.GuildUsers.FindAsync(e.Guild.Id.ToDbLong()); int rank = await g.GetGlobalRankAsync(context); int level = g.CalculateLevel(g.Experience); EmojiBarSet onBarSet = new EmojiBarSet("<:mbarlefton:391971424442646534>", "<:mbarmidon:391971424920797185>", "<:mbarrighton:391971424488783875>"); EmojiBarSet offBarSet = new EmojiBarSet("<:mbarleftoff:391971424824459265>", "<:mbarmidoff:391971424824197123>", "<:mbarrightoff:391971424862208000>"); EmojiBar expBar = new EmojiBar(g.CalculateMaxExperience(g.Experience), onBarSet, offBarSet, 6); EmbedBuilder embed = new EmbedBuilder() .SetAuthor(g.Name, e.Guild.IconUrl, "https://miki.veld.one") .SetColor(0.1f, 0.6f, 1) .AddInlineField(e.Locale.GetString("miki_terms_level"), level.ToFormattedString()); if ((e.Guild.IconUrl ?? "") != "") { embed.SetThumbnail("http://veld.one/assets/img/transparentfuckingimage.png"); } string expBarString = await expBar.Print(g.Experience, e.Guild, e.Channel as IDiscordGuildChannel); if (string.IsNullOrWhiteSpace(expBarString)) { embed.AddInlineField(e.Locale.GetString("miki_terms_experience"), "[" + g.Experience.ToFormattedString() + " / " + g.CalculateMaxExperience(g.Experience).ToFormattedString() + "]"); } else { embed.AddInlineField(e.Locale.GetString("miki_terms_experience") + $" [{g.Experience.ToFormattedString()} / {g.CalculateMaxExperience(g.Experience).ToFormattedString()}]", expBarString); } embed.AddInlineField( e.Locale.GetString("miki_terms_rank"), "#" + ((rank <= 10) ? $"**{rank.ToFormattedString()}**" : rank.ToFormattedString()) ).AddInlineField( e.Locale.GetString("miki_module_general_guildinfo_users"), g.UserCount.ToString() ); GuildUser rival = await g.GetRivalOrDefaultAsync(context); if (rival != null) { embed.AddInlineField(e.Locale.GetString("miki_terms_rival"), $"{rival.Name} [{rival.Experience.ToFormattedString()}]"); } embed.ToEmbed().QueueToChannel(e.Channel); } }
public async Task GuildProfile(EventContext context) { using (MikiContext database = new MikiContext()) { GuildUser g = await database.GuildUsers.FindAsync(context.Guild.Id.ToDbLong()); if (g == null) { await GuildUser.Create(context.Guild); g = await database.GuildUsers.FindAsync(context.Guild.Id.ToDbLong()); } int rank = g.GetGlobalRank(); int level = g.CalculateLevel(g.Experience); EmojiBarSet onBarSet = new EmojiBarSet("<:mbaronright:334479818924228608>", "<:mbaronmid:334479818848468992>", "<:mbaronleft:334479819003789312>"); EmojiBarSet offBarSet = new EmojiBarSet("<:mbaroffright:334479818714513430>", "<:mbaroffmid:334479818504536066>", "<:mbaroffleft:334479818949394442>"); EmojiBar expBar = new EmojiBar(g.CalculateMaxExperience(g.Experience), onBarSet, offBarSet, 6); IDiscordEmbed embed = Utils.Embed .SetAuthor(g.Name, context.Guild.AvatarUrl, "https://miki.veld.one") .SetColor(0.1f, 0.6f, 1) .SetThumbnailUrl("http://veld.one/assets/img/transparentfuckingimage.png") .AddInlineField(context.GetResource("miki_terms_level"), level.ToString()); string expBarString = await expBar.Print(g.Experience, context.Channel); if (string.IsNullOrWhiteSpace(expBarString)) { embed.AddInlineField(context.GetResource("miki_terms_experience"), "[" + g.Experience + " / " + g.CalculateMaxExperience(g.Experience) + "]"); } else { embed.AddInlineField(context.GetResource("miki_terms_experience") + $" [{g.Experience} / {g.CalculateMaxExperience(g.Experience)}]", expBarString); } embed.AddInlineField(context.GetResource("miki_terms_rank"), "#" + ((rank <= 10) ? $"**{rank}**" : rank.ToString())) .AddInlineField(context.GetResource("miki_module_general_guildinfo_users"), g.UserCount.ToString()); if (g.RivalId != 0) { GuildUser rival = await g.GetRival(); embed.AddInlineField(context.GetResource("miki_terms_rival"), $"{rival.Name} [{rival.Experience}]"); } await embed.SendToChannel(context.Channel); } }
public async Task GuildProfile(IContext e) { var context = e.GetService <MikiDbContext>(); var locale = e.GetLocale(); GuildUser g = await context.GuildUsers.FindAsync(e.GetGuild().Id.ToDbLong()); int rank = await g.GetGlobalRankAsync(context); int level = g.CalculateLevel(g.Experience); EmojiBarSet onBarSet = new EmojiBarSet("<:mbarlefton:391971424442646534>", "<:mbarmidon:391971424920797185>", "<:mbarrighton:391971424488783875>"); EmojiBarSet offBarSet = new EmojiBarSet("<:mbarleftoff:391971424824459265>", "<:mbarmidoff:391971424824197123>", "<:mbarrightoff:391971424862208000>"); EmojiBar expBar = new EmojiBar(g.CalculateMaxExperience(g.Experience), onBarSet, offBarSet, 6); EmbedBuilder embed = new EmbedBuilder() .SetAuthor(g.Name, e.GetGuild().IconUrl, "https://miki.veld.one") .SetColor(0.1f, 0.6f, 1) .AddInlineField(locale.GetString("miki_terms_level"), level.ToString("N0")); if ((e.GetGuild().IconUrl ?? "") != "") { embed.SetThumbnail("http://veld.one/assets/img/transparentfuckingimage.png"); } string expBarString = expBar.Print(g.Experience); embed.AddInlineField(e.GetLocale().GetString("miki_terms_experience"), $"[{g.Experience:N0} / {g.CalculateMaxExperience(g.Experience):N0}]\n" + (expBarString ?? "")); embed.AddInlineField( e.GetLocale().GetString("miki_terms_rank"), "#" + (rank <= 10 ? $"**{rank:N0}**" : rank.ToString("N0")) ).AddInlineField( e.GetLocale().GetString("miki_module_general_guildinfo_users"), g.UserCount.ToString() ); GuildUser rival = await g.GetRivalOrDefaultAsync(context); if (rival != null) { embed.AddInlineField(e.GetLocale().GetString("miki_terms_rival"), $"{rival.Name} [{rival.Experience:N0}]"); } await embed.ToEmbed() .QueueAsync(e, e.GetChannel()); }
public async Task GuildProfile(EventContext e) { using (MikiContext context = new MikiContext()) { GuildUser g = await GuildUser.GetAsync(context, e.Guild); int rank = g.GetGlobalRank(); int level = g.CalculateLevel(g.Experience); EmojiBarSet onBarSet = new EmojiBarSet("<:mbarlefton:391971424442646534>", "<:mbarmidon:391971424920797185>", "<:mbarrighton:391971424488783875>"); EmojiBarSet offBarSet = new EmojiBarSet("<:mbarleftoff:391971424824459265>", "<:mbarmidoff:391971424824197123>", "<:mbarrightoff:391971424862208000>"); EmojiBar expBar = new EmojiBar(g.CalculateMaxExperience(g.Experience), onBarSet, offBarSet, 6); IDiscordEmbed embed = Utils.Embed .SetAuthor(g.Name, e.Guild.AvatarUrl, "https://miki.veld.one") .SetColor(0.1f, 0.6f, 1) .SetThumbnailUrl("http://veld.one/assets/img/transparentfuckingimage.png") .AddInlineField(e.GetResource("miki_terms_level"), level.ToString()); string expBarString = await expBar.Print(g.Experience, e.Channel); if (string.IsNullOrWhiteSpace(expBarString)) { embed.AddInlineField(e.GetResource("miki_terms_experience"), "[" + g.Experience + " / " + g.CalculateMaxExperience(g.Experience) + "]"); } else { embed.AddInlineField(e.GetResource("miki_terms_experience") + $" [{g.Experience} / {g.CalculateMaxExperience(g.Experience)}]", expBarString); } embed.AddInlineField(e.GetResource("miki_terms_rank"), "#" + ((rank <= 10) ? $"**{rank}**" : rank.ToString())) .AddInlineField(e.GetResource("miki_module_general_guildinfo_users"), g.UserCount.ToString()); if (g.RivalId != 0) { GuildUser rival = await g.GetRival(); embed.AddInlineField(e.GetResource("miki_terms_rival"), $"{rival.Name} [{rival.Experience}]"); } await embed.QueueToChannel(e.Channel); } }
public async Task ProfileAsync(EventContext e) { Stopwatch sw = new Stopwatch(); sw.Start(); using (var context = new MikiContext()) { long id = 0; ulong uid = 0; var arg = e.Arguments.FirstOrDefault(); if (arg != null) { uid = (await arg.GetUserAsync(e.Guild)).Id; id = uid.ToDbLong(); } else { uid = e.message.Author.Id; id = uid.ToDbLong(); } IDiscordGuildUser discordUser = await e.Guild.GetUserAsync(uid); User account = await User.GetAsync(context, discordUser); string icon = ""; if (await account.IsDonatorAsync(context)) { icon = "https://cdn.discordapp.com/emojis/421969679561785354.png"; } if (account != null) { EmbedBuilder embed = Utils.Embed .SetDescription(account.Title) .SetAuthor(e.GetResource("miki_global_profile_user_header", account.Name), icon, "https://patreon.com/mikibot") .SetThumbnail(discordUser.GetAvatarUrl()); long serverid = e.Guild.Id.ToDbLong(); LocalExperience localExp = await LocalExperience.GetAsync(context, e.Guild.Id.ToDbLong(), discordUser); if (localExp == null) { localExp = await LocalExperience.CreateAsync(context, serverid, discordUser); } int rank = await localExp.GetRank(context); int localLevel = User.CalculateLevel(localExp.Experience); int maxLocalExp = User.CalculateLevelExperience(localLevel); int minLocalExp = User.CalculateLevelExperience(localLevel - 1); EmojiBar expBar = new EmojiBar(maxLocalExp - minLocalExp, onBarSet, offBarSet, 6); string infoValue = new MessageBuilder() .AppendText(e.GetResource("miki_module_accounts_information_level", localLevel, localExp.Experience, maxLocalExp)) .AppendText(await expBar.Print(localExp.Experience - minLocalExp, (IDiscordGuildChannel)e.Channel)) .AppendText(e.GetResource("miki_module_accounts_information_rank", rank)) .AppendText("Reputation: " + account.Reputation, MessageFormatting.Plain, false) .Build(); embed.AddInlineField(e.GetResource("miki_generic_information"), infoValue); int globalLevel = User.CalculateLevel(account.Total_Experience); int maxGlobalExp = User.CalculateLevelExperience(globalLevel); int minGlobalExp = User.CalculateLevelExperience(globalLevel - 1); int globalRank = await account.GetGlobalRankAsync(); EmojiBar globalExpBar = new EmojiBar(maxGlobalExp - minGlobalExp, onBarSet, offBarSet, 6); string globalInfoValue = new MessageBuilder() .AppendText(e.GetResource("miki_module_accounts_information_level", globalLevel, account.Total_Experience, maxGlobalExp)) .AppendText( await globalExpBar.Print(account.Total_Experience - minGlobalExp, e.Channel as IDiscordGuildChannel) ) .AppendText(e.GetResource("miki_module_accounts_information_rank", globalRank), MessageFormatting.Plain, false) .Build(); embed.AddInlineField(e.GetResource("miki_generic_global_information"), globalInfoValue); embed.AddInlineField(e.GetResource("miki_generic_mekos"), account.Currency + "<:mekos:421972155484471296>"); List <UserMarriedTo> Marriages = await Marriage.GetMarriagesAsync(context, id); Marriages.RemoveAll(x => x.Marriage.IsProposing); List <string> users = new List <string>(); int maxCount = Marriages?.Count ?? 0; for (int i = 0; i < maxCount; i++) { users.Add(await User.GetNameAsync(context, Marriages[i].GetOther(id))); } if (Marriages?.Count > 0) { List <string> MarriageStrings = new List <string>(); for (int i = 0; i < maxCount; i++) { if (Marriages[i].GetOther(id) != 0) { MarriageStrings.Add($"💕 {users[i]} (_{Marriages[i].Marriage.TimeOfMarriage.ToShortDateString()}_)"); } } string marriageText = string.Join("\n", MarriageStrings); if (string.IsNullOrEmpty(marriageText)) { marriageText = e.GetResource("miki_placeholder_null"); } embed.AddInlineField( e.GetResource("miki_module_accounts_profile_marriedto"), marriageText); } Random r = new Random((int)id - 3); Color c = new Color((float)r.NextDouble(), (float)r.NextDouble(), (float)r.NextDouble()); embed.SetColor(c); CommandUsage favouriteCommand = await context.CommandUsages .OrderByDescending(x => x.Amount) .FirstOrDefaultAsync(x => x.UserId == id); string favCommand = $"{favouriteCommand?.Name ?? e.GetResource("miki_placeholder_null")} ({ favouriteCommand?.Amount ?? 0 })"; embed.AddInlineField(e.GetResource("miki_module_accounts_profile_favourite_command"), favCommand); List <Achievement> allAchievements = await context.Achievements.Where(x => x.Id == id).ToListAsync(); string achievements = e.GetResource("miki_placeholder_null"); if (allAchievements != null) { if (allAchievements.Count > 0) { achievements = AchievementManager.Instance.PrintAchievements(allAchievements); } } embed.AddInlineField( e.GetResource("miki_generic_achievements"), achievements); embed.SetFooter( e.GetResource("miki_module_accounts_profile_footer", account.DateCreated.ToShortDateString(), sw.ElapsedMilliseconds), ""); sw.Stop(); embed.ToEmbed().QueueToChannel(e.Channel); } else { e.ErrorEmbed(e.GetResource("error_account_null")) .ToEmbed().QueueToChannel(e.Channel); } } }
public async Task ProfileAsync(IContext e) { var args = e.GetArgumentPack(); var locale = e.GetLocale(); var context = e.GetService <MikiDbContext>(); var userService = e.GetService <IUserService>(); var leaderboardsService = e.GetService <LeaderboardsService>(); var guild = e.GetGuild(); IDiscordGuildUser self = null; if (guild != null) { self = await guild.GetSelfAsync(); } var discordUser = args.Take(out string arg) ? await e.GetGuild().FindUserAsync(arg) : e.GetAuthor(); var account = await userService.GetOrCreateUserAsync(discordUser); var embed = new EmbedBuilder() .SetDescription(account.Title) .SetAuthor( locale.GetString("miki_global_profile_user_header", discordUser.Username), await GetProfileIconAsync(userService, (long)discordUser.Id), "https://patreon.com/mikibot") .SetThumbnail(discordUser.GetAvatarUrl()); var infoValueBuilder = new MessageBuilder(); if (e.GetGuild() != null) { var localExp = await LocalExperience.GetAsync( context, e.GetGuild().Id, discordUser.Id); if (localExp == null) { localExp = await LocalExperience.CreateAsync( context, e.GetGuild().Id, discordUser.Id, discordUser.Username); } var rank = await leaderboardsService.GetLocalRankAsync( (long)e.GetGuild().Id, x => x.Experience > localExp.Experience); var localLevel = User.CalculateLevel(localExp.Experience); var maxLocalExp = User.CalculateLevelExperience(localLevel); var minLocalExp = User.CalculateLevelExperience(localLevel - 1); var expBar = new EmojiBar(maxLocalExp - minLocalExp, onBarSet, offBarSet, 6); infoValueBuilder.AppendText(e.GetLocale().GetString( "miki_module_accounts_information_level", localLevel, localExp.Experience.ToString("N0"), maxLocalExp.ToString("N0"))); if (self == null || await self.HasPermissionsAsync(GuildPermission.UseExternalEmojis)) { infoValueBuilder.AppendText( expBar.Print(localExp.Experience - minLocalExp)); } infoValueBuilder.AppendText(locale.GetString( "miki_module_accounts_information_rank", rank.ToString("N0"))); } infoValueBuilder.AppendText( $"Reputation: {account.Reputation:N0}", newLine: false); embed.AddInlineField(locale.GetString("miki_generic_information"), infoValueBuilder.Build()); var globalLevel = User.CalculateLevel(account.Total_Experience); var maxGlobalExp = User.CalculateLevelExperience(globalLevel); var minGlobalExp = User.CalculateLevelExperience(globalLevel - 1); var globalRank = await leaderboardsService.GetGlobalRankAsync((long)discordUser.Id); var globalExpBar = new EmojiBar( maxGlobalExp - minGlobalExp, onBarSet, offBarSet, 6); var globalInfoBuilder = new MessageBuilder() .AppendText(locale.GetString( "miki_module_accounts_information_level", globalLevel.ToString("N0"), account.Total_Experience.ToString("N0"), maxGlobalExp.ToString("N0"))); if (self == null || await self.HasPermissionsAsync(GuildPermission.UseExternalEmojis)) { globalInfoBuilder.AppendText( globalExpBar.Print(maxGlobalExp - minGlobalExp)); } var globalInfo = globalInfoBuilder .AppendText( locale.GetString( "miki_module_accounts_information_rank", globalRank?.ToString("N0") ?? "We haven't calculated your rank yet!"), MessageFormatting.Plain, false) .Build(); embed.AddInlineField( locale.GetString("miki_generic_global_information"), globalInfo); embed.AddInlineField( locale.GetString("miki_generic_mekos"), $"{account.Currency:N0} {AppProps.Emoji.Mekos}"); var repository = e.GetService <MarriageService>(); var marriages = (await repository.GetMarriagesAsync((long)discordUser.Id)) .Where(x => !x.Marriage.IsProposing) .ToList(); var users = new List <string>(); var maxCount = marriages.Count; for (var i = 0; i < maxCount; i++) { users.Add((await e.GetService <IDiscordClient>() .GetUserAsync(marriages[i].GetOther(discordUser.Id))).Username); } if (marriages.Count > 0) { List <string> marriageStrings = new List <string>(); for (int i = 0; i < maxCount; i++) { if (marriages[i].GetOther((long)discordUser.Id) == 0) { continue; } marriageStrings.Add( $"💕 {users[i]} (_{marriages[i].Marriage.TimeOfMarriage.ToShortDateString()}_)"); } string marriageText = string.Join("\n", marriageStrings); if (string.IsNullOrEmpty(marriageText)) { marriageText = locale.GetString("miki_placeholder_null"); } embed.AddInlineField( locale.GetString("miki_module_accounts_profile_marriedto"), marriageText); } var random = new Random((int)(discordUser.Id - 3)); embed.SetColor( (float)random.NextDouble(), (float)random.NextDouble(), (float)random.NextDouble()); List <Achievement> allAchievements = await context.Achievements .Where(x => x.UserId == (long)discordUser.Id) .ToListAsync(); var achievementService = e.GetService <AchievementService>(); var achievements = allAchievements?.Any() ?? false ? achievementService.PrintAchievements(allAchievements) : locale.GetString("miki_placeholder_null"); embed.AddInlineField( locale.GetString("miki_generic_achievements"), achievements); await embed.ToEmbed() .QueueAsync(e, e.GetChannel()); }
public async Task ProfileAsync(EventContext e) { Stopwatch sw = new Stopwatch(); sw.Start(); using (var context = new MikiContext()) { long id = 0; ulong uid = 0; if (e.message.MentionedUserIds.Count() > 0) { uid = e.message.MentionedUserIds.First(); id = uid.ToDbLong(); } else { uid = e.message.Author.Id; id = uid.ToDbLong(); } User account = await context.Users.FindAsync(id); Locale locale = Locale.GetEntity(e.Channel.Id.ToDbLong()); IDiscordUser discordUser = await e.Guild.GetUserAsync(uid); if (account != null) { IDiscordEmbed embed = Utils.Embed .SetDescription(account.Title) .SetAuthor(locale.GetString("miki_global_profile_user_header", account.Name), "http://veld.one/assets/profile-icon.png", "https://patreon.com/mikibot") .SetThumbnailUrl(discordUser.AvatarUrl); long serverid = e.Guild.Id.ToDbLong(); LocalExperience localExp = await context.Experience.FindAsync(serverid, id); int globalExp = account.Total_Experience; int rank = await account.GetLocalRank(e.Guild.Id); EmojiBarSet onBarSet = new EmojiBarSet("<:mbaronright:334479818924228608>", "<:mbaronmid:334479818848468992>", "<:mbaronleft:334479819003789312>"); EmojiBarSet offBarSet = new EmojiBarSet("<:mbaroffright:334479818714513430>", "<:mbaroffmid:334479818504536066>", "<:mbaroffleft:334479818949394442>"); EmojiBar expBar = new EmojiBar(account.CalculateMaxExperience(localExp.Experience), onBarSet, offBarSet, 6); string infoValue = new MessageBuilder() .AppendText(locale.GetString("miki_module_accounts_information_level", account.CalculateLevel(localExp.Experience), localExp.Experience, account.CalculateMaxExperience(localExp.Experience))) .AppendText(await expBar.Print(localExp.Experience, e.Channel)) .AppendText(locale.GetString("miki_module_accounts_information_rank", rank)) .AppendText("Reputation: " + account.Reputation, MessageFormatting.PLAIN, false) .Build(); embed.AddInlineField(locale.GetString("miki_generic_information"), infoValue); int globalLevel = account.CalculateLevel(account.Total_Experience); int globalRank = account.CalculateMaxExperience(account.Total_Experience); EmojiBar globalExpBar = new EmojiBar(account.CalculateMaxExperience(account.Total_Experience), onBarSet, offBarSet, 6); string globalInfoValue = new MessageBuilder() .AppendText(locale.GetString("miki_module_accounts_information_level", globalLevel, account.Total_Experience, globalRank)) .AppendText(await globalExpBar.Print(account.Total_Experience, e.Channel)) .AppendText(locale.GetString("miki_module_accounts_information_rank", account.GetGlobalRank()), MessageFormatting.PLAIN, false) .Build(); embed.AddInlineField(locale.GetString("miki_generic_global_information"), globalInfoValue); embed.AddInlineField(locale.GetString("miki_generic_mekos"), account.Currency + "🔸"); List <Marriage> marriages = Marriage.GetMarriages(context, id); marriages = marriages.OrderBy(mar => mar.TimeOfMarriage).ToList(); List <User> users = new List <User>(); int maxCount = marriages.Count; for (int i = 0; i < maxCount; i++) { users.Add(await context.Users.FindAsync(marriages[i].GetOther(id))); } if (marriages.Count > 0) { List <string> marriageStrings = new List <string>(); for (int i = 0; i < maxCount; i++) { if (marriages[i].GetOther(id) != 0 && marriages[i].TimeOfMarriage != null) { marriageStrings.Add("💕 " + users[i].Name + " (_" + marriages[i].TimeOfMarriage.ToShortDateString() + "_)"); } } embed.AddInlineField( locale.GetString("miki_module_accounts_profile_marriedto"), string.Join("\n", marriageStrings)); } Random r = new Random((int)id - 3); embed.Color = new IA.SDK.Color((float)r.NextDouble(), (float)r.NextDouble(), (float)r.NextDouble()); List <CommandUsage> List = context.CommandUsages.Where(c => c.UserId == id).OrderByDescending(c => c.Amount).ToList(); string favCommand = (List.Count > 0) ? List[0].Name + " (" + List[0].Amount + ")" : "none (yet!)"; embed.AddInlineField(locale.GetString("miki_module_accounts_profile_favourite_command"), favCommand); string achievements = AchievementManager.Instance.PrintAchievements(context, account.Id.FromDbLong()); embed.AddInlineField( locale.GetString("miki_generic_achievements"), achievements != "" ? achievements : locale.GetString("miki_placeholder_null")); embed.AddInlineField(locale.GetString("miki_module_accounts_profile_url"), "http://miki.veld.one/profile/" + account.Id); embed.SetFooter(locale.GetString("miki_module_accounts_profile_footer", account.DateCreated.ToShortDateString(), sw.ElapsedMilliseconds), ""); sw.Stop(); await embed.SendToChannel(e.Channel); } else { await Utils.ErrorEmbed(locale, locale.GetString("miki_module_accounts_error_null")).SendToChannel(e.Channel); } } }
public async Task ProfileAsync(CommandContext e) { Stopwatch sw = new Stopwatch(); sw.Start(); var context = e.GetService <MikiDbContext>(); long id = 0; ulong uid = 0; IDiscordGuildUser discordUser = null; MarriageRepository repository = new MarriageRepository(context); if (e.Arguments.Take(out string arg)) { discordUser = await DiscordExtensions.GetUserAsync(arg, e.Guild); if (discordUser == null) { throw new UserNullException(); } uid = discordUser.Id; id = uid.ToDbLong(); } else { uid = e.Message.Author.Id; discordUser = await e.Guild.GetMemberAsync(uid); id = uid.ToDbLong(); } User account = await User.GetAsync(context, discordUser.Id.ToDbLong(), discordUser.Username); string icon = ""; if (await account.IsDonatorAsync(context)) { icon = "https://cdn.discordapp.com/emojis/421969679561785354.png"; } if (account != null) { EmbedBuilder embed = new EmbedBuilder() .SetDescription(account.Title) .SetAuthor(e.Locale.GetString("miki_global_profile_user_header", discordUser.Username), icon, "https://patreon.com/mikibot") .SetThumbnail(discordUser.GetAvatarUrl()); long serverid = e.Guild.Id.ToDbLong(); LocalExperience localExp = await LocalExperience.GetAsync(context, e.Guild.Id.ToDbLong(), (long)discordUser.Id, discordUser.Username); int rank = await localExp.GetRankAsync(context); int localLevel = User.CalculateLevel(localExp.Experience); int maxLocalExp = User.CalculateLevelExperience(localLevel); int minLocalExp = User.CalculateLevelExperience(localLevel - 1); EmojiBar expBar = new EmojiBar(maxLocalExp - minLocalExp, onBarSet, offBarSet, 6); string infoValue = new MessageBuilder() .AppendText(e.Locale.GetString("miki_module_accounts_information_level", localLevel, localExp.Experience.ToFormattedString(), maxLocalExp.ToFormattedString())) .AppendText(await expBar.Print(localExp.Experience - minLocalExp, e.Guild, (IDiscordGuildChannel)e.Channel)) .AppendText(e.Locale.GetString("miki_module_accounts_information_rank", rank.ToFormattedString())) .AppendText("Reputation: " + account.Reputation.ToFormattedString(), MessageFormatting.Plain, false) .Build(); embed.AddInlineField(e.Locale.GetString("miki_generic_information"), infoValue); int globalLevel = User.CalculateLevel(account.Total_Experience); int maxGlobalExp = User.CalculateLevelExperience(globalLevel); int minGlobalExp = User.CalculateLevelExperience(globalLevel - 1); int?globalRank = await account.GetGlobalRankAsync(context); EmojiBar globalExpBar = new EmojiBar(maxGlobalExp - minGlobalExp, onBarSet, offBarSet, 6); string globalInfoValue = new MessageBuilder() .AppendText(e.Locale.GetString("miki_module_accounts_information_level", globalLevel.ToFormattedString(), account.Total_Experience.ToFormattedString(), maxGlobalExp.ToFormattedString())) .AppendText( await globalExpBar.Print(account.Total_Experience - minGlobalExp, e.Guild, e.Channel as IDiscordGuildChannel) ) .AppendText(e.Locale.GetString("miki_module_accounts_information_rank", globalRank?.ToFormattedString() ?? "We haven't calculated your rank yet!"), MessageFormatting.Plain, false) .Build(); embed.AddInlineField(e.Locale.GetString("miki_generic_global_information"), globalInfoValue); embed.AddInlineField(e.Locale.GetString("miki_generic_mekos"), account.Currency.ToFormattedString() + "<:mekos:421972155484471296>"); List <UserMarriedTo> Marriages = await repository.GetMarriagesAsync(id); Marriages.RemoveAll(x => x.Marriage.IsProposing); List <string> users = new List <string>(); int maxCount = Marriages?.Count ?? 0; for (int i = 0; i < maxCount; i++) { users.Add((await MikiApp.Instance.Discord.GetUserAsync(Marriages[i].GetOther(id).FromDbLong())).Username); } if (Marriages?.Count > 0) { List <string> MarriageStrings = new List <string>(); for (int i = 0; i < maxCount; i++) { if (Marriages[i].GetOther(id) != 0) { MarriageStrings.Add($"💕 {users[i]} (_{Marriages[i].Marriage.TimeOfMarriage.ToShortDateString()}_)"); } } string marriageText = string.Join("\n", MarriageStrings); if (string.IsNullOrEmpty(marriageText)) { marriageText = e.Locale.GetString("miki_placeholder_null"); } embed.AddInlineField( e.Locale.GetString("miki_module_accounts_profile_marriedto"), marriageText); } Random r = new Random((int)id - 3); Color c = new Color((float)r.NextDouble(), (float)r.NextDouble(), (float)r.NextDouble()); embed.SetColor(c); List <Achievement> allAchievements = await context.Achievements.Where(x => x.UserId == id) .ToListAsync(); string achievements = e.Locale.GetString("miki_placeholder_null"); if (allAchievements != null) { if (allAchievements.Count > 0) { achievements = AchievementManager.Instance.PrintAchievements(allAchievements); } } embed.AddInlineField( e.Locale.GetString("miki_generic_achievements"), achievements); embed.SetFooter( e.Locale.GetString( "miki_module_accounts_profile_footer", account.DateCreated.ToShortDateString(), sw.ElapsedMilliseconds), ""); sw.Stop(); await embed.ToEmbed().QueueToChannelAsync(e.Channel); } else { await e.ErrorEmbed(e.Locale.GetString("error_account_null")) .ToEmbed().QueueToChannelAsync(e.Channel); } }
public async Task ProfileAsync(EventContext e) { Stopwatch sw = new Stopwatch(); sw.Start(); using (var context = new MikiContext()) { long id = 0; ulong uid = 0; if (e.message.MentionedUserIds.Any()) { uid = e.message.MentionedUserIds.First(); id = uid.ToDbLong(); } else { uid = e.message.Author.Id; id = uid.ToDbLong(); } Locale locale = new Locale(e.Channel.Id.ToDbLong()); IDiscordUser discordUser = await e.Guild.GetUserAsync(uid); User account = await User.GetAsync(context, discordUser); EmojiBarSet onBarSet = new EmojiBarSet( "<:mbarlefton:391971424442646534>", "<:mbarmidon:391971424920797185>", "<:mbarrighton:391971424488783875>"); EmojiBarSet offBarSet = new EmojiBarSet( "<:mbarleftoff:391971424824459265>", "<:mbarmidoff:391971424824197123>", "<:mbarrightoff:391971424862208000>"); if (account != null) { IDiscordEmbed embed = Utils.Embed .SetDescription(account.Title) .SetAuthor(locale.GetString("miki_global_profile_user_header", account.Name), "", "https://patreon.com/mikibot") .SetThumbnailUrl(discordUser.AvatarUrl); long serverid = e.Guild.Id.ToDbLong(); LocalExperience localExp = account.LocalExperience.FirstOrDefault(x => x.ServerId == e.Guild.Id.ToDbLong()); if (localExp == null) { localExp = await LocalExperience.CreateAsync(context, serverid, id); } int rank = await localExp.GetRank(context); int localLevel = User.CalculateLevel(localExp.Experience); int maxLocalExp = User.CalculateLevelExperience(localLevel); int minLocalExp = User.CalculateLevelExperience(localLevel - 1); EmojiBar expBar = new EmojiBar(maxLocalExp - minLocalExp, onBarSet, offBarSet, 6); string infoValue = new MessageBuilder() .AppendText(locale.GetString("miki_module_accounts_information_level", localLevel, localExp.Experience, maxLocalExp)) .AppendText(await expBar.Print(localExp.Experience - minLocalExp, e.Channel)) .AppendText(locale.GetString("miki_module_accounts_information_rank", rank)) .AppendText("Reputation: " + account.Reputation, MessageFormatting.Plain, false) .Build(); embed.AddInlineField(locale.GetString("miki_generic_information"), infoValue); int globalLevel = User.CalculateLevel(account.Total_Experience); int maxGlobalExp = User.CalculateLevelExperience(globalLevel); int minGlobalExp = User.CalculateLevelExperience(globalLevel - 1); int globalRank = await account.GetGlobalRankAsync(); EmojiBar globalExpBar = new EmojiBar(maxGlobalExp - minGlobalExp, onBarSet, offBarSet, 6); string globalInfoValue = new MessageBuilder() .AppendText(locale.GetString("miki_module_accounts_information_level", globalLevel, account.Total_Experience, maxGlobalExp)) .AppendText(await globalExpBar.Print(account.Total_Experience - minGlobalExp, e.Channel)) .AppendText(locale.GetString("miki_module_accounts_information_rank", globalRank), MessageFormatting.Plain, false) .Build(); embed.AddInlineField(locale.GetString("miki_generic_global_information"), globalInfoValue); embed.AddInlineField(locale.GetString("miki_generic_mekos"), account.Currency + "🔸"); List <Marriage> Marriages = account.Marriages? .Select(x => x.Marriage) .Where(x => !x.IsProposing) .OrderBy(mar => mar.TimeOfMarriage) .ToList(); List <User> users = new List <User>(); int maxCount = Marriages?.Count ?? 0; for (int i = 0; i < maxCount; i++) { users.Add(await context.Users.FindAsync(Marriages[i].GetOther(id))); } if (Marriages?.Count > 0) { List <string> MarriageStrings = new List <string>(); for (int i = 0; i < maxCount; i++) { if (Marriages[i].GetOther(id) != 0) { MarriageStrings.Add($"💕 {users[i].Name} (_{Marriages[i].TimeOfMarriage.ToShortDateString()}_)"); } } embed.AddInlineField( locale.GetString("miki_module_accounts_profile_marriedto"), string.Join("\n", MarriageStrings)); } Random r = new Random((int)id - 3); embed.Color = new Miki.Common.Color((float)r.NextDouble(), (float)r.NextDouble(), (float)r.NextDouble()); CommandUsage favouriteCommand = account.CommandsUsed? .OrderByDescending(c => c.Amount) .FirstOrDefault(); string favCommand = $"{favouriteCommand?.Name ?? locale.GetString("miki_placeholder_null")} ({ favouriteCommand?.Amount ?? 0 })"; embed.AddInlineField(locale.GetString("miki_module_accounts_profile_favourite_command"), favCommand); if (account.Achievements != null) { string achievements = AchievementManager.Instance.PrintAchievements(account.Achievements); embed.AddInlineField( locale.GetString("miki_generic_achievements"), achievements != "" ? achievements : locale.GetString("miki_placeholder_null")); } embed.SetFooter( locale.GetString("miki_module_accounts_profile_footer", account.DateCreated.ToShortDateString(), sw.ElapsedMilliseconds), ""); sw.Stop(); embed.QueueToChannel(e.Channel); } else { e.ErrorEmbed(locale.GetString("error_account_null")) .QueueToChannel(e.Channel); } } }
protected override void Initialize() { base.Initialize(); emojiBar = GameManager.instance.CreateEmojiBar(this); }