From b501dfbb73c0a7795843ea996724d00c76dfdc26 Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Mon, 24 Jan 2022 01:38:08 +0700 Subject: [PATCH] Fix store bugs --- Bot/Items.json | 24 ++++++++++++------------ Bot/Store.fs | 49 ++++++++++++++++++++++--------------------------- 2 files changed, 34 insertions(+), 39 deletions(-) diff --git a/Bot/Items.json b/Bot/Items.json index a197a47..3289061 100644 --- a/Bot/Items.json +++ b/Bot/Items.json @@ -2,61 +2,61 @@ { "Name" : "Virus", "ItemType" : { "Case" : "Hack" }, - "Cost" : 5.0 + "Cost" : 5 }, { "Name" : "Ransom", "ItemType" : { "Case" : "Hack" }, - "Cost" : 10.0 + "Cost" : 10 }, { "Name" : "Worm", "ItemType" : { "Case" : "Hack" }, - "Cost" : 5.0 + "Cost" : 5 }, { "Name" : "DDos", "ItemType" : { "Case" : "Hack" }, - "Cost" : 10.0 + "Cost" : 10 }, { "Name" : "Crack", "ItemType" : { "Case" : "Hack" }, - "Cost" : 5.0 + "Cost" : 5 }, { "Name" : "Injection", "ItemType" : { "Case" : "Hack" }, - "Cost" : 10.0 + "Cost" : 10 }, { "Name" : "Firewall", "ItemType" : { "Case" : "Shield" }, - "Cost" : 5.0 + "Cost" : 5 }, { "Name" : "PortScan", "ItemType" : { "Case" : "Shield" }, - "Cost" : 10.0 + "Cost" : 10 }, { "Name" : "Cypher", "ItemType" : { "Case" : "Shield" }, - "Cost" : 5.0 + "Cost" : 5 }, { "Name" : "Encryption", "ItemType" : { "Case" : "Shield" }, - "Cost" : 10.0 + "Cost" : 10 }, { "Name" : "Sanitation", "ItemType" : { "Case" : "Shield" }, - "Cost" : 5.0 + "Cost" : 5 }, { "Name" : "Hardening", "ItemType" : { "Case" : "Shield" }, - "Cost" : 10.0 + "Cost" : 10 } ] diff --git a/Bot/Store.fs b/Bot/Store.fs index f80c099..d54e497 100644 --- a/Bot/Store.fs +++ b/Bot/Store.fs @@ -11,11 +11,9 @@ open Degenz.Shared open Newtonsoft.Json let store = - try let file = System.IO.File.ReadAllText("Items.json") JsonConvert.DeserializeObject(file) |> Array.groupBy (fun (i : Item) -> i.ItemType) - with _ -> [||] let viewStore (ctx : InteractionContext) = async { @@ -85,7 +83,7 @@ let constructItemButtons playerInfo itemType (items : 'a array) = items |> Seq.map (fun item -> DiscordButtonComponent(ButtonStyle.Primary, $"{playerInfo}-{itemType}-{item}", $"{item}")) -let sellItem (ctx : InteractionContext) = +let sell (ctx : InteractionContext) = async { let! playerResult = DbService.tryFindPlayer ctx.Member.Id match playerResult with @@ -123,6 +121,23 @@ let sellItem (ctx : InteractionContext) = } |> Async.StartAsTask :> Task +let updateShields player salePrice updatedShields = { player with Bank = player.Bank + salePrice ; Shields = updatedShields } +let updateHacks player salePrice updatedHacks = { player with Bank = player.Bank + salePrice ; Weapons = updatedHacks } + +let sellItem (event : ComponentInteractionCreateEventArgs) updateFn player inventory itemType itemName = + async { + let item = getItems itemType |> Array.find (fun i -> i.Name = itemName) + let salePrice = item.Cost + let updatedItems = inventory |> Array.filter (fun i -> string i <> itemName) + let updatedPlayer = updateFn player salePrice updatedItems + do! DbService.updatePlayer updatedPlayer + let builder = DiscordInteractionResponseBuilder() + builder.IsEphemeral <- true + builder.Content <- $"Sold {itemType.ToString().ToLower()} {itemName} for {salePrice}! Current Balance: {updatedPlayer.Bank}" + do! event.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, builder) + |> Async.AwaitTask + } + let handleSellButtonEvents (_ : DiscordClient) (event : ComponentInteractionCreateEventArgs) = async { let! playerResult = DbService.tryFindPlayer event.User.Id @@ -132,28 +147,8 @@ let handleSellButtonEvents (_ : DiscordClient) (event : ComponentInteractionCrea let itemType = match split.[0] with "Hack" -> ItemType.Hack | _ -> ItemType.Shield let itemName = split.[1] match itemType with - | ItemType.Hack -> - let item = getItems ItemType.Hack |> Array.find (fun w -> w.Name = itemName) - let salePrice = item.Cost / 2 - let updatedWeapons = player.Weapons |> Array.filter (fun (w : Hack) -> string w <> itemName) - let updatedPlayer = { player with Bank = player.Bank + salePrice ; Weapons = updatedWeapons } - do! DbService.updatePlayer updatedPlayer - let builder = DiscordInteractionResponseBuilder() - builder.IsEphemeral <- true - builder.Content <- $"Sold hack {itemName} for {salePrice}! Current Balance: {updatedPlayer.Bank}" - do! event.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, builder) - |> Async.AwaitTask - | ItemType.Shield -> - let item = getItems ItemType.Shield |> Array.find (fun s -> s.Name = itemName) - let salePrice = item.Cost / 2 - let updatedShields = player.Shields |> Array.filter (fun (s : Shield) -> string s <> itemName) - let updatedPlayer = { player with Bank = player.Bank + salePrice ; Shields = updatedShields } - do! DbService.updatePlayer updatedPlayer - let builder = DiscordInteractionResponseBuilder() - builder.IsEphemeral <- true - builder.Content <- $"Sold shield {itemName} for {salePrice}! Current Balance: {updatedPlayer.Bank}" - do! event.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, builder) - |> Async.AwaitTask + | ItemType.Hack -> do! sellItem event updateHacks player player.Weapons ItemType.Hack itemName + | ItemType.Shield -> do! sellItem event updateShields player player.Shields ItemType.Hack itemName | None -> let builder = DiscordInteractionResponseBuilder() builder.IsEphemeral <- true @@ -166,7 +161,7 @@ let handleSellButtonEvents (_ : DiscordClient) (event : ComponentInteractionCrea type Store() = inherit ApplicationCommandModule () - [] + [] member _.ViewStore (ctx : InteractionContext) = viewStore ctx [] @@ -178,5 +173,5 @@ type Store() = buyShield ctx shieldId [] - member this.SellItem (ctx : InteractionContext) = sellItem ctx + member this.SellItem (ctx : InteractionContext) = sell ctx