module Degenz.SlotMachine open System open System.Threading.Tasks open DSharpPlus open DSharpPlus.Entities open DSharpPlus.SlashCommands open Degenz.Messaging open Degenz.Types 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 () [] member this.Spin (ctx : InteractionContext) = Game.executePlayerAction (DiscordInteractionContext ctx) (fun player -> async { 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 } else do! DbService.updatePlayer { player with Bank = max (player.Bank - 1) 0 } 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 })