public static async Task BanAsync(this User user, DbContext context) { MarriageRepository repository = new MarriageRepository(context); User u = await context.Set <User>().FindAsync(user.Id); await repository.DivorceAllMarriagesAsync(user.Id); await repository.DeclineAllProposalsAsync(user.Id); context.Set <CommandUsage>().RemoveRange( await context.Set <CommandUsage>().Where(x => x.UserId == user.Id).ToListAsync() ); context.Set <Achievement>().RemoveRange( await context.Set <Achievement>().Where(x => x.UserId == user.Id).ToListAsync() ); context.Set <LocalExperience>().RemoveRange( await context.Set <LocalExperience>().Where(x => x.UserId == user.Id).ToListAsync() ); MikiApp.Instance.GetService <EventSystem>().MessageFilter.Get <UserFilter>().Users.Add(user.Id.FromDbLong()); u.Banned = true; u.Total_Commands = 0; u.Total_Experience = 0; u.MarriageSlots = 0; u.Currency = 0; u.Reputation = 0; await context.SaveChangesAsync(); }
public MarriageViewer(string connStr, Marriage matrimoni) { _personaRepository = new PersonRepository(connStr); _matrimoniRepository = new MarriageRepository(connStr); _fillRepository = new SonRepository(connStr); _matrimoni = matrimoni; }
public async Task DivorceAsync(EventContext e) { using (MikiContext context = new MikiContext()) { MarriageRepository repository = new MarriageRepository(context); ArgObject selection = e.Arguments.FirstOrDefault(); int? selectionId = null; if (selection != null) { selectionId = selection.TakeInt(); } var marriages = await repository.GetMarriagesAsync((long)e.Author.Id); if (marriages.Count == 0) { // TODO: no proposals exception //throw BotException.CreateCustom("error_proposals_empty"); return; } marriages = marriages.OrderByDescending(x => x.Marriage.TimeOfMarriage).ToList(); if (selectionId != null) { var m = marriages[selectionId.Value - 1]; var otherUser = await Global.Client.Discord.GetUserAsync(m.GetOther(e.Author.Id.ToDbLong()).FromDbLong()); new EmbedBuilder { Title = $"🔔 {e.Locale.GetString("miki_module_accounts_divorce_header")}", Description = e.Locale.GetString("miki_module_accounts_divorce_content", e.Author.Username, otherUser.Username), Color = new Color(0.6f, 0.4f, 0.1f) }.ToEmbed().QueueToChannel(e.Channel); m.Remove(context); await context.SaveChangesAsync(); } else { var embed = new EmbedBuilder() { Title = "💍 Marriages", Footer = new EmbedFooter() { Text = $"Use {await e.Prefix.GetForGuildAsync(Global.RedisClient, e.Guild.Id)}divorce <number> to decline", }, Color = new Color(154, 170, 180) }; await BuildMarriageEmbedAsync(embed, e.Author.Id.ToDbLong(), context, marriages); embed.ToEmbed().QueueToChannel(e.Channel); } } }
public async Task DeclineMarriageAsync(EventContext e) { using (MikiContext context = new MikiContext()) { MarriageRepository repository = new MarriageRepository(context); ArgObject selection = e.Arguments.FirstOrDefault(); int? selectionId = null; if (selection != null) { selectionId = selection.TakeInt(); } var marriages = await repository.GetProposalsReceived(e.Author.Id.ToDbLong()); if (marriages.Count == 0) { // TODO: add no propsoals //throw new LocalizedException("error_proposals_empty"); return; } marriages = marriages.OrderByDescending(x => x.Marriage.TimeOfMarriage).ToList(); if (selectionId != null) { var m = marriages[selectionId.Value - 1]; string otherName = (await Global.Client.Discord.GetUserAsync(m.GetOther(e.Author.Id.ToDbLong()).FromDbLong())).Username; new EmbedBuilder() { Title = $"🔫 You shot down {otherName}!", Description = $"Aww, don't worry {otherName}. There is plenty of fish in the sea!", Color = new Color(191, 105, 82) }.ToEmbed().QueueToChannel(e.Channel); m.Remove(context); await context.SaveChangesAsync(); } else { var embed = new EmbedBuilder() { Title = "💍 Proposals", Footer = new EmbedFooter() { Text = $"Use {await e.Prefix.GetForGuildAsync(Global.RedisClient, e.Guild.Id)}declinemarriage <number> to decline", }, Color = new Color(154, 170, 180) }; await BuildMarriageEmbedAsync(embed, e.Author.Id.ToDbLong(), context, marriages); embed.ToEmbed().QueueToChannel(e.Channel); } } }
public UpwardTreeBuilder( PersonRepository personRepository, MarriageRepository marriageRepository, SonRepository sonRepository) { _personRepository = personRepository; _marriageRepository = marriageRepository; _sonRepository = sonRepository; }
public async Task CancelMarriageAsync(EventContext e) { using (MikiContext context = new MikiContext()) { MarriageRepository repository = new MarriageRepository(context); var marriages = await repository.GetProposalsSent(e.Author.Id.ToDbLong()); if (marriages.Count == 0) { // TODO: add no propsoals //throw new LocalizedException("error_proposals_empty"); return; } marriages = marriages.OrderByDescending(x => x.Marriage.TimeOfMarriage).ToList(); if (e.Arguments.Take(out int selectionId)) { var m = marriages[selectionId - 1]; string otherName = (await MikiApp.Instance.Discord.GetUserAsync(m.GetOther(e.Author.Id.ToDbLong()).FromDbLong())).Username; await new EmbedBuilder() { Title = $"💔 You took back your proposal to {otherName}!", Description = $"Aww, don't worry {otherName}. There is plenty of fish in the sea!", Color = new Color(231, 90, 112) }.ToEmbed().QueueToChannelAsync(e.Channel); m.Remove(context); await context.SaveChangesAsync(); } else { var cache = (ICacheClient)e.Services.GetService(typeof(ICacheClient)); var embed = new EmbedBuilder() { Title = "💍 Proposals", Footer = new EmbedFooter() { Text = $"Use {await e.Prefix.GetForGuildAsync(context, cache, e.Guild.Id)}cancelmarriage <number> to decline", }, Color = new Color(154, 170, 180) }; await BuildMarriageEmbedAsync(embed, e.Author.Id.ToDbLong(), context, marriages); await embed.ToEmbed() .QueueToChannelAsync(e.Channel); } } }
public async Task DivorceAsync(EventContext e) { using (MikiContext context = new MikiContext()) { MarriageRepository repository = new MarriageRepository(context); var marriages = await repository.GetMarriagesAsync((long)e.Author.Id); if (marriages.Count == 0) { // TODO: no proposals exception return; } marriages = marriages.OrderByDescending(x => x.Marriage.TimeOfMarriage).ToList(); if (e.Arguments.Take(out int selectionId)) { var m = marriages[selectionId - 1]; var otherUser = await MikiApp.Instance.Discord.GetUserAsync(m.GetOther(e.Author.Id.ToDbLong()).FromDbLong()); await new EmbedBuilder { Title = $"🔔 {e.Locale.GetString("miki_module_accounts_divorce_header")}", Description = e.Locale.GetString("miki_module_accounts_divorce_content", e.Author.Username, otherUser.Username), Color = new Color(0.6f, 0.4f, 0.1f) }.ToEmbed().QueueToChannelAsync(e.Channel); m.Remove(context); await context.SaveChangesAsync(); } else { var cache = (ICacheClient)e.Services.GetService(typeof(ICacheClient)); var embed = new EmbedBuilder() { Title = "💍 Marriages", Footer = new EmbedFooter() { Text = $"Use {await e.Prefix.GetForGuildAsync(context, cache, e.Guild.Id)}divorce <number> to decline", }, Color = new Color(154, 170, 180) }; await BuildMarriageEmbedAsync(embed, e.Author.Id.ToDbLong(), context, marriages); await embed.ToEmbed().QueueToChannelAsync(e.Channel); } } }
private void btnSelectParents_Click(object sender, EventArgs e) { var list = new MarriageRepository().FindAll(fetchExtensions: true); var form = new SelectorUI <Marriage>(list); form.ShowDialog(); var selectedItem = form.SelectedItem; if (selectedItem != null) { this.ParentsMarriage = selectedItem; } UpdateRelationshipsView(); }
public PersonController( UserManager <ApplicationUser> userManager, ILoggerFactory loggerFactory, PersonRepository personRepository, MarriageRepository marriageRepository, SonRepository sonRepository) { _userManager = userManager; _logger = loggerFactory.CreateLogger <ManageController>(); _personRepository = personRepository; _marriageRepository = marriageRepository; _sonRepository = sonRepository; }
// public ApplicationUserRepository ApplicationUserRepository; //public ProductKeyRepository ProductKeyRepository; public UnitOfWork(DbContext dataContext) { DbContext = dataContext; TreeRepository = new TreeRepository(dataContext); FriendshipRepository = new FriendshipRepository(dataContext); GenDiseasesRepository = new GenDiseasesRepository(dataContext); HaveDiseaseRepository = new HaveDiseaseRepository(dataContext); MemberRepository = new MemberRepository(dataContext); ParentsRepository = new ParentsRepository(dataContext); ChildsRepository = new ChildsRepository(dataContext); MarriageRepository = new MarriageRepository(dataContext); // ApplicationUserRepository = new ApplicationUserRepository(dataContext); //ProductKeyRepository = new ProductKeyRepository(dataContext); }
public static string GetAllInfos(string connStr) { var matrimoniRepository = new MarriageRepository(connStr); var matrimonis = matrimoniRepository.GetAll(); var results = new List <string>(); foreach (var matrimoni in matrimonis) { var marriageViewer = new MarriageViewer(connStr, matrimoni); var result = marriageViewer.GetInfo(); results.Add(""); results.Add("==="); results.Add(result); } return(string.Join("\r\n", results)); }
public string GetAllItemsAsJson() { var persons = new PersonRepository().FindAll(); var marriages = new MarriageRepository().FindAll(); var marriageSons = new MarriageSonRepository().FindAll(); int counter = 0; var personsAsJs = GetPersonsAsJsNodes(persons, ref counter); var marriagesAsJs = GetMarriagesAsJsNodes(marriages, ref counter); var nodesAsJs = new List <string>(); nodesAsJs.AddRange(personsAsJs.Select(x => x.Value.Item2)); nodesAsJs.AddRange(marriagesAsJs.Select(x => x.Value.Item2)); var linksAsJs = GetLinksAsJs(marriageSons, marriages, personsAsJs, marriagesAsJs); var fullJs = String.Format(@"{{""directed"": true, ""graph"": [], ""nodes"": [{0}] , ""links"": [{1}] , ""multigraph"": false}}", String.Join(",\r\n", nodesAsJs), String.Join(",\r\n", linksAsJs)); return(fullJs); }
public static async Task BanAsync(this User user) { using (var context = new MikiContext()) { MarriageRepository repository = new MarriageRepository(context); User u = await context.Users.FindAsync(user.Id); await repository.DivorceAllMarriagesAsync(user.Id); await repository.DeclineAllProposalsAsync(user.Id); context.CommandUsages.RemoveRange( await context.CommandUsages.Where(x => x.UserId == user.Id).ToListAsync() ); context.Achievements.RemoveRange( await context.Achievements.Where(x => x.Id == user.Id).ToListAsync() ); context.LocalExperience.RemoveRange( await context.LocalExperience.Where(x => x.UserId == user.Id).ToListAsync() ); Miki.Framework.Bot.Instance.GetAttachedObject <EventSystem>().MessageFilter.Get <UserFilter>().Users.Add(user.Id.FromDbLong()); u.Banned = true; u.Total_Commands = 0; u.Total_Experience = 0; u.MarriageSlots = 0; u.Currency = 0; u.Reputation = 0; await context.SaveChangesAsync(); } }
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(); IDiscordGuildUser discordUser = null; MarriageRepository repository = new MarriageRepository(context); if (arg != null) { discordUser = await arg.GetUserAsync(e.Guild); if (discordUser == null) { // TODO: usernullexception //throw new UserException(new User()); } 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 Global.Client.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(); embed.ToEmbed().QueueToChannel(e.Channel); } else { e.ErrorEmbed(e.Locale.GetString("error_account_null")) .ToEmbed().QueueToChannel(e.Channel); } } }
public async Task ShowProposalsAsync(EventContext e) { int page = e.Arguments.FirstOrDefault()?.TakeInt() - 1 ?? 0; using (var context = new MikiContext()) { MarriageRepository repository = new MarriageRepository(context); List <UserMarriedTo> proposals = await repository.GetProposalsReceived(e.Author.Id.ToDbLong()); List <string> proposalNames = new List <string>(); foreach (UserMarriedTo p in proposals) { long id = p.GetOther(e.Author.Id.ToDbLong()); string u = (await Global.Client.Discord.GetUserAsync(id.FromDbLong())).Username; proposalNames.Add($"{u} [{id}]"); } int pageCount = (int)Math.Ceiling((float)proposalNames.Count / 35); proposalNames = proposalNames.Skip(page * 35) .Take(35) .ToList(); EmbedBuilder embed = new EmbedBuilder() .SetTitle(e.Author.Username) .SetDescription("Here it shows both the people who you've proposed to and who have proposed to you."); string output = string.Join("\n", proposalNames); embed.AddField("Proposals Recieved", string.IsNullOrEmpty(output) ? "none (yet!)" : output); proposals = await repository.GetProposalsSent(e.Author.Id.ToDbLong()); proposalNames = new List <string>(); foreach (UserMarriedTo p in proposals) { long id = p.GetOther(e.Author.Id.ToDbLong()); string u = (await Global.Client.Discord.GetUserAsync(id.FromDbLong())).Username; proposalNames.Add($"{u} [{id}]"); } pageCount = Math.Max(pageCount, (int)Math.Ceiling((float)proposalNames.Count / 35)); proposalNames = proposalNames.Skip(page * 35) .Take(35) .ToList(); output = string.Join("\n", proposalNames); embed.AddField("Proposals Sent", string.IsNullOrEmpty(output) ? "none (yet!)" : output); embed.Color = new Color(1, 0.5f, 0); embed.ThumbnailUrl = (await e.Guild.GetMemberAsync(e.Author.Id)).GetAvatarUrl(); if (pageCount > 1) { embed.SetFooter(e.Locale.GetString("page_footer", page + 1, pageCount)); } embed.ToEmbed().QueueToChannel(e.Channel); } }
public async Task MarryAsync(EventContext e) { long askerId = 0; long receiverId = 0; ArgObject args = e.Arguments.FirstOrDefault(); if (args == null) { return; } IDiscordGuildUser user = await args.GetUserAsync(e.Guild); if (user == null) { e.Channel.QueueMessageAsync("Couldn't find this person.."); return; } if (user.Id == (await e.Guild.GetSelfAsync()).Id) { e.Channel.QueueMessageAsync("(´・ω・`)"); return; } using (MikiContext context = new MikiContext()) { MarriageRepository repository = new MarriageRepository(context); User mentionedPerson = await User.GetAsync(context, user.Id.ToDbLong(), user.Username); User currentUser = await DatabaseHelpers.GetUserAsync(context, e.Author); askerId = currentUser.Id; receiverId = mentionedPerson.Id; if (currentUser == null || mentionedPerson == null) { e.ErrorEmbed(e.Locale.GetString("miki_module_accounts_marry_error_null")).ToEmbed().QueueToChannel(e.Channel); return; } if (mentionedPerson.Banned) { e.ErrorEmbed("This person has been banned from Miki.").ToEmbed().QueueToChannel(e.Channel); return; } if (mentionedPerson.Id == currentUser.Id) { e.ErrorEmbed(e.Locale.GetString("miki_module_accounts_marry_error_null")).ToEmbed().QueueToChannel(e.Channel); return; } if (await repository.ExistsAsync(mentionedPerson.Id, currentUser.Id)) { e.ErrorEmbed(e.Locale.GetString("miki_module_accounts_marry_error_exists")).ToEmbed().QueueToChannel(e.Channel); return; } await repository.ProposeAsync(askerId, receiverId); await context.SaveChangesAsync(); } new EmbedBuilder() .SetTitle("💍" + e.Locale.GetString("miki_module_accounts_marry_text", $"**{e.Author.Username}**", $"**{user.Username}**")) .SetDescription(e.Locale.GetString("miki_module_accounts_marry_text2", user.Username, e.Author.Username)) .SetColor(0.4f, 0.4f, 0.8f) .SetThumbnail("https://i.imgur.com/TKZSKIp.png") .AddInlineField("✅ To accept", $">acceptmarriage @user") .AddInlineField("❌ To decline", $">declinemarriage @user") .SetFooter("Take your time though! This proposal won't disappear", "") .ToEmbed().QueueToChannel(e.Channel); }
public async Task AcceptMarriageAsync(EventContext e) { IDiscordUser user = await e.Arguments.Join().GetUserAsync(e.Guild); if (user == null) { e.ErrorEmbed("I couldn't find this user!") .ToEmbed().QueueToChannel(e.Channel); return; } if (user.Id == e.Author.Id) { e.ErrorEmbed("Please mention someone else than yourself.") .ToEmbed().QueueToChannel(e.Channel); return; } using (var context = new MikiContext()) { MarriageRepository repository = new MarriageRepository(context); User accepter = await DatabaseHelpers.GetUserAsync(context, e.Author); User asker = await DatabaseHelpers.GetUserAsync(context, user); UserMarriedTo marriage = await repository.GetEntryAsync(accepter.Id, asker.Id); if (marriage != null) { if (accepter.MarriageSlots < (await repository.GetMarriagesAsync(accepter.Id)).Count) { throw new InsufficientMarriageSlotsException(accepter); } if (asker.MarriageSlots < (await repository.GetMarriagesAsync(asker.Id)).Count) { throw new InsufficientMarriageSlotsException(asker); } if (marriage.ReceiverId != e.Author.Id.ToDbLong()) { e.Channel.QueueMessageAsync($"You can not accept your own responses!"); return; } if (marriage.Marriage.IsProposing) { marriage.Marriage.AcceptProposal(); await context.SaveChangesAsync(); new EmbedBuilder() { Title = ("❤️ Happily married"), Color = new Color(190, 25, 49), Description = ($"Much love to { e.Author.Username } and { user.Username } in their future adventures together!") }.ToEmbed().QueueToChannel(e.Channel); } else { e.ErrorEmbed("You're already married to this person ya doofus!") .ToEmbed().QueueToChannel(e.Channel); } } else { e.Channel.QueueMessageAsync("This user hasn't proposed to you!"); return; } } }