From 87e0c063a8812f10d8b31a664d700780bff1652c Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Wed, 2 Feb 2022 03:05:07 +0700 Subject: [PATCH] Bring store back and fix typos --- Bot/Store.fs | 69 +++++++++++++++++++++++--------------------------- Bot/Trainer.fs | 8 +++--- 2 files changed, 35 insertions(+), 42 deletions(-) diff --git a/Bot/Store.fs b/Bot/Store.fs index 2978a45..6a38a51 100644 --- a/Bot/Store.fs +++ b/Bot/Store.fs @@ -1,6 +1,5 @@ module Degenz.Store -open System open System.Threading.Tasks open DSharpPlus.Entities open DSharpPlus @@ -17,16 +16,23 @@ let viewStore (ctx : InteractionContext) = } |> Async.StartAsTask :> Task -let buyItem (ctx : InteractionContext) itemType = +let buyItem (ctx : InteractionContext) itemId = Game.executePlayerInteraction ctx (fun player -> async { - let embed = DiscordEmbedBuilder() - -// embed.Fields - - do! ctx.CreateResponseAsync(embed, true) - |> Async.AwaitTask + let item = Armory.getItem itemId + let newBalance = player.Bank - item.Cost + if newBalance >= 0 then + let playerHasItem = player.Arsenal |> Array.exists (fun w -> item.Id = w.Id) + if not playerHasItem then + let p = { player with Bank = newBalance ; Arsenal = Array.append [| item |] player.Arsenal } + do! DbService.updatePlayer p + do! sendSimpleResponse ctx $"Successfully purchased {item.Name}! You now have {newBalance} remaining" + else + do! sendSimpleResponse ctx $"You already own this item!" + else + do! sendSimpleResponse ctx $"You do not have sufficient funds to buy this item! Current balance: {player.Bank} GBT" }) + let sell (ctx : InteractionContext) = Game.executePlayerInteraction ctx (fun player -> async { let hasInventoryToSell = Array.length player.Arsenal > 0 @@ -50,18 +56,6 @@ let sell (ctx : InteractionContext) = do! sendSimpleResponse ctx "You currently have no inventory to sell" }) -let sellItem (event : ComponentInteractionCreateEventArgs) player itemId = - async { - let item = Armory.battleItems |> Array.find (fun i -> i.Id = itemId) - let updatedPlayer = { player with Bank = player.Bank + item.Cost ; Arsenal = player.Arsenal |> Array.filter (fun w -> w.Id <> itemId)} - do! DbService.updatePlayer updatedPlayer - let builder = DiscordInteractionResponseBuilder() - builder.IsEphemeral <- true - builder.Content <- $"Sold {item.Type} {item.Name} for {item.Cost}! Current Balance: {updatedPlayer.Bank}" - do! event.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, builder) - |> Async.AwaitTask - } - let handleBuyItem (ctx : InteractionContext) itemId = Game.executePlayerInteraction ctx (fun player -> async { let item = Armory.battleItems |> Array.find (fun w -> w.Id = itemId) @@ -79,20 +73,17 @@ let handleBuyItem (ctx : InteractionContext) itemId = }) let handleSellButtonEvents (_ : DiscordClient) (event : ComponentInteractionCreateEventArgs) = - async { - let! playerResult = DbService.tryFindPlayer event.User.Id - match playerResult with - | Some player -> - let itemId = int <| event.Id.Split("-").[1] - do! sellItem event player itemId - | None -> - let builder = DiscordInteractionResponseBuilder() - builder.IsEphemeral <- true - builder.Content <- "An error occurred and the user doesn't not exist" - do! event.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, builder) - |> Async.AwaitTask - } |> Async.StartAsTask - :> Task + Game.executePlayerEvent event (fun player -> async { + let itemId = int <| event.Id.Split("-").[1] + let item = Armory.getItem itemId + let updatedPlayer = { player with Bank = player.Bank + item.Cost ; Arsenal = player.Arsenal |> Array.filter (fun w -> w.Id <> itemId)} + do! DbService.updatePlayer updatedPlayer + let builder = DiscordInteractionResponseBuilder() + builder.IsEphemeral <- true + builder.Content <- $"Sold {item.Type} {item.Name} for {item.Cost}! Current Balance: {updatedPlayer.Bank}" + do! event.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, builder) + |> Async.AwaitTask + }) let status (ctx : InteractionContext) = Game.executePlayerInteraction ctx (fun player -> async { @@ -110,18 +101,20 @@ let status (ctx : InteractionContext) = type Store() = inherit ApplicationCommandModule () -// [] -// member _.ViewStore (ctx : InteractionContext) = viewStore ctx + [] + member _.Armory (ctx : InteractionContext) = viewStore ctx [] member this.Arsenal (ctx : InteractionContext) = status ctx [] - member _.BuyHack (ctx : InteractionContext) = buyItem ctx Hack + member _.BuyHack (ctx : InteractionContext, [] hackId : HackId) = + buyItem ctx (int hackId) [] - member this.BuyShield (ctx : InteractionContext) = buyItem ctx Shield + member this.BuyShield (ctx : InteractionContext, [] shieldId : ShieldId) = + buyItem ctx (int shieldId) [] member this.SellItem (ctx : InteractionContext) = sell ctx diff --git a/Bot/Trainer.fs b/Bot/Trainer.fs index 4695722..6e6fb01 100644 --- a/Bot/Trainer.fs +++ b/Bot/Trainer.fs @@ -34,8 +34,8 @@ let handleTrainerStep1 (event : ComponentInteractionCreateEventArgs) = let shieldMessage = if Player.shields player |> Array.isEmpty - then $"You do not have any Shields in your arsenal, take this {defaultShield.Name}, you can use it for now" - else $"Looks like you have `{weaponName}` in your arsenal… 👀\n" + then $"You do not have any Shields in your arsenal, take this {defaultShield.Name}, you can use it for now.\n\n" + else $"Looks like you have `{weaponName}` in your arsenal… 👀\n\n" do! sendInteractionEvent event ("Beautopia© is a dangerous place...\n" @@ -89,8 +89,8 @@ let handleTrainerStep3 (event : ComponentInteractionCreateEventArgs) = let hackMessage = if Player.shields player |> Array.isEmpty - then $"You do not have any Hacks in your arsenal, take this {defaultHack.Name}, you can use it for now" - else $"Looks like you have `{weaponName}` in your arsenal..." + then $"You do not have any Hacks in your arsenal, take this {defaultHack.Name}, you can use it for now.\n\n" + else $"Looks like you have `{weaponName}` in your arsenal...\n\n" do! sendFollowUpMessage event ("Now let’s **HACK!** 💻\n\n"