Analytics, several fixes

This commit is contained in:
Joseph Ferano 2022-04-20 12:58:34 +07:00
parent 937eeb4cc2
commit 310699ea50
2 changed files with 70 additions and 49 deletions

View File

@ -150,3 +150,18 @@ let shieldActivated (discordMember : DiscordMember) shieldName =
"shield_name" , shieldName "shield_name" , shieldName
] ]
track "Shield Button Clicked" discordMember.Id data track "Shield Button Clicked" discordMember.Id data
let prizeTableViewed (discordMember : DiscordMember) =
let data = [
"user_display_name" , discordMember.Username
]
track "Shield Button Clicked" discordMember.Id data
let slotPlayed (discordMember : DiscordMember) amount result prize =
let data = [
"user_display_name" , discordMember.Username
"play_amount" , string amount
"result" , string result
"prize" , string result
]
track "Shield Button Clicked" discordMember.Id data

View File

@ -136,12 +136,14 @@ let sleepTime = 1500
let mutable guildEmojis : Map<string, DiscordEmoji> option = None let mutable guildEmojis : Map<string, DiscordEmoji> option = None
let mutable anyEmoji : DiscordEmoji option = None let mutable anyEmoji : DiscordEmoji option = None
let embedButtons = let embedButtons includePrizeTable =
let button1 = DiscordButtonComponent(ButtonStyle.Success, $"spin-1x", $"Spin 1x - {PlayPricex1} $GBT") :> DiscordComponent let button1 = DiscordButtonComponent(ButtonStyle.Success, $"spin-1x", $"Bet 1x - {PlayPricex1} $GBT") :> DiscordComponent
let button2 = DiscordButtonComponent(ButtonStyle.Success, $"spin-2x", $"Spin 2x - {PlayPricex2} $GBT") :> DiscordComponent let button2 = DiscordButtonComponent(ButtonStyle.Success, $"spin-2x", $"Bet 2x - {PlayPricex2} $GBT") :> DiscordComponent
let button3 = DiscordButtonComponent(ButtonStyle.Success, $"spin-3x", $"Spin 3x - {PlayPricex3} $GBT") :> DiscordComponent let button3 = DiscordButtonComponent(ButtonStyle.Success, $"spin-3x", $"Bet 3x - {PlayPricex3} $GBT") :> DiscordComponent
let button4 = DiscordButtonComponent(ButtonStyle.Primary, $"prizes", $"Show Prizes") :> DiscordComponent let button4 = DiscordButtonComponent(ButtonStyle.Primary, $"prizes", $"Show Prizes") :> DiscordComponent
[| button1 ; button2 ; button3 ; button4 |] if includePrizeTable
then [| button1 ; button2 ; button3 ; button4 |]
else [| button1 ; button2 ; button3 |]
let getJackpotAmount () = let getJackpotAmount () =
GuildEnvironment.connectionString GuildEnvironment.connectionString
@ -177,7 +179,7 @@ let handlePrizeTable (ctx : IDiscordContext) =
let prizeTxt = let prizeTxt =
match prize with match prize with
| Money m -> $"**{m}** $GBT" | Money m -> $"**{m}** $GBT"
| Jackpot -> $"**🎉JACKPOT🎉**" | Jackpot -> $"**JACKPOT**"
let line = let line =
match s1 , s2 , s3 with match s1 , s2 , s3 with
| Symbol s1' , Symbol s2' , Symbol s3' -> | Symbol s1' , Symbol s2' , Symbol s3' ->
@ -193,9 +195,8 @@ let handlePrizeTable (ctx : IDiscordContext) =
embed.Color <- DiscordColor.Green embed.Color <- DiscordColor.Green
embed.Title <- "Degenz Slots Prize Table" embed.Title <- "Degenz Slots Prize Table"
embed.Description <- $"Current Jackpot At: **{jackpot}** $GBT\n\n**Combo** **Prize**\n{rows}" embed.Description <- $"Current Jackpot At: **{jackpot}** $GBT\n\n**Combo** **Prize**\n{rows}"
let builder = DiscordFollowupMessageBuilder() do! ctx.FollowUp(DiscordFollowupMessageBuilder().AsEphemeral().AddEmbed(embed))
builder.IsEphemeral <- true do! Analytics.prizeTableViewed (ctx.GetDiscordMember())
do! ctx.FollowUp(builder.AddEmbed(embed))
| _ , _ -> return () | _ , _ -> return ()
} :> Task } :> Task
@ -225,7 +226,12 @@ let spinEmojis (builder : DiscordFollowupMessageBuilder) (results : SlotSymbol a
} }
let spin multiplier (ctx : IDiscordContext) = let spin multiplier (ctx : IDiscordContext) =
PlayerInteractions.executePlayerAction ctx (fun player -> async { let playAmount =
match multiplier with
| 1 -> PlayPricex1
| 2 -> PlayPricex2
| _ -> PlayPricex3
let execute player = async {
let random = Random(Guid.NewGuid().GetHashCode()) let random = Random(Guid.NewGuid().GetHashCode())
let symbols = [| reel1.[random.Next(0, reel1.Length)] ; reel2.[random.Next(0, reel2.Length)] ; reel3.[random.Next(0, reel3.Length)] |] let symbols = [| reel1.[random.Next(0, reel1.Length)] ; reel2.[random.Next(0, reel2.Length)] ; reel3.[random.Next(0, reel3.Length)] |]
@ -253,49 +259,49 @@ let spin multiplier (ctx : IDiscordContext) =
let addGBTField (embed : DiscordEmbedBuilder) prize = let addGBTField (embed : DiscordEmbedBuilder) prize =
let sym = if prize > 0<GBT> then "+" else "-" let sym = if prize > 0<GBT> then "+" else "-"
embed.AddField("New 💰$GBT Balance", $"`💰` {player.Bank} `💰` {player.Bank + prize} `({sym}{abs prize} $GBT)`") |> ignore embed.AddField("New 💰$GBT Balance", $"`💰` {player.Bank} `💰` {player.Bank + prize} `({sym}{abs prize} $GBT)`") |> ignore
let! result , prizeAmount = async {
match prize with match prize with
| Some (Money amount) -> | Some (Money amount) ->
let prizeWithMultiplier = amount * multiplier let prizeWithMultiplier = amount * multiplier
do! DbService.updatePlayerCurrency prizeWithMultiplier player |> Async.Ignore do! DbService.updatePlayerCurrency prizeWithMultiplier player |> Async.Ignore
embed.ImageUrl <- "https://s7.gifyu.com/images/youwin.png"
embed.Color <- DiscordColor.Green embed.Color <- DiscordColor.Green
embed.Color <- DiscordColor.Purple
embed.Description <- $"You win **{prizeWithMultiplier}** GBT!" embed.Description <- $"You win **{prizeWithMultiplier}** GBT!"
embed.AddField("Result", $"{slotsContent}", true) |> ignore embed.AddField("Result", $"{slotsContent}", true) |> ignore
addGBTField embed prizeWithMultiplier addGBTField embed prizeWithMultiplier
return "WON" , prizeWithMultiplier
| Some (Jackpot) -> | Some (Jackpot) ->
let! jackpot = getJackpotAmount () let! jackpot = getJackpotAmount ()
embed.ImageUrl <- "https://s7.gifyu.com/images/jackpot2ac30c9823f6a91c.png"
embed.Color <- DiscordColor.Purple embed.Color <- DiscordColor.Purple
embed.Description <- $"YOU HIT THE JACKPOT!!!" embed.Description <- $"YOU HIT THE JACKPOT!!!"
embed.AddField("Result", $"{slotsContent}", true) |> ignore embed.AddField("Result", $"{slotsContent}", true) |> ignore
addGBTField embed jackpot addGBTField embed jackpot
do! DbService.updatePlayerCurrency jackpot player |> Async.Ignore
do! resetJackpot BaseJackpotAmount |> Async.Ignore do! resetJackpot BaseJackpotAmount |> Async.Ignore
return "JACKPOT" , jackpot
| None -> | None ->
let playAmount =
match multiplier with
| 1 -> PlayPricex1
| 2 -> PlayPricex2
| _ -> PlayPricex3
// TODO: We have to make sure we don't go below zero
do! DbService.updatePlayerCurrency -playAmount player |> Async.Ignore do! DbService.updatePlayerCurrency -playAmount player |> Async.Ignore
do! incrementJackpot playAmount |> Async.Ignore do! incrementJackpot playAmount |> Async.Ignore
let! jackpot = getJackpotAmount () let! jackpot = getJackpotAmount ()
embed.Description <- $"Better luck next time! You paid {playAmount} $GBT" embed.Description <- $"Better luck next time! You paid {playAmount} $GBT"
embed.Color <- DiscordColor.Red embed.Color <- DiscordColor.Red
embed.AddField("New 🎉JACKPOT🎉", $"`💰` {jackpot} `$GBT`", true) |> ignore embed.AddField("New JACKPOT", $"`💰` {jackpot} `$GBT`", true) |> ignore
embed.AddField("Result", $"{slotsContent}", true) |> ignore embed.AddField("Result", $"{slotsContent}", true) |> ignore
addGBTField embed -playAmount addGBTField embed -playAmount
return "LOST" , 0<GBT>
}
let dwb = DiscordWebhookBuilder() let dwb = DiscordWebhookBuilder()
dwb.AddComponents(embedButtons).AddEmbed(embed).WithContent(slotsContent) |> ignore dwb.AddComponents(embedButtons false).AddEmbed(embed).WithContent(slotsContent) |> ignore
do! itx.EditFollowupMessageAsync(followUpMessage.Id, dwb) |> Async.AwaitTask |> Async.Ignore do! itx.EditFollowupMessageAsync(followUpMessage.Id, dwb) |> Async.AwaitTask |> Async.Ignore
do! Analytics.slotPlayed (ctx.GetDiscordMember()) playAmount result prizeAmount
return () }
}) PlayerInteractions.executePlayerAction ctx (fun player ->
if player.Bank > playAmount then
execute player
else
Messaging.sendFollowUpMessage ctx "You do not have sufficient funds to play")
let handleButton (_ : DiscordClient) (event : ComponentInteractionCreateEventArgs) = let handleButton (_ : DiscordClient) (event : ComponentInteractionCreateEventArgs) =
let ctx = DiscordEventContext event let ctx = DiscordEventContext event
// TODO: We have to make sure the player has enough money
match event.Id with match event.Id with
| "spin-1x" -> spin 1 ctx | "spin-1x" -> spin 1 ctx
| "spin-2x" -> spin 2 ctx | "spin-2x" -> spin 2 ctx
@ -335,7 +341,7 @@ let sendInitialEmbed (ctx : IDiscordContext) =
builder.AddEmbed(embed) |> ignore builder.AddEmbed(embed) |> ignore
builder.AddComponents embedButtons |> ignore builder.AddComponents(embedButtons true) |> ignore
do! GuildEnvironment.botClientSlots.Value.SendMessageAsync(channel, builder) do! GuildEnvironment.botClientSlots.Value.SendMessageAsync(channel, builder)
|> Async.AwaitTask |> Async.AwaitTask
|> Async.Ignore |> Async.Ignore