81 lines
3.4 KiB
Forth

module Degenz.SlotMachine
open System
open System.Threading.Tasks
open DSharpPlus
open DSharpPlus.Entities
open DSharpPlus.SlashCommands
open Degenz.Shared
let slots = [| "https://i.ibb.co/pKqZdr7/cherry.png" ; "https://i.ibb.co/JnghQsL/lemon.jpg" ; "https://i.ibb.co/1JTFPSs/seven.png" |]
type SlotMachine() =
inherit ApplicationCommandModule ()
[<SlashCommand("spin", "Want to try your luck?")>]
member this.AttackCommand (ctx : InteractionContext) =
async {
let! playerResult = DbService.tryFindPlayer ctx.Member.Id
match playerResult with
| Some player ->
let sleepTime = 1000
let random = Random(System.Guid.NewGuid().GetHashCode())
let results = [ random.Next(0, 3) ; random.Next(0, 3) ; random.Next(0, 3)]
let winConditions = (results.[0] = results.[1] && results.[0] = results.[2])
|| (results.[0] <> results.[1] && results.[1] <> results.[2] && results.[0] <> results.[2])
if winConditions then
do! DbService.updatePlayer { player with Bank = player.Bank + 10.0f }
else
do! DbService.updatePlayer { player with Bank = MathF.Max(player.Bank - 0.5f, 0.0f) }
do! ctx.Interaction.CreateResponseAsync(InteractionResponseType.DeferredChannelMessageWithSource)
|> Async.AwaitTask
do! Async.Sleep sleepTime
let builder = DiscordFollowupMessageBuilder()
let embed = DiscordEmbedBuilder()
embed.ImageUrl <- slots.[results.[0]]
builder.AddEmbed(embed.Build()) |> ignore
do! ctx.Interaction.CreateFollowupMessageAsync(builder)
|> Async.AwaitTask
|> Async.Ignore
do! Async.Sleep sleepTime
let builder = DiscordFollowupMessageBuilder()
embed.ImageUrl <- slots.[results.[1]]
builder.AddEmbed(embed.Build()) |> ignore
do! ctx.Interaction.CreateFollowupMessageAsync(builder)
|> Async.AwaitTask
|> Async.Ignore
do! Async.Sleep sleepTime
let builder = DiscordFollowupMessageBuilder()
embed.ImageUrl <- slots.[results.[2]]
builder.AddEmbed(embed.Build()) |> ignore
do! ctx.Interaction.CreateFollowupMessageAsync(builder)
|> Async.AwaitTask
|> Async.Ignore
if winConditions then
do! Async.Sleep sleepTime
let builder = DiscordFollowupMessageBuilder()
builder.Content <- "You win 10 GBT!"
do! ctx.Interaction.CreateFollowupMessageAsync(builder)
|> Async.AwaitTask
|> Async.Ignore
else
do! Async.Sleep sleepTime
let builder = DiscordFollowupMessageBuilder()
builder.Content <- "You lose 0.5 GBT! Try your luck again!"
do! ctx.Interaction.CreateFollowupMessageAsync(builder)
|> Async.AwaitTask
|> Async.Ignore
| None -> do! notYetAHackerMsg ctx
} |> Async.StartAsTask
:> Task