PlayerEvents SQL and updates to the model
This commit is contained in:
		
							parent
							
								
									6d7ee2ed16
								
							
						
					
					
						commit
						31de79f1b6
					
				@ -82,12 +82,7 @@ let updateCombatants successfulHack (attacker : PlayerData) (defender : PlayerDa
 | 
				
			|||||||
            HackId = hack.Id
 | 
					            HackId = hack.Id
 | 
				
			||||||
            Adversary = if isDefenderEvent then attacker.basicPlayer else defender.basicPlayer
 | 
					            Adversary = if isDefenderEvent then attacker.basicPlayer else defender.basicPlayer
 | 
				
			||||||
            IsInstigator = not isDefenderEvent
 | 
					            IsInstigator = not isDefenderEvent
 | 
				
			||||||
            Result =
 | 
					            Success = successfulHack
 | 
				
			||||||
                match successfulHack , isDefenderEvent with
 | 
					 | 
				
			||||||
                | true  , true  -> PlayerEventResult.Negative
 | 
					 | 
				
			||||||
                | false , true  -> PlayerEventResult.Positive
 | 
					 | 
				
			||||||
                | true  , false -> PlayerEventResult.Positive
 | 
					 | 
				
			||||||
                | false , false -> PlayerEventResult.Negative
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        { Type = Hacking hackEvent
 | 
					        { Type = Hacking hackEvent
 | 
				
			||||||
          Timestamp = DateTime.UtcNow
 | 
					          Timestamp = DateTime.UtcNow
 | 
				
			||||||
 | 
				
			|||||||
@ -151,7 +151,7 @@ let handleSteal (ctx : IDiscordContext) =
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        let num = rand.NextDouble()
 | 
					        let num = rand.NextDouble()
 | 
				
			||||||
        let dp = { DiscordPlayer.Id = targetId ; DiscordPlayer.Name = targetName }
 | 
					        let dp = { DiscordPlayer.Id = targetId ; DiscordPlayer.Name = targetName }
 | 
				
			||||||
        let stealAction result = {
 | 
					        let stealAction = {
 | 
				
			||||||
             Type = Stealing ( true , dp )
 | 
					             Type = Stealing ( true , dp )
 | 
				
			||||||
             Cooldown = ThiefCooldown.Minutes * 1<mins>
 | 
					             Cooldown = ThiefCooldown.Minutes * 1<mins>
 | 
				
			||||||
             Timestamp = DateTime.UtcNow
 | 
					             Timestamp = DateTime.UtcNow
 | 
				
			||||||
@ -185,7 +185,7 @@ let handleSteal (ctx : IDiscordContext) =
 | 
				
			|||||||
                |> Async.Ignore
 | 
					                |> Async.Ignore
 | 
				
			||||||
        | false ->
 | 
					        | false ->
 | 
				
			||||||
            let embed = getResultEmbed' WentToPrison
 | 
					            let embed = getResultEmbed' WentToPrison
 | 
				
			||||||
            do! DbService.updatePlayer GuildEnvironment.pgDb { thief with Events = Array.append [| stealAction PlayerEventResult.Neutral |] thief.Events }
 | 
					            do! DbService.updatePlayer GuildEnvironment.pgDb { thief with Events = Array.append [| stealAction |] thief.Events }
 | 
				
			||||||
                |> Async.Ignore
 | 
					                |> Async.Ignore
 | 
				
			||||||
            do! Messaging.sendFollowUpEmbed ctx (embed.Build())
 | 
					            do! Messaging.sendFollowUpEmbed ctx (embed.Build())
 | 
				
			||||||
            do! Async.Sleep 2000
 | 
					            do! Async.Sleep 2000
 | 
				
			||||||
 | 
				
			|||||||
@ -18,7 +18,7 @@ let TrainerEvents = [|
 | 
				
			|||||||
    Cooldown = 2<mins>
 | 
					    Cooldown = 2<mins>
 | 
				
			||||||
    Type = Hacking {
 | 
					    Type = Hacking {
 | 
				
			||||||
        Adversary = Sensei
 | 
					        Adversary = Sensei
 | 
				
			||||||
        Result = PlayerEventResult.Positive
 | 
					        Success = true
 | 
				
			||||||
        IsInstigator = true
 | 
					        IsInstigator = true
 | 
				
			||||||
        HackId = defaultHack.Id } }
 | 
					        HackId = defaultHack.Id } }
 | 
				
			||||||
  { Timestamp = System.DateTime.UtcNow
 | 
					  { Timestamp = System.DateTime.UtcNow
 | 
				
			||||||
 | 
				
			|||||||
@ -34,8 +34,10 @@ let tryFindPlayer connStr (discordId : uint64) =
 | 
				
			|||||||
            let! user =
 | 
					            let! user =
 | 
				
			||||||
                connStr
 | 
					                connStr
 | 
				
			||||||
                |> Sql.connect
 | 
					                |> Sql.connect
 | 
				
			||||||
                |> Sql.query ("SELECT discord_id, display_name, gbt, strength, inventory " +
 | 
					                |> Sql.query """
 | 
				
			||||||
                              "FROM \"user\" WHERE discord_id = @did")
 | 
					                      SELECT discord_id, display_name, gbt, strength, inventory
 | 
				
			||||||
 | 
					                      FROM "user" WHERE discord_id = @did")
 | 
				
			||||||
 | 
					                  """
 | 
				
			||||||
                |> Sql.parameters [ "did", Sql.string (string discordId) ]
 | 
					                |> Sql.parameters [ "did", Sql.string (string discordId) ]
 | 
				
			||||||
                |> Sql.executeAsync (fun read ->
 | 
					                |> Sql.executeAsync (fun read ->
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
@ -58,26 +60,86 @@ let tryFindPlayer connStr (discordId : uint64) =
 | 
				
			|||||||
let updatePlayer connStr (player : PlayerData) =
 | 
					let updatePlayer connStr (player : PlayerData) =
 | 
				
			||||||
    connStr
 | 
					    connStr
 | 
				
			||||||
    |> Sql.connect
 | 
					    |> Sql.connect
 | 
				
			||||||
    |> Sql.query
 | 
					 | 
				
			||||||
        ("UPDATE \"user\" SET gbt = @gbt, strength = @str, inventory = @inv " +
 | 
					 | 
				
			||||||
        " WHERE discord_id = @did")
 | 
					 | 
				
			||||||
    |> Sql.parameters [
 | 
					    |> Sql.parameters [
 | 
				
			||||||
        "did", Sql.string (string player.DiscordId)
 | 
					        "did", Sql.string (string player.DiscordId)
 | 
				
			||||||
        "gbt", Sql.int (int player.Bank)
 | 
					        "gbt", Sql.int (int player.Bank)
 | 
				
			||||||
        "str", Sql.int (int player.Traits.Strength)
 | 
					        "str", Sql.int (int player.Traits.Strength)
 | 
				
			||||||
        "inv", Sql.intArray (player.Inventory |> Array.map (fun i -> i.Id))
 | 
					        "inv", Sql.intArray (player.Inventory |> Array.map (fun i -> i.Id))
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
 | 
					    |> Sql.query """
 | 
				
			||||||
 | 
					           UPDATE "user" SET gbt = @gbt, strength = @str, inventory = @inv
 | 
				
			||||||
 | 
					           WHERE discord_id = @did")
 | 
				
			||||||
 | 
					       """
 | 
				
			||||||
    |> Sql.executeNonQueryAsync
 | 
					    |> Sql.executeNonQueryAsync
 | 
				
			||||||
    |> Async.AwaitTask
 | 
					    |> Async.AwaitTask
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let addAchievement connStr (did : uint64) (achievement : string) =
 | 
					let addAchievement connStr (did : uint64) (achievement : string) =
 | 
				
			||||||
    connStr
 | 
					    connStr
 | 
				
			||||||
    |> Sql.connect
 | 
					    |> Sql.connect
 | 
				
			||||||
    |> Sql.query
 | 
					    |> Sql.query """
 | 
				
			||||||
        ("WITH ach AS (INSERT INTO achievement (symbol) VALUES (@symbol) RETURNING id),
 | 
					           WITH ach AS (INSERT INTO achievement (symbol) VALUES (@symbol) RETURNING id),
 | 
				
			||||||
               usr AS (SELECT id FROM \"user\" WHERE discord_id = @did)
 | 
					                usr AS (SELECT id FROM "user" WHERE discord_id = @did)
 | 
				
			||||||
           INSERT INTO user_achievements_achievement (user_id, achievement_id) SELECT usr.id, ach.id FROM usr, ach")
 | 
					           INSERT INTO user_achievements_achievement (user_id, achievement_id) SELECT usr.id, ach.id FROM usr, ach")
 | 
				
			||||||
 | 
					       """
 | 
				
			||||||
    |> Sql.parameters [ ( "did" , Sql.string (string did) ) ; ( "achievement", Sql.string achievement ) ]
 | 
					    |> Sql.parameters [ ( "did" , Sql.string (string did) ) ; ( "achievement", Sql.string achievement ) ]
 | 
				
			||||||
    |> Sql.executeNonQueryAsync
 | 
					    |> Sql.executeNonQueryAsync
 | 
				
			||||||
    |> Async.AwaitTask
 | 
					    |> Async.AwaitTask
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let addPlayerEvent connStr (did : uint64) (playerEvent : PlayerEvent) =
 | 
				
			||||||
 | 
					    let sqlParams , query =
 | 
				
			||||||
 | 
					        match playerEvent.Type with
 | 
				
			||||||
 | 
					        | Hacking h ->
 | 
				
			||||||
 | 
					            [
 | 
				
			||||||
 | 
					                ( "did", Sql.string (string did) )
 | 
				
			||||||
 | 
					                ( "success" , Sql.bool h.Success )
 | 
				
			||||||
 | 
					                ( "is_instigator", Sql.bool h.IsInstigator )
 | 
				
			||||||
 | 
					                ( "item_id", Sql.int h.HackId )
 | 
				
			||||||
 | 
					                ( "cooldown", Sql.int (int playerEvent.Cooldown) )
 | 
				
			||||||
 | 
					                ( "adversary_id", Sql.string (string h.Adversary.Id) )
 | 
				
			||||||
 | 
					                ( "adversary_name", Sql.string (string h.Adversary.Name) )
 | 
				
			||||||
 | 
					            ] ,
 | 
				
			||||||
 | 
					            """
 | 
				
			||||||
 | 
					                WITH usr AS (SELECT id FROM "user" WHERE discord_id = @did)
 | 
				
			||||||
 | 
					                INSERT INTO player_event (event_type, success, is_instigator, item_id, cooldown, adversary_id, adversary_name, user_id)
 | 
				
			||||||
 | 
					                SELECT 'Hacking', @success, @is_instigator, @item_id, @cooldown, @adversary_id, @adversary_name, usr.id FROM usr
 | 
				
			||||||
 | 
					            """
 | 
				
			||||||
 | 
					        | Shielding id ->
 | 
				
			||||||
 | 
					            [
 | 
				
			||||||
 | 
					                ( "did" , Sql.string (string did) )
 | 
				
			||||||
 | 
					                ( "item_id", Sql.int id )
 | 
				
			||||||
 | 
					                ( "cooldown", Sql.int (int playerEvent.Cooldown) )
 | 
				
			||||||
 | 
					            ] ,
 | 
				
			||||||
 | 
					            """
 | 
				
			||||||
 | 
					                WITH usr AS (SELECT id FROM "user" WHERE discord_id = @did)
 | 
				
			||||||
 | 
					                INSERT INTO player_event (event_type, item_id, cooldown, user_id)
 | 
				
			||||||
 | 
					                SELECT 'Shielding', @item_id, @cooldown, usr.id FROM usr
 | 
				
			||||||
 | 
					            """
 | 
				
			||||||
 | 
					        | Stealing(instigator, victim) ->
 | 
				
			||||||
 | 
					            [
 | 
				
			||||||
 | 
					                ( "did" , Sql.string (string did) )
 | 
				
			||||||
 | 
					                ( "is_instigator", Sql.bool instigator )
 | 
				
			||||||
 | 
					                ( "adversary_id", Sql.string (string victim.Id) )
 | 
				
			||||||
 | 
					                ( "adversary_name", Sql.string (string victim.Name) )
 | 
				
			||||||
 | 
					                ( "cooldown", Sql.int (int playerEvent.Cooldown) )
 | 
				
			||||||
 | 
					            ] ,
 | 
				
			||||||
 | 
					            """
 | 
				
			||||||
 | 
					                WITH usr AS (SELECT id FROM "user" WHERE discord_id = @did)
 | 
				
			||||||
 | 
					                INSERT INTO player_event (event_type, is_instigator, adversary_id, adversary_name, cooldown, user_id)
 | 
				
			||||||
 | 
					                SELECT 'Stealing', @is_instigator, @adversary_id, @adversary_name, @cooldown, usr.id FROM usr
 | 
				
			||||||
 | 
					            """
 | 
				
			||||||
 | 
					        | Imprison ->
 | 
				
			||||||
 | 
					            [
 | 
				
			||||||
 | 
					                ( "did" , Sql.string (string did) )
 | 
				
			||||||
 | 
					                ( "cooldown", Sql.int (int playerEvent.Cooldown) )
 | 
				
			||||||
 | 
					            ] ,
 | 
				
			||||||
 | 
					            """
 | 
				
			||||||
 | 
					                WITH usr AS (SELECT id FROM "user" WHERE discord_id = @did)
 | 
				
			||||||
 | 
					                INSERT INTO player_event (event_type, cooldown, user_id)
 | 
				
			||||||
 | 
					                SELECT 'Stealing', @cooldown, usr.id FROM usr
 | 
				
			||||||
 | 
					            """
 | 
				
			||||||
 | 
					    connStr
 | 
				
			||||||
 | 
					    |> Sql.connect
 | 
				
			||||||
 | 
					    |> Sql.parameters sqlParams
 | 
				
			||||||
 | 
					    |> Sql.query query
 | 
				
			||||||
 | 
					    |> Sql.executeNonQueryAsync
 | 
				
			||||||
 | 
					    |> Async.AwaitTask
 | 
				
			||||||
 | 
				
			|||||||
@ -87,15 +87,10 @@ module Types =
 | 
				
			|||||||
    type DiscordPlayer = { Id: uint64; Name: string }
 | 
					    type DiscordPlayer = { Id: uint64; Name: string }
 | 
				
			||||||
        with static member empty = { Id = 0uL ; Name = "None" }
 | 
					        with static member empty = { Id = 0uL ; Name = "None" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    type PlayerEventResult =
 | 
					 | 
				
			||||||
        | Positive
 | 
					 | 
				
			||||||
        | Neutral
 | 
					 | 
				
			||||||
        | Negative
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    type HackEvent = {
 | 
					    type HackEvent = {
 | 
				
			||||||
        IsInstigator : bool
 | 
					        IsInstigator : bool
 | 
				
			||||||
        Adversary : DiscordPlayer
 | 
					        Adversary : DiscordPlayer
 | 
				
			||||||
        Result : PlayerEventResult
 | 
					        Success : bool
 | 
				
			||||||
        HackId : int
 | 
					        HackId : int
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user