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"
 | 
				
			||||||
 | 
					                + "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
 | 
					        do! ctx.Respond(InteractionResponseType.ChannelMessageWithSource, builder) |> Async.AwaitTask
 | 
				
			||||||
                ("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
 | 
					    } |> 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