Whitelist stock and price from DB
This commit is contained in:
parent
1f98d05d3e
commit
6fe647f9f1
@ -6,18 +6,6 @@ open Degenz
|
|||||||
|
|
||||||
let connStr = GuildEnvironment.connectionString
|
let connStr = GuildEnvironment.connectionString
|
||||||
|
|
||||||
type User = {
|
|
||||||
Name : string
|
|
||||||
DiscordId : uint64
|
|
||||||
Bank : int<GBT>
|
|
||||||
Inventory : int list
|
|
||||||
Strength : int
|
|
||||||
Focus : int
|
|
||||||
Charisma : int
|
|
||||||
Luck : int
|
|
||||||
Active : bool
|
|
||||||
}
|
|
||||||
|
|
||||||
let getPlayerEvents (did : uint64) =
|
let getPlayerEvents (did : uint64) =
|
||||||
connStr
|
connStr
|
||||||
|> Sql.connect
|
|> Sql.connect
|
||||||
@ -81,7 +69,7 @@ let tryFindPlayer (discordId : uint64) = async {
|
|||||||
"""
|
"""
|
||||||
|> Sql.executeAsync (fun read ->
|
|> Sql.executeAsync (fun read ->
|
||||||
let inv = read.intArray "inventory"
|
let inv = read.intArray "inventory"
|
||||||
{
|
{|
|
||||||
DiscordId = read.string "discord_id" |> uint64
|
DiscordId = read.string "discord_id" |> uint64
|
||||||
Name = read.string "display_name"
|
Name = read.string "display_name"
|
||||||
Bank = read.intOrNone "gbt" |> Option.map ((*) 1<GBT>) |> Option.defaultValue 0<GBT>
|
Bank = read.intOrNone "gbt" |> Option.map ((*) 1<GBT>) |> Option.defaultValue 0<GBT>
|
||||||
@ -91,7 +79,7 @@ let tryFindPlayer (discordId : uint64) = async {
|
|||||||
Charisma = read.intOrNone "charisma" |> Option.defaultValue 0
|
Charisma = read.intOrNone "charisma" |> Option.defaultValue 0
|
||||||
Luck = read.intOrNone "luck" |> Option.defaultValue 0
|
Luck = read.intOrNone "luck" |> Option.defaultValue 0
|
||||||
Active = read.bool "in_game"
|
Active = read.bool "in_game"
|
||||||
})
|
|})
|
||||||
|> Async.AwaitTask
|
|> Async.AwaitTask
|
||||||
match List.tryHead user with
|
match List.tryHead user with
|
||||||
| None -> return None
|
| None -> return None
|
||||||
@ -248,3 +236,21 @@ let addPlayerEvent (did : uint64) (playerEvent : PlayerEvent) =
|
|||||||
|> Sql.query query
|
|> Sql.query query
|
||||||
|> Sql.executeNonQueryAsync
|
|> Sql.executeNonQueryAsync
|
||||||
|> 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" |})
|
||||||
|
|> Async.AwaitTask
|
||||||
|
|
||||||
|
let updateWhitelistStock () =
|
||||||
|
connStr
|
||||||
|
|> Sql.connect
|
||||||
|
|> Sql.query """
|
||||||
|
UPDATE item SET stock = stock - 1 WHERE symbol = 'WHITELIST'
|
||||||
|
"""
|
||||||
|
|> Sql.executeNonQueryAsync
|
||||||
|
|> Async.AwaitTask
|
||||||
|
@ -347,10 +347,11 @@ type WhitelistResult =
|
|||||||
| NotInGame
|
| NotInGame
|
||||||
| NotAHacker
|
| NotAHacker
|
||||||
| NotEnoughGBT of currentAmount : int
|
| NotEnoughGBT of currentAmount : int
|
||||||
|
| NotEnoughStock
|
||||||
| Granted of PlayerData
|
| Granted of PlayerData
|
||||||
| AlreadyWhitelisted
|
| AlreadyWhitelisted
|
||||||
|
|
||||||
let tryGrantWhitelist (ctx : IDiscordContext) =
|
let tryGrantWhitelist (ctx : IDiscordContext) stock price =
|
||||||
task {
|
task {
|
||||||
let user = ctx.GetDiscordMember()
|
let user = ctx.GetDiscordMember()
|
||||||
match! DbService.tryFindPlayer user.Id with
|
match! DbService.tryFindPlayer user.Id with
|
||||||
@ -361,10 +362,12 @@ let tryGrantWhitelist (ctx : IDiscordContext) =
|
|||||||
elif player.Active then
|
elif player.Active then
|
||||||
let hackerRole = ctx.GetGuild().GetRole(GuildEnvironment.roleHacker)
|
let hackerRole = ctx.GetGuild().GetRole(GuildEnvironment.roleHacker)
|
||||||
if Seq.contains hackerRole user.Roles then
|
if Seq.contains hackerRole user.Roles then
|
||||||
if int player.Bank >= WhitelistPrice then
|
if int player.Bank >= price then
|
||||||
return Granted player
|
return Granted player
|
||||||
else
|
elif stock > 0 then
|
||||||
return NotEnoughGBT (int player.Bank)
|
return NotEnoughGBT (int player.Bank)
|
||||||
|
else
|
||||||
|
return NotEnoughStock
|
||||||
else
|
else
|
||||||
return NotAHacker
|
return NotAHacker
|
||||||
else
|
else
|
||||||
@ -420,18 +423,20 @@ let handleGimmeWhitelist (ctx : IDiscordContext) =
|
|||||||
|
|
||||||
let whitelistEmbed = DiscordEmbedBuilder()
|
let whitelistEmbed = DiscordEmbedBuilder()
|
||||||
whitelistEmbed.Title <- "1x Degenz Game Whitelist "
|
whitelistEmbed.Title <- "1x Degenz Game Whitelist "
|
||||||
let includeInfo () =
|
let includeInfo stock price =
|
||||||
whitelistEmbed.ImageUrl <- "https://s7.gifyu.com/images/whitelist-item-mock-banner18.png"
|
whitelistEmbed.ImageUrl <- "https://s7.gifyu.com/images/whitelist-item-mock-banner18.png"
|
||||||
whitelistEmbed.AddField("Item", "`1x Whitelist`", true) |> ignore
|
whitelistEmbed.AddField("Item", "`1x Whitelist`", true) |> ignore
|
||||||
whitelistEmbed.AddField("Available", "`750`", true) |> ignore
|
whitelistEmbed.AddField("Available", $"`{stock}`", true) |> ignore
|
||||||
whitelistEmbed.AddField("Price 💰", $"`{WhitelistPrice} $GBT`", true) |> ignore
|
whitelistEmbed.AddField("Price 💰", $"`{price} $GBT`", true) |> ignore
|
||||||
whitelistEmbed.Color <- DiscordColor.Red
|
whitelistEmbed.Color <- DiscordColor.Red
|
||||||
let buyBtn = DiscordButtonComponent(ButtonStyle.Success, $"BuyWhitelist", $"Buy Now", true) :> DiscordComponent
|
let buyBtn = DiscordButtonComponent(ButtonStyle.Success, $"BuyWhitelist", $"Buy Now", true) :> DiscordComponent
|
||||||
let buyActiveBtn = DiscordButtonComponent(ButtonStyle.Success, $"BuyWhitelist", $"Buy Now") :> DiscordComponent
|
let buyActiveBtn = DiscordButtonComponent(ButtonStyle.Success, $"BuyWhitelist", $"Buy Now") :> DiscordComponent
|
||||||
let recruitBtn = DiscordButtonComponent(ButtonStyle.Danger, $"ShowRecruitmentEmbed", $"Recruit Now") :> DiscordComponent
|
let recruitBtn = DiscordButtonComponent(ButtonStyle.Danger, $"ShowRecruitmentEmbed", $"Recruit Now") :> DiscordComponent
|
||||||
|
|
||||||
let builder = DiscordFollowupMessageBuilder().AsEphemeral(true)
|
let builder = DiscordFollowupMessageBuilder().AsEphemeral(true)
|
||||||
let! availability = tryGrantWhitelist ctx
|
|
||||||
|
let! wlItem = DbService.getWhitelistItem ()
|
||||||
|
let! availability = tryGrantWhitelist ctx wlItem.Stock wlItem.Price
|
||||||
match availability with
|
match availability with
|
||||||
| NotAHacker -> whitelistEmbed.Description <- notAHackerMsg
|
| NotAHacker -> whitelistEmbed.Description <- notAHackerMsg
|
||||||
| NotInGame -> whitelistEmbed.Description <- notInGameMsg
|
| NotInGame -> whitelistEmbed.Description <- notInGameMsg
|
||||||
@ -440,12 +445,13 @@ let handleGimmeWhitelist (ctx : IDiscordContext) =
|
|||||||
whitelistEmbed.Color <- DiscordColor.Green
|
whitelistEmbed.Color <- DiscordColor.Green
|
||||||
whitelistEmbed.Color <- DiscordColor.Green
|
whitelistEmbed.Color <- DiscordColor.Green
|
||||||
whitelistEmbed.Description <- alreadyWhitelistedMsg
|
whitelistEmbed.Description <- alreadyWhitelistedMsg
|
||||||
|
| NotEnoughStock -> whitelistEmbed.Description <- "Oh no! We do not have any whitelist spots available for now. Check back later or go bother Kitty and ask him why the fuck you can't whitelist"
|
||||||
| NotEnoughGBT total ->
|
| NotEnoughGBT total ->
|
||||||
includeInfo()
|
includeInfo wlItem.Stock wlItem.Price
|
||||||
builder.AddComponents([ buyBtn ; recruitBtn ]) |> ignore
|
builder.AddComponents([ buyBtn ; recruitBtn ]) |> ignore
|
||||||
whitelistEmbed.Description <- notEnoughMoneyMsg total
|
whitelistEmbed.Description <- notEnoughMoneyMsg total
|
||||||
| Granted _ ->
|
| Granted _ ->
|
||||||
includeInfo()
|
includeInfo wlItem.Stock wlItem.Price
|
||||||
whitelistEmbed.Color <- DiscordColor.Green
|
whitelistEmbed.Color <- DiscordColor.Green
|
||||||
whitelistEmbed.Color <- DiscordColor.Green
|
whitelistEmbed.Color <- DiscordColor.Green
|
||||||
builder.AddComponents([ buyActiveBtn ]) |> ignore
|
builder.AddComponents([ buyActiveBtn ]) |> ignore
|
||||||
@ -478,8 +484,9 @@ 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 builder = DiscordFollowupMessageBuilder().AsEphemeral(true)
|
let builder = DiscordFollowupMessageBuilder().AsEphemeral(true)
|
||||||
match! tryGrantWhitelist ctx with
|
match! tryGrantWhitelist ctx wlItem.Stock wlItem.Price with
|
||||||
| NotAHacker ->
|
| NotAHacker ->
|
||||||
builder.Content <- $"You are somehow not a hacker anymore, what exactly are you doing?"
|
builder.Content <- $"You are somehow not a hacker anymore, what exactly are you doing?"
|
||||||
do! ctx.FollowUp(builder)
|
do! ctx.FollowUp(builder)
|
||||||
@ -492,6 +499,9 @@ let handleBuyWhitelist (ctx : IDiscordContext) =
|
|||||||
| NotEnoughGBT _ ->
|
| NotEnoughGBT _ ->
|
||||||
builder.Content <- $"You somehow do not have enough $GBT, what exactly are you doing?"
|
builder.Content <- $"You somehow do not have enough $GBT, what exactly are you doing?"
|
||||||
do! ctx.FollowUp(builder)
|
do! ctx.FollowUp(builder)
|
||||||
|
| NotEnoughStock ->
|
||||||
|
builder.Content <- $"We just ran out of stock, tough shit"
|
||||||
|
do! ctx.FollowUp(builder)
|
||||||
| Granted player ->
|
| Granted player ->
|
||||||
let embed = DiscordEmbedBuilder()
|
let embed = DiscordEmbedBuilder()
|
||||||
embed.Description <- buyWhitelistMsg
|
embed.Description <- buyWhitelistMsg
|
||||||
|
Loading…
x
Reference in New Issue
Block a user