Got SQL queries working

This commit is contained in:
Joseph Ferano 2022-02-22 21:11:03 +07:00
parent fc56b4a64b
commit 014862d642
2 changed files with 34 additions and 51 deletions

View File

@ -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

View File

@ -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,13 +28,15 @@ let mapBack user : PlayerData =
Bank = user.Bank Bank = user.Bank
} }
let tryFindPlayer connStr (id : uint64) = let tryFindPlayer connStr (discordId : uint64) =
async { async {
try
let! user = let! user =
connStr connStr
|> Sql.connect |> Sql.connect
|> Sql.query "SELECT * FROM users WHERE discord_id = @did" |> Sql.query ("SELECT discord_id, display_name, gbt, strength, inventory " +
|> Sql.parameters [ "did", Sql.string (string id) ] "FROM \"user\" WHERE discord_id = @did")
|> Sql.parameters [ "did", Sql.string (string discordId) ]
|> Sql.executeAsync (fun read -> |> Sql.executeAsync (fun read ->
{ {
DiscordId = read.string "discord_id" |> uint64 DiscordId = read.string "discord_id" |> uint64
@ -56,41 +50,34 @@ let tryFindPlayer connStr (id : uint64) =
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