Example #1
0
        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;
        }
Example #3
0
        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);
                }
            }
        }
Example #4
0
        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);
                }
            }
        }
Example #5
0
 public UpwardTreeBuilder(
     PersonRepository personRepository,
     MarriageRepository marriageRepository,
     SonRepository sonRepository)
 {
     _personRepository   = personRepository;
     _marriageRepository = marriageRepository;
     _sonRepository      = sonRepository;
 }
Example #6
0
        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);
                }
            }
        }
Example #7
0
        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);
                }
            }
        }
Example #8
0
        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();
        }
Example #9
0
        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;
        }
Example #10
0
        // 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);
        }
Example #11
0
        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));
        }
Example #12
0
        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);
        }
Example #13
0
        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();
            }
        }
Example #14
0
        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);
                }
            }
        }
Example #15
0
        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);
            }
        }
Example #16
0
        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);
        }
Example #17
0
        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;
                }
            }
        }