Got SQL queries working
This commit is contained in:
		
							parent
							
								
									fc56b4a64b
								
							
						
					
					
						commit
						014862d642
					
				@ -3,8 +3,6 @@ namespace Degenz
 | 
				
			|||||||
open System.Threading.Tasks
 | 
					open System.Threading.Tasks
 | 
				
			||||||
open DSharpPlus
 | 
					open DSharpPlus
 | 
				
			||||||
open DSharpPlus.Entities
 | 
					open DSharpPlus.Entities
 | 
				
			||||||
open DSharpPlus.EventArgs
 | 
					 | 
				
			||||||
open DSharpPlus.SlashCommands
 | 
					 | 
				
			||||||
open Degenz.DbService
 | 
					open Degenz.DbService
 | 
				
			||||||
open Degenz.Messaging
 | 
					open Degenz.Messaging
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -28,9 +26,7 @@ module Game =
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    let executePlayerAction (ctx : IDiscordContext) (dispatch : PlayerData -> Async<unit>) =
 | 
					    let executePlayerAction (ctx : IDiscordContext) (dispatch : PlayerData -> Async<unit>) =
 | 
				
			||||||
        async {
 | 
					        async {
 | 
				
			||||||
            let builder = DiscordInteractionResponseBuilder()
 | 
					            let builder = DiscordInteractionResponseBuilder().AsEphemeral(true)
 | 
				
			||||||
            builder.IsEphemeral <- true
 | 
					 | 
				
			||||||
            builder.Content <- "Content"
 | 
					 | 
				
			||||||
            do! ctx.Respond(InteractionResponseType.DeferredChannelMessageWithSource, builder) |> Async.AwaitTask
 | 
					            do! ctx.Respond(InteractionResponseType.DeferredChannelMessageWithSource, builder) |> Async.AwaitTask
 | 
				
			||||||
            let! playerResult = tryFindPlayer GuildEnvironment.pgDb (ctx.GetDiscordMember().Id)
 | 
					            let! playerResult = tryFindPlayer GuildEnvironment.pgDb (ctx.GetDiscordMember().Id)
 | 
				
			||||||
            match playerResult with
 | 
					            match playerResult with
 | 
				
			||||||
 | 
				
			|||||||
@ -18,15 +18,7 @@ type User = {
 | 
				
			|||||||
let mapBack user : PlayerData =
 | 
					let mapBack user : PlayerData =
 | 
				
			||||||
    { DiscordId = user.DiscordId
 | 
					    { DiscordId = user.DiscordId
 | 
				
			||||||
      Name = user.Name
 | 
					      Name = user.Name
 | 
				
			||||||
      Inventory =
 | 
					      Inventory = user.Inventory |> Array.choose (fun id -> Armory.battleItems |> Array.tryFind (fun i -> i.Id = id))
 | 
				
			||||||
          user.Inventory
 | 
					 | 
				
			||||||
          |> Array.map (fun iId ->
 | 
					 | 
				
			||||||
              Armory.battleItems
 | 
					 | 
				
			||||||
              |> Array.tryFind (fun i -> i.Id = iId)
 | 
					 | 
				
			||||||
              |> function
 | 
					 | 
				
			||||||
                  | Some i -> [| i  |]
 | 
					 | 
				
			||||||
                  | None -> [||])
 | 
					 | 
				
			||||||
          |> Array.concat
 | 
					 | 
				
			||||||
      Events = [||]
 | 
					      Events = [||]
 | 
				
			||||||
      Traits = { PlayerTraits.empty with Strength = user.Strength }
 | 
					      Traits = { PlayerTraits.empty with Strength = user.Strength }
 | 
				
			||||||
//      Achievements =
 | 
					//      Achievements =
 | 
				
			||||||
@ -36,61 +28,56 @@ let mapBack user : PlayerData =
 | 
				
			|||||||
      Bank = user.Bank
 | 
					      Bank = user.Bank
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let tryFindPlayer connStr (id : uint64) =
 | 
					let tryFindPlayer connStr (discordId : uint64) =
 | 
				
			||||||
    async {
 | 
					    async {
 | 
				
			||||||
        let! user =
 | 
					        try
 | 
				
			||||||
            connStr
 | 
					            let! user =
 | 
				
			||||||
            |> Sql.connect
 | 
					                connStr
 | 
				
			||||||
            |> Sql.query "SELECT * FROM users WHERE discord_id = @did"
 | 
					                |> Sql.connect
 | 
				
			||||||
            |> Sql.parameters [ "did", Sql.string (string id) ]
 | 
					                |> Sql.query ("SELECT discord_id, display_name, gbt, strength, inventory " +
 | 
				
			||||||
            |> Sql.executeAsync (fun read ->
 | 
					                              "FROM \"user\" WHERE discord_id = @did")
 | 
				
			||||||
                {
 | 
					                |> Sql.parameters [ "did", Sql.string (string discordId) ]
 | 
				
			||||||
                    DiscordId = read.string "discord_id" |> uint64
 | 
					                |> Sql.executeAsync (fun read ->
 | 
				
			||||||
                    Name = read.string "display_name"
 | 
					                    {
 | 
				
			||||||
                    Bank = read.int "gbt" * 1<GBT>
 | 
					                        DiscordId = read.string "discord_id" |> uint64
 | 
				
			||||||
                    Strength = read.int "strength"
 | 
					                        Name = read.string "display_name"
 | 
				
			||||||
                    Inventory = read.intArray "inventory"
 | 
					                        Bank = read.int "gbt" * 1<GBT>
 | 
				
			||||||
                })
 | 
					                        Strength = read.int "strength"
 | 
				
			||||||
            |> Async.AwaitTask
 | 
					                        Inventory = read.intArray "inventory"
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
 | 
					                |> Async.AwaitTask
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        match List.tryHead user with
 | 
					            match List.tryHead user with
 | 
				
			||||||
        | None -> return None
 | 
					            | None -> return None
 | 
				
			||||||
        | Some u -> return Some (mapBack u)
 | 
					            | Some u -> return Some (mapBack u)
 | 
				
			||||||
 | 
					        with e ->
 | 
				
			||||||
 | 
					            printfn $"{e.Message}"
 | 
				
			||||||
 | 
					            return None
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//let insertNewPlayer (player : PlayerData) =
 | 
					 | 
				
			||||||
//    async {
 | 
					 | 
				
			||||||
//        do! BsonDocument("Player", player.ToBsonDocument()) |> players.InsertOneAsync |> Async.AwaitTask
 | 
					 | 
				
			||||||
//    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let updatePlayer connStr (player : PlayerData) =
 | 
					let updatePlayer connStr (player : PlayerData) =
 | 
				
			||||||
    connStr
 | 
					    connStr
 | 
				
			||||||
    |> Sql.connect
 | 
					    |> Sql.connect
 | 
				
			||||||
    |> Sql.query ("UPDATE users " +
 | 
					    |> Sql.query
 | 
				
			||||||
                 "SET bank = @bank, strength = @str, inventory = @inv " +
 | 
					        ("UPDATE \"user\" SET gbt = @gbt, strength = @str, inventory = @inv " +
 | 
				
			||||||
                 "WHERE discordId = @did")
 | 
					        " WHERE discord_id = @did")
 | 
				
			||||||
    |> Sql.parameters [
 | 
					    |> Sql.parameters [
 | 
				
			||||||
        "did", Sql.string (string player.DiscordId)
 | 
					        "did", Sql.string (string player.DiscordId)
 | 
				
			||||||
        "bank", 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.executeNonQueryAsync
 | 
					    |> Sql.executeNonQueryAsync
 | 
				
			||||||
    |> Async.AwaitTask
 | 
					    |> Async.AwaitTask
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//let addAchievement (id : uint64) (achievement : string) =
 | 
					 | 
				
			||||||
//    async {
 | 
					 | 
				
			||||||
//        let filter = Builders<BsonDocument>.Filter.Eq("Player.DiscordId", id)
 | 
					 | 
				
			||||||
//        let update = Builders<BsonDocument>.Update.Push("Player.Achievements", achievement)
 | 
					 | 
				
			||||||
//        return! players.UpdateOneAsync(filter, update) |> Async.AwaitTask |> Async.Ignore
 | 
					 | 
				
			||||||
//    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let addAchievement connStr (did : uint64) (achievement : string) =
 | 
					let addAchievement connStr (did : uint64) (achievement : string) =
 | 
				
			||||||
    connStr
 | 
					    connStr
 | 
				
			||||||
    |> Sql.connect
 | 
					    |> Sql.connect
 | 
				
			||||||
    |> Sql.query ("WITH ach_id AS (INSERT INTO achievement (symbol) VALUES (@symbol)), " +
 | 
					    |> Sql.query (
 | 
				
			||||||
                  "     usr_id AS (SELECT id FROM user WHERE discord_id = @did" +
 | 
					        "WITH ach AS (INSERT INTO achievement (symbol) VALUES (@symbol) RETURNING id),
 | 
				
			||||||
                  "INSERT INTO user_achievements_achievement (user_id, achievement_id) VALUES (usr_id, ach_id) ")
 | 
					             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")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    |> 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
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user