public async Task SetModeAsync( CommandContext ctx, [Description("The name of the mode")] string mode) { if (Enum.TryParse(mode, true, out WheelSettingExtension.WheelMode wheelMode)) { await WheelSettingExtension.SetMode(wheelMode, ctx.Guild.Id); await ctx.RespondAsync($"Mode for this guild is now \"{wheelMode.ToFormattedText()}\"!"); } else { DiscordEmbedBuilder builder = new DiscordEmbedBuilder() { Title = "Cannot parse", Description = $"I can't find a mode with the name \"{mode}\". Please use one of the following: " }; foreach (WheelSettingExtension.WheelMode cMode in Enum.GetValues(typeof(WheelSettingExtension.WheelMode))) { builder.AddField(cMode.ToFormattedText(), ((int)cMode).ToString()); } await ctx.RespondAsync(embed : builder.Build()); } }
private async Task <UserSetting.Outcome> GetOutcome(CommandContext ctx, DiscordContext context) { Users user = await UserExtension.GetUser(Convert.ToInt64(ctx.Message.Author.Id), context); var wheelMode = await WheelSettingExtension.GetMode(ctx.Guild.Id, context); var wheelDifficultySetting = await UserSetting.GetSettingAsync(user.UserId, UserSetting.SettingID.WheelDifficulty, context); var difficulty = UserSettingExtensions.GetValue <UserSetting.WheelDifficultyPreference>(wheelDifficultySetting); WheelChances chances = await context.WheelChances.FindAsync((int)difficulty); var cumScore = await CalculateCumScore(context, user); var cumChance = Convert.ToInt32(cumScore * chances.O****m); if (wheelMode.HasFlag(WheelSettingExtension.WheelMode.NoCum)) { cumChance = 0; } var ruinChance = Convert.ToInt32(cumScore * chances.Ruin); if (wheelMode.HasFlag(WheelSettingExtension.WheelMode.NoRuin)) { ruinChance = 0; } var denialChance = chances.Denial; if (wheelMode.HasFlag(WheelSettingExtension.WheelMode.NoDenial)) { denialChance = 0; } var outcomeChanceValue = Helpers.RandomGenerator.RandomInt( 0, denialChance + chances.Task + chances.Edge + ruinChance + cumChance); UserSetting.Outcome outcome; if (outcomeChanceValue < denialChance) { outcome = UserSetting.Outcome.Denial; } else if (outcomeChanceValue < denialChance + chances.Edge) { outcome = UserSetting.Outcome.Edge; } else if (outcomeChanceValue < denialChance + chances.Edge + chances.Task) { outcome = UserSetting.Outcome.Task; } else if (outcomeChanceValue < denialChance + chances.Edge + chances.Task + cumChance) { outcome = UserSetting.Outcome.Ruin; } else { outcome = UserSetting.Outcome.O****m; } return(outcome); }
public async Task FullOrgasmWheel(CommandContext ctx) { await ctx.TriggerTypingAsync(); using DiscordContext context = new DiscordContext(); Users user = await UserExtension.GetUser(Convert.ToInt64(ctx.Message.Author.Id), context); if (!await DoInitialCheck(ctx)) { return; } var wheelMode = await WheelSettingExtension.GetMode(ctx.Guild.Id, context); if (wheelMode == WheelSettingExtension.WheelMode.Infinite) { await ctx.RespondAsync("Wheel is set to infinite Mode. Please Change it to a Mode where an outcome is possible"); return; } var isLocked = !await CheckLocked(ctx, user, context); if (isLocked) { return; } List <WheelOutcome> outcomes = new List <WheelOutcome>(); var outcome = await GetOutcome(ctx, context); while (outcomes.All(o => o.Outcome != UserSetting.Outcome.Denial && o.Outcome != UserSetting.Outcome.Ruin && o.Outcome != UserSetting.Outcome.O****m)) { outcome = await GetOutcome(ctx, context); outcome = await CheckDenial(ctx, user, outcome); outcomes.Add(await GetWheelOutcome(context, user, outcome)); } //Last outcome will be end of wheel var outcomeTime = DateTime.Now; foreach (var wheelOutcome in outcomes) { outcomeTime += TimeSpan.FromSeconds(1); if (wheelOutcome.Embed != null) { await ctx.RespondAsync(embed : wheelOutcome.Embed); } else { await ctx.RespondAsync(wheelOutcome.Text); } DbWheelOutcome dbOutcome = new DbWheelOutcome() { IsUserReport = 0, Time = outcomeTime, Type = (int)outcome, UserId = user.UserId }; context.WheelOutcome.Add(dbOutcome); if (wheelOutcome.GetType() == typeof(Entities.WheelOutcomes.Content)) { ((Entities.WheelOutcomes.Content)wheelOutcome).CleanUp(context); } } var endOutcome = outcomes.First(o => o.Outcome == UserSetting.Outcome.Denial || o.Outcome == UserSetting.Outcome.Ruin || o.Outcome == UserSetting.Outcome.O****m); if (endOutcome.WheelLockedTime != null && endOutcome.WheelLockedTime > TimeSpan.Zero) { switch (outcome) { case UserSetting.Outcome.Edge: case UserSetting.Outcome.Task: user.LockReason = ((int)UserSetting.LockReason.Task).ToString(); break; default: user.LockReason = ((int)UserSetting.LockReason.Cooldown).ToString(); break; } } if (user.DenialTime == null || user.DenialTime < DateTime.Now) { user.DenialTime = DateTime.Now; } if (user.LockTime == null || user.LockTime < DateTime.Now) { user.LockTime = DateTime.Now; } user.DenialTime += endOutcome.DenialTime; user.LockTime += endOutcome.WheelLockedTime; await context.SaveChangesAsync(); await CheckUserHasOrgasm(ctx, outcome); }