Move some of the DB stuff

This commit is contained in:
Joseph Ferano 2022-04-26 11:07:47 +07:00
parent f044963470
commit 7661c1944a
4 changed files with 45 additions and 44 deletions

View File

@ -143,7 +143,7 @@ type AdminBot() =
[<SlashCommand("admin-whitelist-stock", "Set whitelist stock", false)>] [<SlashCommand("admin-whitelist-stock", "Set whitelist stock", false)>]
member this.SetStock (ctx : InteractionContext, [<Option("amount", "Set the amount of WL available for purchase")>] amount : int64) = member this.SetStock (ctx : InteractionContext, [<Option("amount", "Set the amount of WL available for purchase")>] amount : int64) =
enforceAdmin (DiscordInteractionContext ctx) (InviteTracker.setWhitelistStock (int amount)) enforceAdmin (DiscordInteractionContext ctx) (InviteTracker.setCurrentWhitelistStock (int amount))
[<SlashCommand("admin-send-embed", "Set whitelist stock", false)>] [<SlashCommand("admin-send-embed", "Set whitelist stock", false)>]
member this.SendEmbedToChannel (ctx : InteractionContext, [<Option("embed", "Which embed to send")>] embed : InitEmbeds) = member this.SendEmbedToChannel (ctx : InteractionContext, [<Option("embed", "Which embed to send")>] embed : InitEmbeds) =

View File

@ -253,40 +253,3 @@ let getRandomHackablePlayers (did : uint64) =
|> Sql.executeAsync (fun read -> {| Id = read.string "discord_id" |> uint64 ; Name = read.string "display_name" |}) |> Sql.executeAsync (fun read -> {| Id = read.string "discord_id" |> uint64 ; Name = read.string "display_name" |})
|> Async.AwaitTask |> Async.AwaitTask
let getWhitelistItem () =
connStr
|> Sql.connect
|> Sql.query """
SELECT stock, price FROM item WHERE symbol = 'WHITELIST'
"""
|> Sql.executeRowAsync (fun read -> {| Stock = read.int "stock" ; Price = (read.int "price") * 1<GBT> |})
|> Async.AwaitTask
let updateWhitelistStock () = async {
try
do! connStr
|> Sql.connect
|> Sql.query """
UPDATE item SET stock = stock - 1 WHERE symbol = 'WHITELIST'
"""
|> Sql.executeNonQueryAsync
|> Async.AwaitTask
|> Async.Ignore
return true
with _ -> return false
}
let setWhitelistStock amount = async {
try
do! connStr
|> Sql.connect
|> Sql.parameters [ ( "amount" , Sql.int amount ) ]
|> Sql.query """
UPDATE item SET stock = @amount WHERE symbol = 'WHITELIST'
"""
|> Sql.executeNonQueryAsync
|> Async.AwaitTask
|> Async.Ignore
return true
with _ -> return false
}

View File

@ -299,7 +299,7 @@ type Store() =
[<SlashCommand("consume", "Consume a food item")>] [<SlashCommand("consume", "Consume a food item")>]
member this.Consume (ctx : InteractionContext) = member this.Consume (ctx : InteractionContext) =
enforceChannel (DiscordInteractionContext ctx) (sell "Shields" (Inventory.getItemsByType ItemType.Food)) enforceChannel (DiscordInteractionContext ctx) (sell "Food" (Inventory.getItemsByType ItemType.Food))
[<SlashCommand("inventory", "Check your inventory")>] [<SlashCommand("inventory", "Check your inventory")>]
member this.Inventory (ctx : InteractionContext) = member this.Inventory (ctx : InteractionContext) =

View File

@ -178,6 +178,44 @@ let getInvitedUserCount userId =
|> Sql.executeRowAsync (fun read -> read.int "count") |> Sql.executeRowAsync (fun read -> read.int "count")
|> Async.AwaitTask |> Async.AwaitTask
let getWhitelistItem () =
connStr
|> Sql.connect
|> Sql.query """
SELECT stock, price FROM item WHERE symbol = 'WHITELIST'
"""
|> Sql.executeRowAsync (fun read -> {| Stock = read.int "stock" ; Price = (read.int "price") * 1<GBT> |})
|> Async.AwaitTask
let updateWhitelistStock () = async {
try
do! connStr
|> Sql.connect
|> Sql.query """
UPDATE item SET stock = stock - 1 WHERE symbol = 'WHITELIST'
"""
|> Sql.executeNonQueryAsync
|> Async.AwaitTask
|> Async.Ignore
return true
with _ -> return false
}
let setWhitelistStock amount = async {
try
do! connStr
|> Sql.connect
|> Sql.parameters [ ( "amount" , Sql.int amount ) ]
|> Sql.query """
UPDATE item SET stock = @amount WHERE symbol = 'WHITELIST'
"""
|> Sql.executeNonQueryAsync
|> Async.AwaitTask
|> Async.Ignore
return true
with _ -> return false
}
let guildInviteEmbed = let guildInviteEmbed =
let rewardMsg = let rewardMsg =
$"**Your Mission:**\nCLICK THE BUTTON below, then share your **UNIQUE LINK** with any Degenz you want to invite into the Server.\n\n" + $"**Your Mission:**\nCLICK THE BUTTON below, then share your **UNIQUE LINK** with any Degenz you want to invite into the Server.\n\n" +
@ -431,7 +469,7 @@ let handleGimmeWhitelist (ctx : IDiscordContext) =
let builder = DiscordFollowupMessageBuilder().AsEphemeral(true) let builder = DiscordFollowupMessageBuilder().AsEphemeral(true)
let! wlItem = DbService.getWhitelistItem () let! wlItem = getWhitelistItem ()
let! availability = tryGrantWhitelist ctx wlItem.Stock wlItem.Price let! availability = tryGrantWhitelist ctx wlItem.Stock wlItem.Price
match availability with match availability with
| NotAHacker -> whitelistEmbed.Description <- notAHackerMsg | NotAHacker -> whitelistEmbed.Description <- notAHackerMsg
@ -480,7 +518,7 @@ let handleBuyWhitelist (ctx : IDiscordContext) =
let builder = DiscordInteractionResponseBuilder().AsEphemeral(true) let builder = DiscordInteractionResponseBuilder().AsEphemeral(true)
do! ctx.Respond(InteractionResponseType.DeferredChannelMessageWithSource, builder) do! ctx.Respond(InteractionResponseType.DeferredChannelMessageWithSource, builder)
let! wlItem = DbService.getWhitelistItem () let! wlItem = getWhitelistItem ()
let builder = DiscordFollowupMessageBuilder().AsEphemeral(true) let builder = DiscordFollowupMessageBuilder().AsEphemeral(true)
match! tryGrantWhitelist ctx wlItem.Stock wlItem.Price with match! tryGrantWhitelist ctx wlItem.Stock wlItem.Price with
| NotAHacker -> | NotAHacker ->
@ -499,7 +537,7 @@ let handleBuyWhitelist (ctx : IDiscordContext) =
builder.Content <- $"We just ran out of stock, tough shit" builder.Content <- $"We just ran out of stock, tough shit"
do! ctx.FollowUp(builder) do! ctx.FollowUp(builder)
| Granted player -> | Granted player ->
match! DbService.updateWhitelistStock () with match! updateWhitelistStock () with
| true -> | true ->
let embed = DiscordEmbedBuilder() let embed = DiscordEmbedBuilder()
embed.Description <- buyWhitelistMsg embed.Description <- buyWhitelistMsg
@ -588,10 +626,10 @@ let handleGuildMemberAdded _ (eventArgs : GuildMemberAddEventArgs) =
do! processNewUser eventArgs do! processNewUser eventArgs
} :> Task } :> Task
let rec setWhitelistStock amount (ctx : IDiscordContext) = let setCurrentWhitelistStock amount (ctx : IDiscordContext) =
task { task {
do! Messaging.defer ctx do! Messaging.defer ctx
let! result = DbService.setWhitelistStock amount let! result = setWhitelistStock amount
if result then if result then
do! Messaging.sendFollowUpMessage ctx $"Set Whitelist stock to {amount}" do! Messaging.sendFollowUpMessage ctx $"Set Whitelist stock to {amount}"
else else