Optimizing trainer so it hits the DB less often
This commit is contained in:
parent
cacd9a32b1
commit
f354b9d6e8
@ -19,7 +19,7 @@ module Game =
|
||||
let builder = DiscordInteractionResponseBuilder()
|
||||
builder.IsEphemeral <- true
|
||||
builder.Content <- "Content"
|
||||
do! ctx.Respond InteractionResponseType.DeferredChannelMessageWithSource builder |> Async.AwaitTask
|
||||
do! ctx.Respond(InteractionResponseType.DeferredChannelMessageWithSource, builder) |> Async.AwaitTask
|
||||
let! playerResult = tryFindPlayer (ctx.GetDiscordMember().Id)
|
||||
match playerResult with
|
||||
| Some player -> do! dispatch player
|
||||
@ -31,7 +31,7 @@ module Game =
|
||||
let builder = DiscordInteractionResponseBuilder()
|
||||
builder.IsEphemeral <- true
|
||||
builder.Content <- "Content"
|
||||
do! ctx.Respond InteractionResponseType.DeferredChannelMessageWithSource builder |> Async.AwaitTask
|
||||
do! ctx.Respond(InteractionResponseType.DeferredChannelMessageWithSource, builder) |> Async.AwaitTask
|
||||
let! players =
|
||||
[ tryFindPlayer (ctx.GetDiscordMember().Id)
|
||||
tryFindPlayer targetPlayer.Id ]
|
||||
@ -51,7 +51,7 @@ module Game =
|
||||
builder.IsEphemeral <- true
|
||||
builder.Content <- "Content"
|
||||
if defer then
|
||||
do! ctx.Respond InteractionResponseType.DeferredChannelMessageWithSource builder |> Async.AwaitTask
|
||||
do! ctx.Respond(InteractionResponseType.DeferredChannelMessageWithSource, builder) |> Async.AwaitTask
|
||||
let! players =
|
||||
[ tryFindPlayer (ctx.GetDiscordMember().Id)
|
||||
tryFindPlayer targetId ]
|
||||
|
@ -5,7 +5,7 @@ open System
|
||||
open DSharpPlus.Entities
|
||||
open dotenv.net
|
||||
DotEnv.Load(DotEnvOptions(envFilePaths = [ "../../../../.dev.env" ], overwriteExistingVars = false))
|
||||
//DotEnv.Load(DotEnvOptions(envFilePaths = [ "../../../../.sta.env" ], overwriteExistingVars = false))
|
||||
//DotEnv.Load(DotEnvOptions(envFilePaths = [ "../../../../.stag.env" ], overwriteExistingVars = false))
|
||||
//DotEnv.Load(DotEnvOptions(envFilePaths = [ "../../../../.prod.env" ], overwriteExistingVars = false))
|
||||
|
||||
let getVar str = Environment.GetEnvironmentVariable(str)
|
||||
|
@ -230,7 +230,7 @@ let handleButtonEvent (_ : DiscordClient) (event : ComponentInteractionCreateEve
|
||||
let builder = DiscordInteractionResponseBuilder()
|
||||
builder.IsEphemeral <- true
|
||||
builder.Content <- $"Incorrect Action identifier {eventCtx.GetInteractionId()}"
|
||||
do! eventCtx.Respond InteractionResponseType.ChannelMessageWithSource builder |> Async.AwaitTask
|
||||
do! eventCtx.Respond(InteractionResponseType.ChannelMessageWithSource, builder) |> Async.AwaitTask
|
||||
}
|
||||
|
||||
type HackerGame() =
|
||||
|
@ -89,7 +89,7 @@ let handleStoreEvents (_ : DiscordClient) (event : ComponentInteractionCreateEve
|
||||
let builder = DiscordInteractionResponseBuilder()
|
||||
builder.IsEphemeral <- true
|
||||
builder.Content <- $"Incorrect Action identifier {id}"
|
||||
do! ctx.Respond InteractionResponseType.ChannelMessageWithSource builder |> Async.AwaitTask
|
||||
do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, builder) |> Async.AwaitTask
|
||||
}
|
||||
|
||||
type Store() =
|
||||
|
@ -245,7 +245,7 @@ let handleSteal (ctx : IDiscordContext) =
|
||||
async {
|
||||
let builder = DiscordInteractionResponseBuilder()
|
||||
builder.Content <- "I thought better of it"
|
||||
do! ctx.Respond InteractionResponseType.UpdateMessage builder |> Async.AwaitTask
|
||||
do! ctx.Respond(InteractionResponseType.UpdateMessage, builder) |> Async.AwaitTask
|
||||
} |> Async.StartAsTask :> Task
|
||||
|
||||
let handleStealButton (_ : DiscordClient) (event : ComponentInteractionCreateEventArgs) =
|
||||
@ -257,7 +257,7 @@ let handleStealButton (_ : DiscordClient) (event : ComponentInteractionCreateEve
|
||||
let builder = DiscordInteractionResponseBuilder()
|
||||
builder.IsEphemeral <- true
|
||||
builder.Content <- $"Incorrect Action identifier {eventCtx.GetInteractionId()}"
|
||||
do! eventCtx.Respond InteractionResponseType.ChannelMessageWithSource builder |> Async.AwaitTask
|
||||
do! eventCtx.Respond(InteractionResponseType.ChannelMessageWithSource, builder) |> Async.AwaitTask
|
||||
}
|
||||
|
||||
type StealGame() =
|
||||
|
@ -4,6 +4,7 @@ open System.Text
|
||||
open System.Threading.Tasks
|
||||
open DSharpPlus
|
||||
open DSharpPlus.Entities
|
||||
open DSharpPlus.EventArgs
|
||||
open Degenz.Types
|
||||
open Degenz.Messaging
|
||||
|
||||
@ -48,29 +49,26 @@ let sendInitialEmbed (client : DiscordClient) =
|
||||
|
||||
let handleTrainerStep1 (ctx : IDiscordContext) =
|
||||
async {
|
||||
let builder = DiscordInteractionResponseBuilder()
|
||||
builder.IsEphemeral <- true
|
||||
builder.Content <- "Content"
|
||||
let role = ctx.GetGuild().GetRole(GuildEnvironment.roleTrainee)
|
||||
do! ctx.GetDiscordMember().GrantRoleAsync(role)
|
||||
|> Async.AwaitTask
|
||||
let msg = "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"
|
||||
let builder =
|
||||
DiscordInteractionResponseBuilder()
|
||||
.WithContent(msg)
|
||||
.AsEphemeral(true)
|
||||
|
||||
do! sendFollowUpMessage ctx
|
||||
("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")
|
||||
do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, builder) |> Async.AwaitTask
|
||||
} |> 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"
|
||||
do! ctx.Respond InteractionResponseType.DeferredChannelMessageWithSource builder |> Async.AwaitTask
|
||||
let embed = Embeds.pickDefense "Trainer-2" { PlayerData.empty with Inventory = [| defaultShield |] } true
|
||||
do! Messaging.defer ctx
|
||||
let m = ctx.GetDiscordMember()
|
||||
let name = if System.String.IsNullOrEmpty m.Nickname then m.DisplayName else m.Nickname
|
||||
let embed = Embeds.pickDefense "Trainer-2" { PlayerData.empty with Inventory = [| defaultShield |] ; Name = name } true
|
||||
do! ctx.FollowUp(embed) |> Async.AwaitTask
|
||||
} |> Async.StartAsTask :> Task
|
||||
|
||||
@ -83,15 +81,13 @@ let handleDefenseMsg hackId = {
|
||||
|
||||
let handleDefense (ctx : IDiscordContext) =
|
||||
async {
|
||||
let builder = DiscordInteractionResponseBuilder()
|
||||
builder.IsEphemeral <- true
|
||||
builder.Content <- "Content"
|
||||
do! ctx.Respond InteractionResponseType.DeferredChannelMessageWithSource builder |> Async.AwaitTask
|
||||
do! Messaging.defer ctx
|
||||
|
||||
let sendMessage' = sendFollowUpMessage ctx
|
||||
let tokens = ctx.GetInteractionId().Split("-")
|
||||
let shieldId = enum<ShieldId>(int tokens.[2])
|
||||
let shield = Armory.getItem (int shieldId)
|
||||
let playerName = enum<ShieldId>(int tokens.[3])
|
||||
let playerName = tokens.[4]
|
||||
let embed = Embeds.responseCreatedShield shield
|
||||
do! ctx.FollowUp embed |> Async.AwaitTask
|
||||
do! Async.Sleep 4000
|
||||
@ -104,33 +100,36 @@ let handleDefense (ctx : IDiscordContext) =
|
||||
|
||||
let handleTrainerStep3 (ctx : IDiscordContext) =
|
||||
async {
|
||||
let builder = DiscordInteractionResponseBuilder()
|
||||
builder.IsEphemeral <- true
|
||||
builder.Content <- "Content"
|
||||
do! ctx.Respond InteractionResponseType.DeferredChannelMessageWithSource builder |> Async.AwaitTask
|
||||
do! sendFollowUpMessage ctx
|
||||
( "Now let’s **HACK** 💻... I want you to **HACK ME**!\n\n"
|
||||
+ "To **hack**, you need to run the `/hack` slash command.\n"
|
||||
+ $"Type the `/hack` command now, then choose me - <@{Sensei.Id}> as your target, and select `{defaultHack.Name}`")
|
||||
let builder =
|
||||
DiscordInteractionResponseBuilder()
|
||||
.AsEphemeral(true)
|
||||
.WithContent
|
||||
( "Now let’s **HACK** 💻... I want you to **HACK ME**!\n\n"
|
||||
+ "To **hack**, you need to run the `/hack` slash command.\n"
|
||||
+ $"Type the `/hack` command now, then choose me - <@{Sensei.Id}> as your target, and select `{defaultHack.Name}`")
|
||||
|
||||
do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, builder) |> Async.AwaitTask
|
||||
} |> Async.StartAsTask :> Task
|
||||
|
||||
let hack (target : DiscordUser) (ctx : IDiscordContext) =
|
||||
Game.executePlayerAction ctx (fun player -> async {
|
||||
async {
|
||||
do! Messaging.defer ctx
|
||||
|
||||
let isRightTarget = target.Id = Sensei.Id
|
||||
match isRightTarget with
|
||||
| true ->
|
||||
let bot = { PlayerData.empty with DiscordId = Sensei.Id ; Name = Sensei.Name }
|
||||
let embed = Embeds.pickHack "Trainer-4" { player with Inventory = [| defaultHack |] } bot true
|
||||
let embed = Embeds.pickHack "Trainer-4" { PlayerData.empty with Inventory = [| defaultHack |] } bot true
|
||||
|
||||
do! ctx.FollowUp(embed) |> Async.AwaitTask
|
||||
| false ->
|
||||
let builder = DiscordFollowupMessageBuilder()
|
||||
builder.Content <- "You picked the wrong target, you dufus. Try again, this time pick me!"
|
||||
|
||||
builder.IsEphemeral <- true
|
||||
let builder =
|
||||
DiscordFollowupMessageBuilder()
|
||||
.WithContent("You picked the wrong target, you dufus. Try again, this time pick me!")
|
||||
.AsEphemeral(true)
|
||||
|
||||
do! ctx.FollowUp(builder) |> Async.AwaitTask
|
||||
})
|
||||
} |> Async.StartAsTask :> Task
|
||||
|
||||
let handleHack (ctx : IDiscordContext) =
|
||||
Game.executePlayerAction ctx (fun player -> async {
|
||||
|
@ -160,7 +160,8 @@ module Messaging =
|
||||
| Event of ComponentInteractionCreateEventArgs
|
||||
|
||||
type IDiscordContext =
|
||||
abstract member Respond : InteractionResponseType -> DiscordInteractionResponseBuilder -> Task
|
||||
abstract member Respond : InteractionResponseType -> Task
|
||||
abstract member Respond : InteractionResponseType * DiscordInteractionResponseBuilder -> Task
|
||||
abstract member FollowUp : DiscordFollowupMessageBuilder -> Task
|
||||
abstract member GetDiscordMember : unit -> DiscordMember
|
||||
abstract member GetGuild : unit -> DiscordGuild
|
||||
@ -170,7 +171,11 @@ module Messaging =
|
||||
|
||||
type DiscordInteractionContext(ctx : InteractionContext) =
|
||||
interface IDiscordContext with
|
||||
member this.Respond responseType builder =
|
||||
member this.Respond responseType =
|
||||
async {
|
||||
do! ctx.Interaction.CreateResponseAsync(responseType) |> Async.AwaitTask
|
||||
} |> Async.StartAsTask :> Task
|
||||
member this.Respond (responseType, builder) =
|
||||
async {
|
||||
do! ctx.Interaction.CreateResponseAsync(responseType, builder) |> Async.AwaitTask
|
||||
} |> Async.StartAsTask :> Task
|
||||
@ -186,7 +191,11 @@ module Messaging =
|
||||
|
||||
type DiscordEventContext(ctx : ComponentInteractionCreateEventArgs) =
|
||||
interface IDiscordContext with
|
||||
member this.Respond responseType builder =
|
||||
member this.Respond responseType =
|
||||
async {
|
||||
do! ctx.Interaction.CreateResponseAsync(responseType) |> Async.AwaitTask
|
||||
} |> Async.StartAsTask :> Task
|
||||
member this.Respond (responseType, builder) =
|
||||
async {
|
||||
do! ctx.Interaction.CreateResponseAsync(responseType, builder) |> Async.AwaitTask
|
||||
} |> Async.StartAsTask :> Task
|
||||
@ -218,12 +227,18 @@ module Messaging =
|
||||
let minutesRemaining = if remaining.Hours = 0 then remaining.Minutes + 1 else remaining.Minutes
|
||||
$"{hours}{minutesRemaining}min"
|
||||
|
||||
let defer (ctx: IDiscordContext) = async {
|
||||
let builder = DiscordInteractionResponseBuilder()
|
||||
builder.IsEphemeral <- true
|
||||
do! ctx.Respond(InteractionResponseType.DeferredChannelMessageWithSource, builder) |> Async.AwaitTask
|
||||
}
|
||||
|
||||
let sendSimpleResponse (ctx: IDiscordContext) msg =
|
||||
async {
|
||||
let builder = DiscordInteractionResponseBuilder()
|
||||
builder.Content <- msg
|
||||
builder.AsEphemeral true |> ignore
|
||||
do! ctx.Respond InteractionResponseType.ChannelMessageWithSource builder |> Async.AwaitTask
|
||||
do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, builder) |> Async.AwaitTask
|
||||
}
|
||||
|
||||
let sendFollowUpMessage (ctx : IDiscordContext) msg =
|
||||
@ -260,7 +275,7 @@ module Messaging =
|
||||
builder.AddComponents [| button |] |> ignore
|
||||
builder.IsEphemeral <- true
|
||||
builder.Content <- interactiveMessage.Message
|
||||
do! ctx.Respond InteractionResponseType.UpdateMessage builder |> Async.AwaitTask
|
||||
do! ctx.Respond(InteractionResponseType.UpdateMessage, builder) |> Async.AwaitTask
|
||||
}
|
||||
|
||||
let handleResultWithResponse ctx fn (player : Result<PlayerData, string>) =
|
||||
|
Loading…
x
Reference in New Issue
Block a user