From 34d5d9c42acbb72670aa9ee249317707e5596d18 Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Thu, 24 Feb 2022 12:59:32 +0700 Subject: [PATCH] Remove shield if they sell it --- Bot/Store.fs | 28 ++++++++++++++++------------ DbService/DbService.fs | 13 +++++++++++++ 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/Bot/Store.fs b/Bot/Store.fs index eae1ee4..6a4a219 100644 --- a/Bot/Store.fs +++ b/Bot/Store.fs @@ -60,18 +60,22 @@ let handleBuyItem (ctx : IDiscordContext) itemId = let handleSell (ctx : IDiscordContext) itemId = Game.executePlayerAction ctx (fun player -> async { let item = Armory.getItem itemId - do! player - |> checkSoldItemAlready item - |> handleResultWithResponse ctx (fun player -> async { - let updatedPlayer = { - player with - Bank = player.Bank + item.Price - Inventory = player.Inventory |> Array.filter (fun i -> i.Id <> itemId) - Events = player.Events |> Array.filter (fun e -> match e.Type with Shielding _ -> true | _ -> false) - } - do! DbService.updatePlayer GuildEnvironment.pgDb updatedPlayer - |> Async.Ignore - do! sendFollowUpMessage ctx $"Sold {item.Type} {item.Name} for {item.Price}! Current Balance: {updatedPlayer.Bank}" + do! + player + |> checkSoldItemAlready item + |> handleResultWithResponse ctx (fun player -> async { + let updatedPlayer = { + player with + Bank = player.Bank + item.Price + Inventory = player.Inventory |> Array.filter (fun i -> i.Id <> itemId) + } + do! + [ DbService.updatePlayer GuildEnvironment.pgDb updatedPlayer |> Async.Ignore + DbService.removeShieldEvent GuildEnvironment.pgDb updatedPlayer.DiscordId itemId |> Async.Ignore + sendFollowUpMessage ctx $"Sold {item.Type} {item.Name} for {item.Price}! Current Balance: {updatedPlayer.Bank}" ] + |> Async.Parallel + |> Async.Ignore + }) }) diff --git a/DbService/DbService.fs b/DbService/DbService.fs index 776cca3..dedf9fb 100644 --- a/DbService/DbService.fs +++ b/DbService/DbService.fs @@ -122,6 +122,19 @@ let checkHasAchievement connStr (did : uint64) (achievement : string) = async { return List.isEmpty result |> not } +let removeShieldEvent connStr (did : uint64) shieldId = + connStr + |> Sql.connect + |> Sql.parameters + [ ( "did" , Sql.string (string did) ) + ( "shield_id", Sql.int shieldId ) ] + |> Sql.query """ + WITH usr AS (SELECT id FROM "user" WHERE discord_id = @did) + DELETE FROM player_event USING usr WHERE user_id = usr.id and event_type = 'Shielding' and item_id = @shield_id + """ + |> Sql.executeNonQueryAsync + |> Async.AwaitTask + let addPlayerEvent connStr (did : uint64) (playerEvent : PlayerEvent) = let sqlParams , query = match playerEvent.Type with