Fix a few bugs with the store and hacker game
This commit is contained in:
		
							parent
							
								
									07246dcdb2
								
							
						
					
					
						commit
						6492d0c4ba
					
				| @ -96,11 +96,11 @@ let handleAttack (event : ComponentInteractionCreateEventArgs) = | ||||
|         { p with Attacks = Array.append [| attack |] p.Attacks ; Bank = MathF.Max(p.Bank + amount, 0f) } | ||||
|     async { | ||||
|         let split = event.Id.Split("-") | ||||
|         let  ( resultHack , weapon ) = Weapon.TryParse(split.[1]) | ||||
|         let weapon = Enum.Parse(typedefof<Weapon>, split.[1]) :?> Weapon | ||||
|         let ( resultId , targetId ) = UInt64.TryParse split.[2] | ||||
|         let! resultPlayer = DbService.tryFindPlayer event.User.Id | ||||
|         let! resultTarget = DbService.tryFindPlayer targetId | ||||
|         match resultPlayer , resultTarget , resultHack , resultId with | ||||
|         match resultPlayer , resultTarget , true , resultId with | ||||
|         | Some player , Some target , true , true -> | ||||
|            let updatedDefenses = removeExpiredActions (TimeSpan.FromHours(24)) (fun (p : Defense) -> p.Timestamp) target.Defenses | ||||
|            do! DbService.updatePlayer <| { player with Defenses = updatedDefenses } | ||||
| @ -108,12 +108,12 @@ let handleAttack (event : ComponentInteractionCreateEventArgs) = | ||||
|                 updatedDefenses | ||||
|                 |> Seq.toArray | ||||
|                 |> Array.map (fun dfn -> int dfn.DefenseType) | ||||
|                 |> Array.map (calculateDamage weapon) | ||||
|                 |> Array.map (calculateDamage (int weapon)) | ||||
|                 |> Array.contains Weak | ||||
|            match wasSuccessfulHack with | ||||
|            | false -> | ||||
|                 let prize = 1.337f // LEET | ||||
|                 let attack = { HackType = enum<Weapon>(weapon) ; Timestamp = DateTime.UtcNow ; Target = { Id = targetId ; Name = split.[3] } } | ||||
|                 let attack = { HackType = enum<Weapon>(int weapon) ; Timestamp = DateTime.UtcNow ; Target = { Id = targetId ; Name = split.[3] } } | ||||
|                 do! DbService.updatePlayer <| updatePlayer prize attack player | ||||
|                 do! DbService.updatePlayer { target with Bank = MathF.Max(target.Bank - prize, 0f)} | ||||
| 
 | ||||
| @ -137,11 +137,12 @@ let handleAttack (event : ComponentInteractionCreateEventArgs) = | ||||
|                 do! event.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, builder) | ||||
|                     |> Async.AwaitTask | ||||
| 
 | ||||
|                 let attack = { HackType = enum<Weapon>(weapon) ; Timestamp = DateTime.UtcNow ; Target = { Id = targetId ; Name = split.[3] } } | ||||
|                 let attack = { HackType = enum<Weapon>(int weapon) ; Timestamp = DateTime.UtcNow ; Target = { Id = targetId ; Name = split.[3] } } | ||||
|                 do! DbService.updatePlayer <| updatePlayer -prize attack player | ||||
|                 do! DbService.updatePlayer { target with Bank = target.Bank + prize } | ||||
| 
 | ||||
|                 let builder = DiscordMessageBuilder() | ||||
|                 builder.WithContent($"Hacking attempt failed! <@{targetId}> defended hack from {event.User} and took {prize} from them! ") |> ignore | ||||
|                 builder.WithContent($"Hacking attempt failed! <@{targetId}> defended hack from {event.User.Username} and took {prize} from them! ") |> ignore | ||||
|                 let channel = (event.Guild.GetChannel(battleChannel)) | ||||
|                 do! channel.SendMessageAsync(builder) | ||||
|                     |> Async.AwaitTask | ||||
| @ -163,7 +164,7 @@ let handleDefense (event : ComponentInteractionCreateEventArgs) = | ||||
|         | Some player , true -> | ||||
|             let builder = DiscordInteractionResponseBuilder() | ||||
|             builder.IsEphemeral <- true | ||||
|             builder.Content <- $"Mounted a {shield} defense for 1 hour" | ||||
|             builder.Content <- $"Mounted a {shield} defense for 24 hours" | ||||
|             do! event.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, builder) | ||||
|                 |> Async.AwaitTask | ||||
| 
 | ||||
|  | ||||
| @ -19,7 +19,7 @@ type HackerGame() = | ||||
|     member this.DefendCommand (ctx : InteractionContext) = Commands.defend ctx | ||||
| 
 | ||||
| let config = DiscordConfiguration() | ||||
| config.Token <- "OTIyNDIyMDIyMTI1MDEwOTU1.YcBOcw.JxfW1CSIwEO7j6RbRFCnPZ-HoTk" | ||||
| config.Token <- "OTMyMzI5NDAzNjYzNDEzMjQ4.YeRZaw.ZyCo5L8HFsCvx8JuhdAwqrH3hZI" | ||||
| config.TokenType <- TokenType.Bot | ||||
| config.Intents <- DiscordIntents.All | ||||
| //config.MinimumLogLevel <- Microsoft.Extensions.Logging.LogLevel.Trace | ||||
|  | ||||
| @ -134,8 +134,6 @@ config.Intents <- DiscordIntents.All | ||||
| 
 | ||||
| let client = new DiscordClient(config) | ||||
| 
 | ||||
| //client.add_ComponentInteractionCreated(AsyncEventHandler(handleButtonEvent)) | ||||
| 
 | ||||
| let slash = client.UseSlashCommands() | ||||
| 
 | ||||
| // My server | ||||
|  | ||||
| @ -95,8 +95,8 @@ let notYetAHackerMsg = | ||||
| let hackDescription = "" | ||||
| 
 | ||||
| let statusFormat player = | ||||
|     $"Hack Inventory: {player.Weapons} | ||||
| Shield Inventory: {player.Shields} | ||||
|     $"Hack Inventory: {player.Weapons |> Array.toList} | ||||
| Shield Inventory: {player.Shields |> Array.toList} | ||||
| Active Hacks: {player.Attacks |> Array.toList} | ||||
| Active Defenses: {player.Defenses |> Array.toList} | ||||
| Bank: {player.Bank}" | ||||
|  | ||||
| @ -111,8 +111,7 @@ module Commands = | ||||
|                     |> Array.iter | ||||
|                         (fun wps -> | ||||
|                             wps | ||||
|                             |> Array.map (fun w -> | ||||
|                                 DiscordButtonComponent(ButtonStyle.Primary, $"{player.DiscordId}-Weapon-{w}", $"{w}")) | ||||
|                             |> Array.map (fun w -> DiscordButtonComponent(ButtonStyle.Primary, $"Weapon-{w}", $"{w}")) | ||||
|                             |> Seq.cast<DiscordComponent> | ||||
|                             |> builder.AddComponents | ||||
|                             |> ignore) | ||||
| @ -120,8 +119,7 @@ module Commands = | ||||
|                     |> Array.iter | ||||
|                         (fun shs -> | ||||
|                             shs | ||||
|                             |> Array.map (fun s -> | ||||
|                                 DiscordButtonComponent(ButtonStyle.Primary, $"{player.DiscordId}-Shield-{s}", $"{s}")) | ||||
|                             |> Array.map (fun s -> DiscordButtonComponent(ButtonStyle.Primary, $"Shield-{s}", $"{s}")) | ||||
|                             |> Seq.cast<DiscordComponent> | ||||
|                             |> builder.AddComponents | ||||
|                             |> ignore) | ||||
| @ -137,15 +135,45 @@ module Commands = | ||||
|         } |> Async.StartAsTask | ||||
|           :> Task | ||||
| 
 | ||||
| let handleSellButtonEvents (_ : DiscordClient) (event : ComponentInteractionCreateEventArgs) = | ||||
|     async { | ||||
|         let builder = DiscordInteractionResponseBuilder() | ||||
|         builder.IsEphemeral <- true | ||||
|         builder.Content <- $"{event.Id}" | ||||
|         do! event.Interaction.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, builder) | ||||
|                 |> Async.AwaitTask | ||||
|     } |> Async.StartAsTask | ||||
|     :> Task | ||||
|     let handleSellButtonEvents (_ : DiscordClient) (event : ComponentInteractionCreateEventArgs) = | ||||
|         async { | ||||
|             let! playerResult = DbService.tryFindPlayer event.User.Id | ||||
|             match playerResult with | ||||
|             | Some player -> | ||||
|                 let split = event.Id.Split("-") | ||||
|                 let itemType = match split.[0] with "Weapon" -> ItemType.Weapon | _ -> ItemType.Shield | ||||
|                 let itemName = split.[1] | ||||
|                 match itemType with | ||||
|                 | ItemType.Weapon -> | ||||
|                     let item = getItems ItemType.Weapon |> Array.find (fun w -> w.Name = itemName) | ||||
|                     let salePrice = item.Cost / 2.f | ||||
|                     let updatedWeapons = player.Weapons |> Array.filter (fun (w : Weapon) -> string w <> itemName) | ||||
|                     let updatedPlayer = { player with Bank = player.Bank + salePrice ; Weapons = updatedWeapons } | ||||
|                     do! DbService.updatePlayer updatedPlayer | ||||
|                     let builder = DiscordInteractionResponseBuilder() | ||||
|                     builder.IsEphemeral <- true | ||||
|                     builder.Content <- $"Sold weapon {itemName} for {salePrice}! Current Balance: {updatedPlayer.Bank}" | ||||
|                     do! event.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, builder) | ||||
|                         |> Async.AwaitTask | ||||
|                 | ItemType.Shield -> | ||||
|                     let item = getItems ItemType.Shield |> Array.find (fun s -> s.Name = itemName) | ||||
|                     let salePrice = item.Cost / 2.f | ||||
|                     let updatedShields = player.Shields |> Array.filter (fun (s : Shield) -> string s <> itemName) | ||||
|                     let updatedPlayer = { player with Bank = player.Bank + salePrice ; Shields = updatedShields } | ||||
|                     do! DbService.updatePlayer updatedPlayer | ||||
|                     let builder = DiscordInteractionResponseBuilder() | ||||
|                     builder.IsEphemeral <- true | ||||
|                     builder.Content <- $"Sold shield {itemName} for {salePrice}! Current Balance: {updatedPlayer.Bank}" | ||||
|                     do! event.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, builder) | ||||
|                         |> Async.AwaitTask | ||||
|             | None -> | ||||
|                 let builder = DiscordInteractionResponseBuilder() | ||||
|                 builder.IsEphemeral <- true | ||||
|                 builder.Content <- "An error occurred and the user doesn't not exist" | ||||
|                 do! event.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, builder) | ||||
|                     |> Async.AwaitTask | ||||
|         } |> Async.StartAsTask | ||||
|         :> Task | ||||
| 
 | ||||
| type EmptyGlobalCommandToAvoidFamousDuplicateSlashCommandsBug() = inherit ApplicationCommandModule () | ||||
| 
 | ||||
| @ -168,14 +196,14 @@ type Store() = | ||||
|         Commands.sellItem ctx | ||||
| 
 | ||||
| let config = DiscordConfiguration() | ||||
| config.Token <- "OTIyNDIyMDIyMTI1MDEwOTU1.YcBOcw.JxfW1CSIwEO7j6RbRFCnPZ-HoTk" | ||||
| config.Token <- "OTMyMzA3NTE0ODc4NDg4NjY2.YeRFCA.3NXX4tLObXU3rVgPt8D1fE58FnY" | ||||
| config.TokenType <- TokenType.Bot | ||||
| config.Intents <- DiscordIntents.All | ||||
| //config.MinimumLogLevel <- Microsoft.Extensions.Logging.LogLevel.Trace | ||||
| 
 | ||||
| let client = new DiscordClient(config) | ||||
| 
 | ||||
| client.add_ComponentInteractionCreated(AsyncEventHandler(handleSellButtonEvents)) | ||||
| client.add_ComponentInteractionCreated(AsyncEventHandler(Commands.handleSellButtonEvents)) | ||||
| 
 | ||||
| let slash = client.UseSlashCommands() | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user