From 303b32e341db4958e6d915b11516472730d46619 Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Wed, 20 Apr 2022 17:02:21 +0700 Subject: [PATCH] Maybe final form of embeds, add embed refresh with current jackpot --- Bot/Games/SlotMachine.fs | 103 +++++++++++++++++---------------------- 1 file changed, 44 insertions(+), 59 deletions(-) diff --git a/Bot/Games/SlotMachine.fs b/Bot/Games/SlotMachine.fs index 59627c6..7a1aed5 100644 --- a/Bot/Games/SlotMachine.fs +++ b/Bot/Games/SlotMachine.fs @@ -167,12 +167,9 @@ let handlePrizeTable (ctx : IDiscordContext) = let embed = DiscordEmbedBuilder() match guildEmojis , anyEmoji with | Some emojis , Some any -> - let folder acc elem = + let folder (i,acc,b) elem = let s1,s2,s3,prize = elem - let prizeTxt = - match prize with - | Money m -> $"**{m}** $GBT" - | Jackpot -> $"**JACKPOT**" + let prizeTxt = match prize with Money m -> $"**{m}** $GBT" | Jackpot -> $"**JACKPOT**" let line = match s1 , s2 , s3 with | Symbol s1' , Symbol s2' , Symbol s3' -> @@ -182,15 +179,21 @@ let handlePrizeTable (ctx : IDiscordContext) = | Symbol s1' , Any , Any -> $"{Formatter.Emoji(emojis.[s1'.emojiName])}{Formatter.Emoji(any)}{Formatter.Emoji(any)}" | _ -> "" - $"{acc}\n{line} ⠀⠀|⠀⠀ {prizeTxt}" + let text = + if prizeTxt.Contains("100") then + acc + else + $"{acc}\n{line} | {prizeTxt}" + (i + 1) , text , ( b || prizeTxt.Contains("100") ) let! jackpot = getJackpotAmount () - let rows = Array.fold folder "" prizeTable + let _ , rows , _ = Array.fold folder (0, "", false) prizeTable embed.Color <- DiscordColor.Green - embed.Title <- $"CURRENT JACKPOT: **{jackpot}** `💰` $GBT" - embed.Description <- $"Current Jackpot At: **{jackpot}** $GBT\n\n**Combo** ⠀⠀⠀⠀⠀⠀⠀ **Prize**\n{rows}" + embed.Title <- $"CURRENT JACKPOT: `{jackpot} 💰 $GBT`" + embed.Description <- embed.Description + $"\n\n**PRIZE TABLE **\n{rows}\n\n**ANY 3** | **100** $GBT" do! ctx.FollowUp(DiscordFollowupMessageBuilder().AsEphemeral().AddEmbed(embed)) do! Analytics.prizeTableViewed (ctx.GetDiscordMember()) | _ , _ -> return () + } :> Task let spinEmojis (builder : DiscordFollowupMessageBuilder) (results : SlotSymbol array) (itx : DiscordInteraction) = @@ -328,54 +331,36 @@ let handleGuildDownloadCompleted (_ : DiscordClient) (event : GuildDownloadCompl } :> Task let sendInitialEmbed (ctx : IDiscordContext) = + let updateFn (ctx : IDiscordContext) (message : DiscordMessage option) = async { + let channel = ctx.GetGuild().GetChannel(GuildEnvironment.channelSlots) + let builder = DiscordMessageBuilder() + let embed = DiscordEmbedBuilder() + embed.Title <- "Degenz Slot Machine" + embed.ImageUrl <- "https://s7.gifyu.com/images/ezgif.com-gif-maker-268ecb6e4d28bd55a0.gif" + embed.Description <- "Want to try your luck?" + let! jackpot = getJackpotAmount () + embed.Title <- $"CURRENT JACKPOT: `{jackpot} 💰 $GBT`" + + builder.AddEmbed(embed) |> ignore + + let button1 = DiscordButtonComponent(ButtonStyle.Success, $"spin-1x", $"🎰 Bet {PlayPricex1} $GBT") :> DiscordComponent + let button2 = DiscordButtonComponent(ButtonStyle.Success, $"spin-2x", $"🎰 Bet {PlayPricex2} $GBT") :> DiscordComponent + let button3 = DiscordButtonComponent(ButtonStyle.Success, $"spin-3x", $"🎰 Bet {PlayPricex3} $GBT") :> DiscordComponent + let button4 = DiscordButtonComponent(ButtonStyle.Primary, $"prizes", $"Prize Table") :> DiscordComponent + builder.AddComponents([| button1 ; button2 ; button3 ; button4 |]) |> ignore + match GuildEnvironment.botClientSlots, message with + | _ , Some m -> + let! _ = m.ModifyAsync(builder) |> Async.AwaitTask + return Some m + | Some bot , None -> + let! m = bot.SendMessageAsync(channel, builder) |> Async.AwaitTask + return Some m + | _ -> return None + } + async { - try - let channel = ctx.GetGuild().GetChannel(GuildEnvironment.channelSlots) - let builder = DiscordMessageBuilder() - let embed = DiscordEmbedBuilder() - embed.Title <- "Degenz Slot Machine" - embed.ImageUrl <- "https://s7.gifyu.com/images/ezgif.com-gif-maker-268ecb6e4d28bd55a0.gif" - - match guildEmojis , anyEmoji with - | Some emojis , Some any -> - let folder (i,acc,b) elem = - let s1,s2,s3,prize = elem - let prizeTxt = match prize with Money m -> $"**{m}** $GBT" | Jackpot -> $"**JACKPOT**" - let line = - match s1 , s2 , s3 with - | Symbol s1' , Symbol s2' , Symbol s3' -> - $"{Formatter.Emoji(emojis.[s1'.emojiName])}{Formatter.Emoji(emojis.[s2'.emojiName])}{Formatter.Emoji(emojis.[s3'.emojiName])}" - | Symbol s1' , Symbol s2' , Any -> - $"{Formatter.Emoji(emojis.[s1'.emojiName])}{Formatter.Emoji(emojis.[s2'.emojiName])}{Formatter.Emoji(any)}" - | Symbol s1' , Any , Any -> - $"{Formatter.Emoji(emojis.[s1'.emojiName])}{Formatter.Emoji(any)}{Formatter.Emoji(any)}" - | _ -> "" - let text = - if prizeTxt.Contains("100") then - acc - else - $"{acc}\n{line} | {prizeTxt}" - (i + 1) , text , ( b || prizeTxt.Contains("100") ) - let! jackpot = getJackpotAmount () - let _ , rows , _ = Array.fold folder (0, "", false) prizeTable - embed.Color <- DiscordColor.Green -// embed.Title <- "Degenz Slots Prize Table" -// embed.Description <- $"Current Jackpot At: **{jackpot}** $GBT\n\n" - embed.Title <- $"CURRENT JACKPOT: `{jackpot} 💰 $GBT`" - embed.Description <- embed.Description + $"\n\n**PRIZE TABLE **\n{rows}\n\n**ANY 3** | **100** $GBT" - | _ , _ -> return () - - builder.AddEmbed(embed) |> ignore - - let button1 = DiscordButtonComponent(ButtonStyle.Success, $"spin-1x", $"🎰 Bet {PlayPricex1} $GBT") :> DiscordComponent - let button2 = DiscordButtonComponent(ButtonStyle.Success, $"spin-2x", $"🎰 Bet {PlayPricex2} $GBT") :> DiscordComponent - let button3 = DiscordButtonComponent(ButtonStyle.Success, $"spin-3x", $"🎰 Bet {PlayPricex3} $GBT") :> DiscordComponent -// let button4 = DiscordButtonComponent(ButtonStyle.Primary, $"prizes", $"Prize Table") :> DiscordComponent -// builder.AddComponents([| button1 ; button2 ; button3 ; button4 |]) |> ignore - builder.AddComponents([| button1 ; button2 ; button3 |]) |> ignore - do! GuildEnvironment.botClientSlots.Value.SendMessageAsync(channel, builder) - |> Async.AwaitTask - |> Async.Ignore - with e -> - printfn $"Error trying to get channel Training Dojo\n\n{e.Message}" - } |> Async.RunSynchronously + let! message = updateFn ctx None + while true do + do! Async.Sleep 60000 + do! updateFn ctx (message) |> Async.Ignore + } |> Async.Start