81 lines
3.3 KiB
Forth
81 lines
3.3 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 }
|
|
else
|
|
do! DbService.updatePlayer { player with Bank = Math.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
|
|
|
|
| None -> do! notYetAHackerMsg ctx
|
|
|
|
} |> Async.StartAsTask
|
|
:> Task
|