From 3d214d69a10491b3f291c2247826e11463f668d7 Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Mon, 17 Jan 2022 15:11:05 +0700 Subject: [PATCH] Improving the spin flow --- HackerBattle/Commands.fs | 1 + SlotMachine/SlotMachine.fs | 93 ++++++++++++++++++++++++-------------- 2 files changed, 59 insertions(+), 35 deletions(-) diff --git a/HackerBattle/Commands.fs b/HackerBattle/Commands.fs index 70d6eaf..e63e0c0 100644 --- a/HackerBattle/Commands.fs +++ b/HackerBattle/Commands.fs @@ -114,6 +114,7 @@ let handleAttack (event : ComponentInteractionCreateEventArgs) = | false -> let prize = 1.337f // LEET let attack = { HackType = enum(int weapon) ; Timestamp = DateTime.UtcNow ; Target = { Id = targetId ; Name = split.[3] } } + // TODO: Make a single update instead of two do! DbService.updatePlayer <| updatePlayer prize attack player do! DbService.updatePlayer { target with Bank = MathF.Max(target.Bank - prize, 0f)} diff --git a/SlotMachine/SlotMachine.fs b/SlotMachine/SlotMachine.fs index f491733..9a89f14 100644 --- a/SlotMachine/SlotMachine.fs +++ b/SlotMachine/SlotMachine.fs @@ -3,9 +3,10 @@ open System.Threading.Tasks open DSharpPlus open DSharpPlus.Entities open DSharpPlus.SlashCommands -open System.IO +open DegenzGame +open DegenzGame.Shared -let slots = [| "https://i.ibb.co/pKqZdr7/cherry.png" ; "https://i.ibb.co/Mk8wQmv/lemon.jpg" ; "https://i.ibb.co/1JTFPSs/seven.png" |] +let slots = [| "https://i.ibb.co/pKqZdr7/cherry.png" ; "https://i.ibb.co/JnghQsL/lemon.jpg" ; "https://i.ibb.co/1JTFPSs/seven.png" |] type EmptyGlobalCommandToAvoidFamousDuplicateSlashCommandsBug() = inherit ApplicationCommandModule () @@ -15,44 +16,66 @@ type SlotMachine() = [] member this.AttackCommand (ctx : InteractionContext) = async { - let sleepTime = 1000 - let random = Random(System.Guid.NewGuid().GetHashCode()) - let results = [ random.Next(0, 3) ; random.Next(0, 3) ; random.Next(0, 3)] + let! playerResult = DbService.tryFindPlayer ctx.Member.Id + match playerResult with + | Some player -> + let sleepTime = 1000 + let random = Random(System.Guid.NewGuid().GetHashCode()) + let results = [ random.Next(0, 3) ; random.Next(0, 3) ; random.Next(0, 3)] - do! ctx.Interaction.CreateResponseAsync(InteractionResponseType.DeferredChannelMessageWithSource) - |> Async.AwaitTask + let winConditions = (results.[0] = results.[1] && results.[0] = results.[2]) + || (results.[0] <> results.[1] && results.[1] <> results.[2] && results.[0] <> results.[2]) - do! Async.Sleep sleepTime - let builder = DiscordFollowupMessageBuilder() - let embed = DiscordEmbedBuilder() - embed.ImageUrl <- slots.[results.[0]] - builder.AddEmbed(embed.Build()) |> ignore - do! ctx.Interaction.CreateFollowupMessageAsync(builder) - |> Async.AwaitTask - |> Async.Ignore + if winConditions then + do! DbService.updatePlayer { player with Bank = player.Bank + 10.0f } + else + do! DbService.updatePlayer { player with Bank = MathF.Max(player.Bank - 0.5f, 0.0f) } - do! Async.Sleep sleepTime - let builder = DiscordFollowupMessageBuilder() - embed.ImageUrl <- slots.[results.[1]] - builder.AddEmbed(embed.Build()) |> ignore - do! ctx.Interaction.CreateFollowupMessageAsync(builder) - |> Async.AwaitTask - |> Async.Ignore - do! Async.Sleep sleepTime - let builder = DiscordFollowupMessageBuilder() - embed.ImageUrl <- slots.[results.[2]] - builder.AddEmbed(embed.Build()) |> ignore - do! ctx.Interaction.CreateFollowupMessageAsync(builder) - |> Async.AwaitTask - |> Async.Ignore + do! ctx.Interaction.CreateResponseAsync(InteractionResponseType.DeferredChannelMessageWithSource) + |> Async.AwaitTask - do! Async.Sleep sleepTime - let builder = DiscordFollowupMessageBuilder() - builder.Content <- "You win!" - do! ctx.Interaction.CreateFollowupMessageAsync(builder) - |> Async.AwaitTask - |> Async.Ignore + do! Async.Sleep sleepTime + let builder = DiscordFollowupMessageBuilder() + let embed = DiscordEmbedBuilder() + embed.ImageUrl <- slots.[results.[0]] + builder.AddEmbed(embed.Build()) |> ignore + do! ctx.Interaction.CreateFollowupMessageAsync(builder) + |> Async.AwaitTask + |> Async.Ignore + + do! Async.Sleep sleepTime + let builder = DiscordFollowupMessageBuilder() + embed.ImageUrl <- slots.[results.[1]] + builder.AddEmbed(embed.Build()) |> ignore + do! ctx.Interaction.CreateFollowupMessageAsync(builder) + |> Async.AwaitTask + |> Async.Ignore + + do! Async.Sleep sleepTime + let builder = DiscordFollowupMessageBuilder() + embed.ImageUrl <- slots.[results.[2]] + builder.AddEmbed(embed.Build()) |> ignore + do! ctx.Interaction.CreateFollowupMessageAsync(builder) + |> Async.AwaitTask + |> Async.Ignore + + if winConditions then + do! Async.Sleep sleepTime + let builder = DiscordFollowupMessageBuilder() + builder.Content <- "You win 10 GBT!" + do! ctx.Interaction.CreateFollowupMessageAsync(builder) + |> Async.AwaitTask + |> Async.Ignore + else + do! Async.Sleep sleepTime + let builder = DiscordFollowupMessageBuilder() + builder.Content <- "You lose 0.5 GBT! Try your luck again!" + do! ctx.Interaction.CreateFollowupMessageAsync(builder) + |> Async.AwaitTask + |> Async.Ignore + + | None -> do! notYetAHackerMsg ctx } |> Async.StartAsTask :> Task