Example #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="NoOrgasm"/> class.
        /// </summary>
        /// <param name="outcome">
        /// The outcome.
        /// </param>
        /// <param name="settings">
        /// The settings.
        /// </param>
        public NoOrgasm(SlaveReportsExtension.Outcome outcome, UserSettings settings, DiscordContext context) : base(outcome, settings, context)
        {
            int minNum = 1;
            int maxNum = 4;

            if (settings.WheelDifficulty != null && settings.WheelDifficulty.Value != 0)
            {
                maxNum *= settings.WheelDifficulty.Value;
            }

            int rndNumber = Helpers.RandomGenerator.RandomInt(minNum, maxNum);

            this.DenialTime = new TimeSpan(rndNumber, 0, 0);

            DiscordEmbedBuilder builder = new DiscordEmbedBuilder()
            {
                Title       = "No O****m for you!",
                Description = "Try again in a few hours :P"
            };

            this.Embed   = builder.Build();
            this.Text    = "No o****m for you! Try again in a few hours :P";
            this.Outcome = SlaveReportsExtension.Outcome.Denial;
        }
Example #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="WheelOutcome"/> class.
 /// </summary>
 /// <param name="outcome">
 /// The outcome.
 /// </param>
 /// <param name="settings">
 /// The settings.
 /// </param>
 protected WheelOutcome(SlaveReportsExtension.Outcome outcome, Models.UserSettings settings, DiscordContext context)
 {
     // ReSharper disable once VirtualMemberCallInConstructor
     this.Outcome = outcome;
 }
Example #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Ban"/> class.
        /// </summary>
        /// <param name="outcome">
        /// The outcome.
        /// </param>
        /// <param name="settings">
        /// The settings.
        /// </param>
        public Ban(SlaveReportsExtension.Outcome outcome, UserSettings settings, DiscordContext context) : base(outcome, settings, context)
        {
            if (settings.WheelTaskPreference == null)
            {
                settings.WheelTaskPreference = (int)SlaveReportsExtension.WheelTaskPreferenceSetting.Default;
                context.SaveChanges();
            }

            if (settings.WheelTaskPreference != null && ((SlaveReportsExtension.WheelTaskPreferenceSetting)settings.WheelTaskPreference).HasFlag(SlaveReportsExtension.WheelTaskPreferenceSetting.Task))
            {
                this.Chance *= 6;
            }

            DiscordEmbedBuilder builder = new DiscordEmbedBuilder();

            int time = Helpers.RandomGenerator.RandomInt(this.minBanTime, this.maxBanTime);

            settings.WheelDifficulty = settings.WheelDifficulty ?? 2;

            if (Helpers.RandomGenerator.RandomInt(0, 2) == 0)
            {
                builder.Title       = "Content ban!";
                builder.Description =
                    $"You are banned from {bans[Helpers.RandomGenerator.RandomInt(0, bans.Length)]} for {time} days! If you already had the same ban, consider it reset.";
                builder.Footer = new DiscordEmbedBuilder.EmbedFooter()
                {
                    Text = "Now reroll!"
                };
            }
            else
            {
                int edgeAmount = Helpers.RandomGenerator.RandomInt(this.minEdgeAmount, this.maxEdgeAmount) * 2;

                switch ((SlaveReportsExtension.WheelDifficultyPreference)settings.WheelDifficulty)
                {
                case SlaveReportsExtension.WheelDifficultyPreference.Baby:
                    edgeAmount = edgeAmount / 4;
                    break;

                case SlaveReportsExtension.WheelDifficultyPreference.Easy:
                    edgeAmount = edgeAmount / 2;
                    break;

                case SlaveReportsExtension.WheelDifficultyPreference.Hard:
                    edgeAmount = edgeAmount * 2;
                    break;

                case SlaveReportsExtension.WheelDifficultyPreference.Masterbater:
                    edgeAmount = edgeAmount * 4;
                    break;
                }

                builder.Title       = "Edging Task!";
                builder.Description =
                    $"You'll have to Edge {edgeAmount} times a Day, for {time} days! If you already had the same task, consider it reset.";
                builder.Footer = new DiscordEmbedBuilder.EmbedFooter()
                {
                    Text = "Now reroll!"
                };
            }

            this.Embed   = builder.Build();
            this.Outcome = SlaveReportsExtension.Outcome.Task;
        }
Example #4
0
        public async Task SpinNewWheelAsync(CommandContext ctx)
        {
            DiscordContext context = new DiscordContext();
            Users          user    = await context.Users.FindAsync(Convert.ToInt64(ctx.Message.Author.Id));

            UserSettings userSettings = await context.UserSettings.FindAsync(Convert.ToInt64(ctx.Message.Author.Id));

            SabrinaSettings sabrinaSettings = await context.SabrinaSettings.FindAsync(Convert.ToInt64(ctx.Guild.Id));

            if (sabrinaSettings == null)
            {
                sabrinaSettings = new SabrinaSettings
                {
                    GuildId      = Convert.ToInt64(ctx.Guild.Id),
                    WheelChannel = Convert.ToInt64(ctx.Channel.Id)
                };

                await context.SabrinaSettings.AddAsync(sabrinaSettings);

                await context.SaveChangesAsync();
            }

            if (sabrinaSettings.WheelChannel == null)
            {
                sabrinaSettings.WheelChannel = Convert.ToInt64(ctx.Channel.Id);
                await context.SaveChangesAsync();
            }

            if (Convert.ToInt64(ctx.Channel.Id) != sabrinaSettings.WheelChannel.Value)
            {
                DiscordChannel channel =
                    await ctx.Client.GetChannelAsync(Convert.ToUInt64(sabrinaSettings.WheelChannel));

                await ctx.RespondAsync(
                    $"You cannot issue this command from this Channel. Please use {channel.Mention}");

                return;
            }

            if (user == null)
            {
                user = new Users();
            }

            if (userSettings == null)
            {
                userSettings = new UserSettings();
            }

            WheelChances chances = await context.WheelChances.FindAsync(userSettings.WheelDifficulty ?? 2);

            if (user.LockTime != null && user.LockTime > DateTime.Now)
            {
                TimeSpan?timeUntilFree = user.LockTime - DateTime.Now;

                TimeSpan newTimeUntilFree =
                    TimeSpan.FromTicks(timeUntilFree.Value.Ticks * Helpers.RandomGenerator.RandomInt(1, 4));

                if (newTimeUntilFree > TimeSpan.FromDays(365))
                {
                    await ctx.RespondAsync("F**k off");

                    return;
                }

                if (Helpers.RandomGenerator.RandomInt(0, 4) > 0)
                {
                    await ctx.RespondAsync(
                        "Oho, it seems like I told you to stay away from spinning the wheel...\n" +
                        $"That means you get some more extra time of no spinning {DiscordEmoji.FromName(ctx.Client, Config.Emojis.Blush)}");

                    user.LockTime += newTimeUntilFree;
                    await context.SaveChangesAsync();

                    return;
                }

                await ctx.RespondAsync(
                    "I believe i have told you not to spin the wheel.\n" +
                    $"But since i'm awesome, you won't get punishment for it... Today. {DiscordEmoji.FromName(ctx.Client, Config.Emojis.Blush)}");
            }

            var addedChance = 0;

            var outcomeChanceValue = Helpers.RandomGenerator.RandomInt(
                0,
                chances.Denial + chances.Task + chances.Ruin + chances.O****m);

            Console.WriteLine("Chance Rolled: " + outcomeChanceValue);
            Console.WriteLine("Denial Chance: " + chances.Denial);
            Console.WriteLine("TaskChance Chance: " + chances.Task);
            Console.WriteLine("RuinChance Chance: " + chances.Ruin);
            Console.WriteLine("OrgasmChance Chance: " + chances.O****m);
            Console.WriteLine("addedChance Chance: " + addedChance);
            SlaveReportsExtension.Outcome outcome = SlaveReportsExtension.Outcome.Task;
            if (outcomeChanceValue < chances.Denial)
            {
                outcome = SlaveReportsExtension.Outcome.Denial;
            }
            else if (outcomeChanceValue < chances.Denial + chances.Task)
            {
                outcome = SlaveReportsExtension.Outcome.Task;
            }
            else if (outcomeChanceValue < chances.Denial + chances.Task + chances.Ruin)
            {
                outcome = SlaveReportsExtension.Outcome.Ruin;
            }
            else
            {
                outcome = SlaveReportsExtension.Outcome.O****m;
            }

            if (user.DenialTime != null && user.DenialTime > DateTime.Now)
            {
                TimeSpan?timeUntilFree = user.DenialTime - DateTime.Now;
                if (outcome.HasFlag(SlaveReportsExtension.Outcome.O****m) ||
                    outcome.HasFlag(SlaveReportsExtension.Outcome.Ruin))
                {
                    await ctx.RespondAsync(
                        "Haha, I would\'ve let you cum this time, but since you\'re still denied, "
                        + $"that won't happen {DiscordEmoji.FromName(ctx.Client, Config.Emojis.Blush)}.\n" +
                        "As a punishment, you\'re gonna do your Task anyways though.");
                }
                else
                {
                    await ctx.RespondAsync(
                        "Well, i told you, that you\'d be denied now.\n"
                        + "You still want to do something? Then here you go."
                        + $"\nAnd as a bonus, if i decide so, you'll get even more denial! {DiscordEmoji.FromName(ctx.Client, Config.Emojis.Blush)}");
                }

                await Task.Delay(1500);

                outcome = SlaveReportsExtension.Outcome.Denial | SlaveReportsExtension.Outcome.Task;
            }

            WheelOutcome wheelOutcome = null;

            while (wheelOutcome == null)
            {
                wheelOutcomes = ReflectiveEnumerator.GetEnumerableOfType <WheelOutcome>(outcome, userSettings, context)
                                .ToList();

                wheelOutcomes = wheelOutcomes.Where(e => outcome.HasFlag(e.Outcome)).ToList();

                if (wheelOutcomes.Count < 1)
                {
                    continue;
                }

                // Choose an outcome by summing up the chance values of all possible outcomes and then generating a random number inside those.
                var combinedChance = 0;

                foreach (WheelOutcome currentOutcome in wheelOutcomes)
                {
                    combinedChance += currentOutcome.Chance;
                }

                var chance    = 0;
                var minChance = Helpers.RandomGenerator.RandomInt(0, combinedChance);

                foreach (WheelOutcome currentOutcome in wheelOutcomes)
                {
                    chance += currentOutcome.Chance;
                    if (minChance < chance)
                    {
                        wheelOutcome = currentOutcome;
                        break;
                    }
                }
            }

            if (user.DenialTime == null)
            {
                user.DenialTime = DateTime.Now;
            }

            if (user.LockTime == null)
            {
                user.LockTime = DateTime.Now;
            }

            if (user.DenialTime < DateTime.Now)
            {
                user.DenialTime = DateTime.Now;
            }

            if (user.LockTime < DateTime.Now)
            {
                user.LockTime = DateTime.Now;
            }

            user.DenialTime += wheelOutcome.DenialTime;
            user.LockTime   += wheelOutcome.WheelLockedTime;
            await context.SaveChangesAsync();

            if (wheelOutcome.Embed != null)
            {
                await ctx.RespondAsync(embed : wheelOutcome.Embed);
            }
            else
            {
                await ctx.RespondAsync(wheelOutcome.Text);
            }
        }
Example #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Content"/> class.
        /// </summary>
        /// <param name="outcome">
        /// The outcome.
        /// </param>
        /// <param name="settings">
        /// The settings.
        /// </param>
        public Content(
            SlaveReportsExtension.Outcome outcome,
            Models.UserSettings settings, Models.DiscordContext context)
            : base(outcome, settings, context)
        {
            var denialtext = "please don't break the Bot";

            switch (outcome)
            {
            case SlaveReportsExtension.Outcome.Task:
                denialtext   = "then spin again";
                this.Outcome = SlaveReportsExtension.Outcome.Task;
                break;

            case SlaveReportsExtension.Outcome.Denial:
                denialtext      = "deny your o****m";
                this.DenialTime = new TimeSpan(8, 0, 0);
                this.Outcome    = SlaveReportsExtension.Outcome.Denial;
                break;

            case SlaveReportsExtension.Outcome.Ruin:
                denialtext   = "ruin your o****m";
                this.Outcome = SlaveReportsExtension.Outcome.Ruin;
                break;

            case SlaveReportsExtension.Outcome.O****m:
                denialtext   = "enjoy a full o****m";
                this.Outcome = SlaveReportsExtension.Outcome.O****m;
                break;

            case SlaveReportsExtension.Outcome.Denial | SlaveReportsExtension.Outcome.Task:
                var chance = Helpers.RandomGenerator.RandomInt(0, 9);
                if (chance < 5)
                {
                    denialtext      = "deny your o****m";
                    this.DenialTime = new TimeSpan(8, 0, 0);
                    this.Outcome    = SlaveReportsExtension.Outcome.Denial;
                }
                else
                {
                    denialtext   = "then spin again";
                    this.Outcome = SlaveReportsExtension.Outcome.Task;
                }

                break;
            }

            Link link;

            if (this.Outcome == SlaveReportsExtension.Outcome.Task)
            {
                link = this.GetLinkFromRandomTumblr(this.GetPostCount());
            }
            else
            {
                List <Link> links = Link.LoadAll().Result;

                var randomLinkNr = Helpers.RandomGenerator.RandomInt(0, links.Count);

                if (links.Count <= randomLinkNr)
                {
                    link = new Link()
                    {
                        CreatorName = "Exception",
                        FileName    = "An Exception Occured. Sorry.",
                        Type        = Link.ContentType.Picture,
                        Url         = "https://Exception.com"
                    };
                }
                else
                {
                    link = links[randomLinkNr];
                }
            }

            var fullSentence = string.Empty;

            switch (link.Type)
            {
            case Link.ContentType.Video:
                fullSentence = $"Watch {link.CreatorName}' JOI and {denialtext}";
                break;

            case Link.ContentType.Picture:
                fullSentence = $"Edge to {link.CreatorName}' Picture and {denialtext}";
                break;
            }

            var rerollIn = string.Empty;

            if (this.Outcome != SlaveReportsExtension.Outcome.Task)
            {
                rerollIn             = "You are not allowed to re-roll for now.";
                this.WheelLockedTime = new TimeSpan(8, 0, 0);
            }

            this.Text = $"{fullSentence}.{rerollIn}\n" + $"{link.Url}\n";

            var builder = new DiscordEmbedBuilder
            {
                Title       = "Click here.",
                Description = fullSentence,
                Footer      = new DiscordEmbedBuilder.EmbedFooter()
                {
                    Text = rerollIn
                },
                Url   = link.Url,
                Color = link.Type == Link.ContentType.Picture
                                                              ? new DiscordColor("#42f483")
                                                              : new DiscordColor("#acf441"),
                Author = new DiscordEmbedBuilder.EmbedAuthor()
                {
                    Name = link.CreatorName
                }
            };

            if (link.Type == Link.ContentType.Picture)
            {
                builder.ImageUrl = link.Url;
            }

            this.Embed = builder.Build();
        }
Example #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Edge"/> class.
        /// </summary>
        /// <param name="outcome">
        /// The outcome.
        /// </param>
        /// <param name="settings">
        /// The settings.
        /// </param>
        public Edge(SlaveReportsExtension.Outcome outcome, UserSettings settings, DiscordContext context) : base(outcome, settings, context)
        {
            int edgeMinutes = Helpers.RandomGenerator.RandomInt(5, 31);

            if (settings.WheelDifficulty != null)
            {
                switch ((SlaveReportsExtension.WheelDifficultyPreference)settings.WheelDifficulty)
                {
                case SlaveReportsExtension.WheelDifficultyPreference.Baby:
                    edgeMinutes = Convert.ToInt32((double)edgeMinutes / 2);
                    break;

                case SlaveReportsExtension.WheelDifficultyPreference.Easy:
                    edgeMinutes = Convert.ToInt32((double)edgeMinutes / 1.5);
                    break;

                case SlaveReportsExtension.WheelDifficultyPreference.Hard:
                    edgeMinutes = Convert.ToInt32((double)edgeMinutes * 1.5);
                    break;

                case SlaveReportsExtension.WheelDifficultyPreference.Masterbater:
                    edgeMinutes = Convert.ToInt32((double)edgeMinutes * 2);
                    break;
                }
            }

            string flavorText = "Boring...";

            if (edgeMinutes > 10)
            {
                flavorText = "Too easy...";
            }
            else if (edgeMinutes > 15)
            {
                flavorText = "Not too bad!";
            }
            else if (edgeMinutes > 20)
            {
                flavorText = "Kind of difficult!";
            }
            else if (edgeMinutes > 25)
            {
                flavorText = "Ouch!";
            }

            DiscordEmbedBuilder builder = new DiscordEmbedBuilder()
            {
                Title  = flavorText,
                Footer = new DiscordEmbedBuilder.EmbedFooter()
                {
                    Text = "And spin again afterwards~"
                }
            };

            if (Helpers.RandomGenerator.RandomInt(0, 2) == 0)
            {
                if (settings.WheelTaskPreference != null && ((SlaveReportsExtension.WheelTaskPreferenceSetting)settings.WheelTaskPreference).HasFlag(SlaveReportsExtension.WheelTaskPreferenceSetting.Time))
                {
                    this.Chance *= 3;
                }

                this.Text = $"{flavorText} Edge over and over (at least 30s Cooldown) for {edgeMinutes} minutes, then spin again~";

                builder.Description = $"Edge over and over (at least 30s Cooldown) for {edgeMinutes} minutes";

                this.WheelLockedTime = new TimeSpan(0, edgeMinutes, 0);
            }
            else
            {
                if (settings.WheelTaskPreference != null && ((SlaveReportsExtension.WheelTaskPreferenceSetting)settings.WheelTaskPreference).HasFlag(SlaveReportsExtension.WheelTaskPreferenceSetting.Amount))
                {
                    this.Chance *= 3;
                }

                this.Text = $"{flavorText} Edge {edgeMinutes / 2} times, then spin again~";

                builder.Description = $"Edge {edgeMinutes / 2} times";
            }

            this.Embed   = builder.Build();
            this.Outcome = SlaveReportsExtension.Outcome.Task;
        }