/// <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; }
/// <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; }
/// <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; }
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); } }
/// <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(); }
/// <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; }