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,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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user