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