public async Task AcceptMarriageAsync(EventContext e) { if (e.message.MentionedUserIds.Count == 0) { await e.Channel.SendMessage("Please mention the person you want to marry."); return; } using (var context = new MikiContext()) { Marriage marriage = await Marriage.GetProposalReceivedAsync(context, e.message.MentionedUserIds.First(), e.Author.Id); if (marriage != null) { User person1 = await context.Users.FindAsync(marriage.Id1); User person2 = await context.Users.FindAsync(marriage.Id2); if (person1.MarriageSlots < Marriage.GetMarriages(context, person1.Id).Count) { await e.Channel.SendMessage($"{person1.Name} do not have enough marriage slots, sorry :("); return; } if (person2.MarriageSlots < Marriage.GetMarriages(context, person2.Id).Count) { await e.Channel.SendMessage($"{person2.Name} does not have enough marriage slots, sorry :("); return; } marriage.AcceptProposal(context); Log.Message(marriage.Proposing.ToString()); await context.SaveChangesAsync(); await e.Channel.SendMessage($"❤️ Congratulations { person1.Name } and { person2.Name } ❤️"); } else { await e.Channel.SendMessage("This user hasn't proposed to you!"); return; } } }
public async Task DivorceAsync(EventContext e) { Locale locale = Locale.GetEntity(e.Channel.Id.ToDbLong()); if (e.message.MentionedUserIds.Count == 0) { using (MikiContext context = new MikiContext()) { List <User> users = context.Users.Where(p => p.Name.ToLower() == e.arguments.ToLower()).ToList(); if (users.Count == 0) { await Utils.ErrorEmbed(locale, locale.GetString("miki_module_accounts_error_no_marriage")).SendToChannel(e.Channel); } else if (users.Count == 1) { Marriage currentMarriage = Marriage.GetMarriage(context, e.Author.Id, users.First().Id.FromDbLong()); if (currentMarriage == null) { await Utils.ErrorEmbed(locale, locale.GetString("miki_module_accounts_error_no_marriage")).SendToChannel(e.Channel); return; } if (currentMarriage.Proposing) { await Utils.ErrorEmbed(locale, locale.GetString("miki_module_accounts_error_no_marriage")).SendToChannel(e.Channel); return; } await currentMarriage.DivorceAsync(context); IDiscordEmbed embed = Utils.Embed; embed.Title = locale.GetString("miki_module_accounts_divorce_header"); embed.Description = locale.GetString("miki_module_accounts_divorce_content", e.Author.Username, users.First().Name); embed.Color = new IA.SDK.Color(0.6f, 0.4f, 0.1f); await embed.SendToChannel(e.Channel); return; } else { List <Marriage> allMarriages = Marriage.GetMarriages(context, e.Author.Id.ToDbLong()); bool done = false; foreach (Marriage marriage in allMarriages) { foreach (User user in users) { if (marriage.GetOther(e.Author.Id) == user.Id.FromDbLong()) { await marriage.DivorceAsync(context); done = true; IDiscordEmbed embed = Utils.Embed; embed.Title = locale.GetString("miki_module_accounts_divorce_header"); embed.Description = locale.GetString("miki_module_accounts_divorce_content", e.Author.Username, user.Name); embed.Color = new IA.SDK.Color(0.6f, 0.4f, 0.1f); await embed.SendToChannel(e.Channel); break; } } if (done) { break; } } } } } else { if (e.Author.Id == e.message.MentionedUserIds.First()) { await Utils.ErrorEmbed(locale, locale.GetString("miki_module_accounts_error_no_marriage")).SendToChannel(e.Channel); return; } using (MikiContext context = new MikiContext()) { Marriage currentMarriage = Marriage.GetMarriage(context, e.Author.Id, e.message.MentionedUserIds.First()); await currentMarriage.DivorceAsync(context); string user1 = (await e.Guild.GetUserAsync(currentMarriage.GetMe(e.Author.Id))).Username; string user2 = (await e.Guild.GetUserAsync(currentMarriage.GetOther(e.Author.Id))).Username; IDiscordEmbed embed = Utils.Embed; embed.Title = locale.GetString("miki_module_accounts_divorce_header"); embed.Description = locale.GetString("miki_module_accounts_divorce_content", user1, user2); embed.Color = new IA.SDK.Color(0.6f, 0.4f, 0.1f); await embed.SendToChannel(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.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); } } }