From cacd9a32b1172dcbcf68ba4ddd602ffbd8b810ca Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Sat, 19 Feb 2022 20:16:14 +0700 Subject: [PATCH] Optimizing from training steps --- Bot/Embeds.fs | 6 +++--- Bot/HackerBattle.fs | 10 +++++----- Bot/RockPaperScissors.fs | 10 +++++----- Bot/Thief.fs | 12 ++++++------ Bot/Trainer.fs | 29 ++++++++++++++++++++--------- 5 files changed, 39 insertions(+), 28 deletions(-) diff --git a/Bot/Embeds.fs b/Bot/Embeds.fs index bac72ae..5f415dd 100644 --- a/Bot/Embeds.fs +++ b/Bot/Embeds.fs @@ -33,16 +33,16 @@ let getShieldGif = function | ShieldId.Cypher -> "https://s10.gifyu.com/images/Cypher-Smaller.gif" | _ -> shieldGif -let constructButtons (actionId: string) (buttonInfo : string) (player: PlayerData) itemType isTrainer = +let constructButtons (actionId: string) (buttonInfo : string) (player: PlayerData) itemType ignoreCooldown = player |> Player.getItems itemType |> Array.map (fun item -> let action = player.Events |> Array.tryFind (fun i -> i.ItemId = item.Id) - match action , isTrainer with + match action , ignoreCooldown with | None , _ | Some _ , true -> - DiscordButtonComponent(ButtonStyle.Primary, $"{actionId}-{item.Id}-{buttonInfo}", $"{item.Name}") + DiscordButtonComponent(ButtonStyle.Primary, $"{actionId}-{item.Id}-{buttonInfo}-{player.Name}", $"{item.Name}") | Some act , false -> let c = ((Armory.getItem act.ItemId).Cooldown) let time = Messaging.getShortTimeText (TimeSpan.FromMinutes(int c)) act.Timestamp diff --git a/Bot/HackerBattle.fs b/Bot/HackerBattle.fs index 8509f98..0b5f340 100644 --- a/Bot/HackerBattle.fs +++ b/Bot/HackerBattle.fs @@ -139,10 +139,10 @@ let attack (target : DiscordUser) (ctx : IDiscordContext) = let handleAttack (ctx : IDiscordContext) = Game.executePlayerAction ctx (fun attacker -> async { - let split = ctx.GetInteractionId().Split("-") - let hackId = int split.[1] + let tokens = ctx.GetInteractionId().Split("-") + let hackId = int tokens.[1] let hack = Armory.getItem hackId - let resultId , targetId = UInt64.TryParse split.[2] + let resultId , targetId = UInt64.TryParse tokens.[2] let! resultTarget = DbService.tryFindPlayer targetId match resultTarget , true , resultId with @@ -175,8 +175,8 @@ let defend (ctx : IDiscordContext) = let handleDefense (ctx : IDiscordContext) = Game.executePlayerAction ctx (fun player -> async { - let split = ctx.GetInteractionId().Split("-") - let shieldId = int split.[1] + let tokens = ctx.GetInteractionId().Split("-") + let shieldId = int tokens.[1] let shield = Armory.getItem shieldId do! player diff --git a/Bot/RockPaperScissors.fs b/Bot/RockPaperScissors.fs index d39ed67..38e9487 100644 --- a/Bot/RockPaperScissors.fs +++ b/Bot/RockPaperScissors.fs @@ -96,10 +96,10 @@ let playRPS target ctx = }) let handleRPS (ctx : IDiscordContext) = - let split = ctx.GetInteractionId().Split("-") - let move = split.[1] - let targetId = uint64 split.[2] - let isResponse = split.[4] = "True" + let tokens = ctx.GetInteractionId().Split("-") + let move = tokens.[1] + let targetId = uint64 tokens.[2] + let isResponse = tokens.[4] = "True" Game.executePlayerActionWithTargetId false targetId ctx (fun attacker defender -> async { if isResponse then let eventCtx = ctx.GetContext() :?> ComponentInteractionCreateEventArgs @@ -111,7 +111,7 @@ let handleRPS (ctx : IDiscordContext) = .AsEphemeral(true) do! eventCtx.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, builder) |> Async.AwaitTask let move1 = moveFromString move - let move2 = moveFromString split.[5] + let move2 = moveFromString tokens.[5] let winner = getWinner move1 move2 let embeds = matchResultsEmbed winner move1 move2 attacker defender |> Seq.map (fun e -> e.Build()) let builder = DiscordMessageBuilder().AddEmbeds(embeds) diff --git a/Bot/Thief.fs b/Bot/Thief.fs index 126f7d4..2c9c4a9 100644 --- a/Bot/Thief.fs +++ b/Bot/Thief.fs @@ -159,13 +159,13 @@ let steal target amount (ctx : IDiscordContext) = }) let handleSteal (ctx : IDiscordContext) = - let split = ctx.GetInteractionId().Split("-") - let answer = split.[1] + let tokens = ctx.GetInteractionId().Split("-") + let answer = tokens.[1] let handleYes (victim : PlayerData) (thief : PlayerData) = async { - let targetId = uint64 split.[2] - let targetName = split.[3] - let amount = int split.[4] + let targetId = uint64 tokens.[2] + let targetName = tokens.[3] + let amount = int tokens.[4] let prize , winPercentage , _ = calculateWinPercentage amount (int victim.Bank) thief.Traits.Strength victim.Traits.Strength let prize = int prize * 1 @@ -233,7 +233,7 @@ let handleSteal (ctx : IDiscordContext) = do! ctx.GetDiscordMember().GrantRoleAsync(role) |> Async.AwaitTask } if answer = "yes" then - let targetId = uint64 split.[2] + let targetId = uint64 tokens.[2] Game.executePlayerActionWithTargetId true targetId ctx (fun attacker defender -> async { do! attacker |> Player.removeExpiredActions diff --git a/Bot/Trainer.fs b/Bot/Trainer.fs index 423f997..86656a6 100644 --- a/Bot/Trainer.fs +++ b/Bot/Trainer.fs @@ -47,7 +47,10 @@ let sendInitialEmbed (client : DiscordClient) = } |> Async.RunSynchronously let handleTrainerStep1 (ctx : IDiscordContext) = - Game.executePlayerAction ctx (fun player -> async { + async { + let builder = DiscordInteractionResponseBuilder() + builder.IsEphemeral <- true + builder.Content <- "Content" let role = ctx.GetGuild().GetRole(GuildEnvironment.roleTrainee) do! ctx.GetDiscordMember().GrantRoleAsync(role) |> Async.AwaitTask @@ -56,10 +59,13 @@ let handleTrainerStep1 (ctx : IDiscordContext) = ("Beautopia© is a dangerous place... quick, put up a SHIELD 🛡 before another Degen hacks you, and steals your 💰$GBT.\n\n" + "To enable it, you need to run the `/shield` slash command.\n\n" + $"Type the `/shield` command now, then select - `{defaultShield.Name}`\n") - }) + } |> Async.StartAsTask :> Task let defend (ctx : IDiscordContext) = async { + let builder = DiscordInteractionResponseBuilder() + builder.IsEphemeral <- true + builder.Content <- "Content" let builder = DiscordInteractionResponseBuilder() builder.IsEphemeral <- true builder.Content <- "Content" @@ -76,20 +82,25 @@ let handleDefenseMsg hackId = { } let handleDefense (ctx : IDiscordContext) = - Game.executePlayerAction ctx (fun player -> async { + async { + let builder = DiscordInteractionResponseBuilder() + builder.IsEphemeral <- true + builder.Content <- "Content" + do! ctx.Respond InteractionResponseType.DeferredChannelMessageWithSource builder |> Async.AwaitTask let sendMessage' = sendFollowUpMessage ctx - let split = ctx.GetInteractionId().Split("-") - let shieldId = enum(int split.[2]) + let tokens = ctx.GetInteractionId().Split("-") + let shieldId = enum(int tokens.[2]) let shield = Armory.getItem (int shieldId) + let playerName = enum(int tokens.[3]) let embed = Embeds.responseCreatedShield shield do! ctx.FollowUp embed |> Async.AwaitTask do! Async.Sleep 4000 do! sendMessage' $"Ok, good, let me make sure that worked.\n\nI'll try to **hack** you now with **{defaultHack.Name}**" do! Async.Sleep 5000 - do! sendMessage' $"❌ HACKING FAILED!\n\n{player.Name} defended hack from <@{Sensei.Id}>!" + do! sendMessage' $"❌ HACKING FAILED!\n\n{playerName} defended hack from <@{Sensei.Id}>!" do! Async.Sleep 4000 do! sendFollowUpMessageWithButton ctx (handleDefenseMsg defaultHack.Name) - }) + } |> Async.StartAsTask :> Task let handleTrainerStep3 (ctx : IDiscordContext) = async { @@ -184,8 +195,8 @@ let handleArsenal (ctx : IDiscordContext) = let handleButtonEvent (ctx : IDiscordContext) = async { - let split = ctx.GetInteractionId().Split("-") - match int split.[1] with + let tokens = ctx.GetInteractionId().Split("-") + match int tokens.[1] with | 1 -> do! handleTrainerStep1 ctx |> Async.AwaitTask | 2 -> do! handleDefense ctx |> Async.AwaitTask | 3 -> do! handleTrainerStep3 ctx |> Async.AwaitTask