WIP Compiler Errors: Adding DbService and PlayerRegistration components
This commit is contained in:
		
							parent
							
								
									e40fc42482
								
							
						
					
					
						commit
						7b2f6ba861
					
				
							
								
								
									
										39
									
								
								DbService/DbService.fs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								DbService/DbService.fs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,39 @@ | ||||
| module DegenzGame.DbService | ||||
| 
 | ||||
| open DegenzGame.Shared | ||||
| open DegenzGame.Shared | ||||
| open MongoDB.Bson | ||||
| open MongoDB.Driver | ||||
| 
 | ||||
| type PlayerEntry = { | ||||
|     Id : BsonObjectId | ||||
|     Player : Player | ||||
| } | ||||
| 
 | ||||
| let mongo = MongoClient("mongodb://localhost:27017") | ||||
| let db = mongo.GetDatabase("degenz-game") | ||||
| let players = db.GetCollection<PlayerEntry>("players") | ||||
| 
 | ||||
| let tryFindPlayer (id : uint64) : Async<Player option> = | ||||
|     async { | ||||
|         let filter = Builders<PlayerEntry>.Filter.Eq((fun p -> p.Player.DiscordId), id) | ||||
|         let! player = players.FindAsync<PlayerEntry>(filter) |> Async.AwaitTask | ||||
|         return match player.ToEnumerable() |> Seq.toList with | ||||
|                | []  -> None | ||||
|                | entry::_ -> Some entry.Player | ||||
|     } | ||||
| 
 | ||||
| let insertNewPlayer (player : Player) = | ||||
|     async { | ||||
|         do! { Id = BsonObjectId(ObjectId.GenerateNewId()) ; Player = player } | ||||
|             |> players.InsertOneAsync | ||||
|             |> Async.AwaitTask | ||||
|     } | ||||
| 
 | ||||
| let removePlayer (memberId : uint64) = | ||||
|     async { | ||||
|         // TODO: Check the result of this delete operation | ||||
|         return! players.DeleteOneAsync (fun p -> p.Player.DiscordId = memberId) | ||||
|                 |> Async.AwaitTask | ||||
|                 |> Async.Ignore | ||||
|     } | ||||
							
								
								
									
										14
									
								
								DbService/DbService.fsproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								DbService/DbService.fsproj
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <Project Sdk="Microsoft.NET.Sdk"> | ||||
|   <PropertyGroup> | ||||
|     <TargetFramework>net6.0</TargetFramework> | ||||
|     <GenerateDocumentationFile>true</GenerateDocumentationFile> | ||||
|   </PropertyGroup> | ||||
|   <ItemGroup> | ||||
|     <Compile Include="DbService.fs" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ProjectReference Include="..\Shared\Shared.fsproj" /> | ||||
|   </ItemGroup> | ||||
|   <Import Project="..\.paket\Paket.Restore.targets" /> | ||||
| </Project> | ||||
							
								
								
									
										7
									
								
								DbService/paket.references
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								DbService/paket.references
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | ||||
| FSharp.Core | ||||
| DSharpPlus | ||||
| // DSharpPlus.CommandsNext | ||||
| // DSharpPlus.Interactivity | ||||
| DSharpPlus.SlashCommands | ||||
| 
 | ||||
| MongoDB.Driver | ||||
| @ -9,6 +9,10 @@ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Shared", "Shared\Shared.fsp | ||||
| EndProject | ||||
| Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Store", "Store\Store.fsproj", "{CD88B0A6-DE42-4087-9B33-48FF84201633}" | ||||
| EndProject | ||||
| Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "PlayerRegistration", "PlayerRegistration\PlayerRegistration.fsproj", "{FF9E58A6-1A1D-4DEC-B52D-265F215BF315}" | ||||
| EndProject | ||||
| Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "DbService", "DbService\DbService.fsproj", "{B1D3E1CC-451C-42D4-B054-D64E75E1A3B9}" | ||||
| EndProject | ||||
| Global | ||||
| 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
| 		Debug|Any CPU = Debug|Any CPU | ||||
| @ -30,5 +34,13 @@ Global | ||||
| 		{CD88B0A6-DE42-4087-9B33-48FF84201633}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| 		{CD88B0A6-DE42-4087-9B33-48FF84201633}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| 		{CD88B0A6-DE42-4087-9B33-48FF84201633}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| 		{FF9E58A6-1A1D-4DEC-B52D-265F215BF315}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
| 		{FF9E58A6-1A1D-4DEC-B52D-265F215BF315}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| 		{FF9E58A6-1A1D-4DEC-B52D-265F215BF315}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| 		{FF9E58A6-1A1D-4DEC-B52D-265F215BF315}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| 		{B1D3E1CC-451C-42D4-B054-D64E75E1A3B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
| 		{B1D3E1CC-451C-42D4-B054-D64E75E1A3B9}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| 		{B1D3E1CC-451C-42D4-B054-D64E75E1A3B9}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| 		{B1D3E1CC-451C-42D4-B054-D64E75E1A3B9}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| 	EndGlobalSection | ||||
| EndGlobal | ||||
| @ -6,7 +6,8 @@ open DSharpPlus | ||||
| open DSharpPlus.Entities | ||||
| open DSharpPlus.EventArgs | ||||
| open DSharpPlus.SlashCommands | ||||
| open DegenzGame.Types | ||||
| open DegenzGame.Shared | ||||
| open DegenzGame.DbService | ||||
| open DegenzGame.Functions | ||||
| open MongoDB.Driver | ||||
| 
 | ||||
| @ -16,60 +17,6 @@ open MongoDB.Driver | ||||
| // My server | ||||
| let battleChannel = 927449884204867664uL | ||||
| 
 | ||||
| let mongo = MongoClient("mongodb://localhost:27017") | ||||
| let db = mongo.GetDatabase("degenz-game") | ||||
| let players = db.GetCollection<Player>("players") | ||||
| 
 | ||||
| let tryFindPlayer (id : uint64) : Async<Player option> = | ||||
|     async { | ||||
|         let filter = Builders<Player>.Filter.Eq((fun p -> p.DiscordId), id) | ||||
|         let! player = players.FindAsync<Player>(filter) |> Async.AwaitTask | ||||
|         return match player.ToEnumerable() |> Seq.toList with | ||||
|                | []  -> None | ||||
|                | p::_ -> Some p | ||||
|     } | ||||
| 
 | ||||
| let addHackerRole (ctx : InteractionContext) = | ||||
|     async { | ||||
|         let! player = tryFindPlayer ctx.Member.Id | ||||
|         let! newPlayer = | ||||
|             match player with | ||||
|             | Some _ -> async.Return false | ||||
|             | None -> | ||||
|                 async { | ||||
|                     let p = (newPlayer ctx.Member.Username ctx.Member.Id) | ||||
|                     do! players.InsertOneAsync p |> Async.AwaitTask | ||||
| 
 | ||||
|                     for role in ctx.Guild.Roles do | ||||
|                         if role.Value.Name = "Hacker" then | ||||
|                             do! ctx.Member.GrantRoleAsync(role.Value) | ||||
|                                 |> Async.AwaitTask | ||||
| 
 | ||||
|                     return true | ||||
|                 } | ||||
| 
 | ||||
|         if newPlayer then | ||||
|             do! ctx.CreateResponseAsync("You are now an elite haxxor", true) | ||||
|                 |> Async.AwaitTask | ||||
|         else | ||||
|             do! ctx.CreateResponseAsync("Already registered as an elite haxxor", true) | ||||
|                 |> Async.AwaitTask | ||||
| 
 | ||||
|     } |> Async.StartAsTask | ||||
|     :> Task | ||||
| 
 | ||||
| let removeHackerRole (ctx : InteractionContext) = | ||||
|     async { | ||||
|         for role in ctx.Member.Roles do | ||||
|             if role.Name = "Hacker" then | ||||
|                 do! ctx.Member.RevokeRoleAsync(role) | ||||
|                     |> Async.AwaitTask | ||||
|         // TODO: Check the result of this delete operation | ||||
|         let! _ = players.DeleteOneAsync (fun p -> p.DiscordId = ctx.Member.Id) |> Async.AwaitTask | ||||
|         do! ctx.CreateResponseAsync("You are now lame", true) | ||||
|             |> Async.AwaitTask | ||||
|     } |> Async.StartAsTask | ||||
|     :> Task | ||||
| 
 | ||||
| let attack (ctx : InteractionContext) (target : DiscordUser) = | ||||
|     async { | ||||
|  | ||||
| @ -3,9 +3,7 @@ module DegenzGame.Functions | ||||
| open System | ||||
| open DSharpPlus | ||||
| open DSharpPlus.Entities | ||||
| open DSharpPlus.SlashCommands | ||||
| open DegenzGame.Types | ||||
| open MongoDB.Bson | ||||
| open DegenzGame.Shared | ||||
| 
 | ||||
| let hackDescription = "" | ||||
| 
 | ||||
| @ -16,29 +14,6 @@ Active Hacks: {player.Attacks |> Array.toList} | ||||
| Active Defenses: {player.Defenses |> Array.toList} | ||||
| Bank: {player.Bank}" | ||||
| 
 | ||||
| let newPlayer nickname (membr : uint64) = | ||||
|     let h1 = [| Weapon.Virus ; Weapon.Ransom |] | ||||
|     let h2 = [| Weapon.DDos  ; Weapon.Worm |] | ||||
|     let h3 = [| Weapon.Crack ; Weapon.Injection |] | ||||
|     let d1 = [| Shield.Firewall   ; Shield.PortScan |] | ||||
|     let d2 = [| Shield.Encryption ; Shield.Cypher |] | ||||
|     let d3 = [| Shield.Hardening  ; Shield.Sanitation |] | ||||
| 
 | ||||
|     let rand = System.Random(System.Guid.NewGuid().GetHashCode()) | ||||
|     let getRandom (actions : 'a array) = actions.[rand.Next(0,2)] | ||||
| 
 | ||||
|     let weapons = [| getRandom h1 ; getRandom h2 ; getRandom h3 |] | ||||
|     let shields = [| getRandom d1 ; getRandom d2 ; getRandom d3 |] | ||||
| 
 | ||||
|     { Id = BsonObjectId(ObjectId.GenerateNewId()) | ||||
|       DiscordId = membr | ||||
|       Name = nickname | ||||
|       Weapons = weapons | ||||
|       Shields  = shields | ||||
|       Attacks = [||] | ||||
|       Defenses = [||] | ||||
|       Bank = 0f } | ||||
| 
 | ||||
| let constructButtons (actionType : string) (playerInfo : string) (weapons : 'a array) = | ||||
|     weapons | ||||
|     |> Seq.map (fun hack -> | ||||
| @ -47,17 +22,6 @@ let constructButtons (actionType : string) (playerInfo : string) (weapons : 'a a | ||||
|                 $"{actionType}-{hack}-{playerInfo}", | ||||
|                 $"{hack}")) | ||||
| 
 | ||||
| let createSimpleResponseAsync msg (ctx : InteractionContext) = | ||||
|     async { | ||||
|         let builder = DiscordInteractionResponseBuilder() | ||||
|         builder.Content <- msg | ||||
|         builder.AsEphemeral true |> ignore | ||||
|         do! ctx.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, builder) | ||||
|             |> Async.AwaitTask | ||||
|     } | ||||
| 
 | ||||
| let notYetAHackerMsg = createSimpleResponseAsync "You are not currently a hacker, first use the /redpill command to become one" | ||||
| 
 | ||||
| let removeExpiredActions timespan (timestamp : 'a -> DateTime) actions = | ||||
|     actions | ||||
|     |> Array.filter (fun act -> | ||||
|  | ||||
| @ -17,8 +17,10 @@ | ||||
|     <Compile Include="Functions.fs" /> | ||||
|     <Compile Include="Commands.fs" /> | ||||
|     <Compile Include="Program.fs" /> | ||||
|     <Content Include="paket.references" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ProjectReference Include="..\DbService\DbService.fsproj" /> | ||||
|     <ProjectReference Include="..\Shared\Shared.fsproj" /> | ||||
|   </ItemGroup> | ||||
|   <Import Project="..\.paket\Paket.Restore.targets" /> | ||||
|  | ||||
| @ -1,27 +1,16 @@ | ||||
| module DegenzGame.Program | ||||
| 
 | ||||
| open System | ||||
| open System.Threading.Tasks | ||||
| open System.Threading.Tasks | ||||
| open DSharpPlus | ||||
| open DSharpPlus.Entities | ||||
| open DSharpPlus.EventArgs | ||||
| open DSharpPlus.SlashCommands | ||||
| open Emzi0767.Utilities | ||||
| open DegenzGame.Types | ||||
| open DegenzGame | ||||
| open DegenzGame.Commands | ||||
| open MongoDB.Driver | ||||
| 
 | ||||
| type EmptyGlobalCommandToAvoidFamousDuplicateSlashCommandsBug() = inherit ApplicationCommandModule () | ||||
| 
 | ||||
| type HackerGame() = | ||||
|     inherit ApplicationCommandModule () | ||||
| 
 | ||||
|     [<SlashCommand("redpill", "Take the redpill and become a hacker")>] | ||||
|     member _.AddHackerRole (ctx : InteractionContext) = Commands.addHackerRole ctx | ||||
| 
 | ||||
|     [<SlashCommand("bluepill", "Take the bluepill and become lame")>] | ||||
|     member _.RemoveHackerRole (ctx : InteractionContext) = Commands.removeHackerRole ctx | ||||
| 
 | ||||
|     [<SlashCommand("hack", "Send a hack attack to another player")>] | ||||
|     member this.AttackCommand (ctx : InteractionContext, [<Option("target", "The player you want to hack")>] target : DiscordUser) = | ||||
|         Commands.attack ctx target | ||||
|  | ||||
| @ -4,4 +4,4 @@ DSharpPlus | ||||
| // DSharpPlus.Interactivity | ||||
| DSharpPlus.SlashCommands | ||||
| 
 | ||||
| MongoDB.Driver | ||||
| // MongoDB.Driver | ||||
|  | ||||
							
								
								
									
										25
									
								
								PlayerRegistration/.dockerignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								PlayerRegistration/.dockerignore
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | ||||
| **/.dockerignore | ||||
| **/.env | ||||
| **/.git | ||||
| **/.gitignore | ||||
| **/.project | ||||
| **/.settings | ||||
| **/.toolstarget | ||||
| **/.vs | ||||
| **/.vscode | ||||
| **/.idea | ||||
| **/*.*proj.user | ||||
| **/*.dbmdl | ||||
| **/*.jfm | ||||
| **/azds.yaml | ||||
| **/bin | ||||
| **/charts | ||||
| **/docker-compose* | ||||
| **/Dockerfile* | ||||
| **/node_modules | ||||
| **/npm-debug.log | ||||
| **/obj | ||||
| **/secrets.dev.yaml | ||||
| **/values.dev.yaml | ||||
| LICENSE | ||||
| README.md | ||||
							
								
								
									
										18
									
								
								PlayerRegistration/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								PlayerRegistration/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,18 @@ | ||||
| FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base | ||||
| WORKDIR /app | ||||
| 
 | ||||
| FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build | ||||
| WORKDIR /src | ||||
| COPY ["PlayerRegistration/PlayerRegistration.fsproj", "PlayerRegistration/"] | ||||
| RUN dotnet restore "PlayerRegistration/PlayerRegistration.fsproj" | ||||
| COPY . . | ||||
| WORKDIR "/src/PlayerRegistration" | ||||
| RUN dotnet build "PlayerRegistration.fsproj" -c Release -o /app/build | ||||
| 
 | ||||
| FROM build AS publish | ||||
| RUN dotnet publish "PlayerRegistration.fsproj" -c Release -o /app/publish | ||||
| 
 | ||||
| FROM base AS final | ||||
| WORKDIR /app | ||||
| COPY --from=publish /app/publish . | ||||
| ENTRYPOINT ["dotnet", "PlayerRegistration.dll"] | ||||
							
								
								
									
										21
									
								
								PlayerRegistration/PlayerRegistration.fsproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								PlayerRegistration/PlayerRegistration.fsproj
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <Project Sdk="Microsoft.NET.Sdk"> | ||||
|   <PropertyGroup> | ||||
|     <OutputType>Exe</OutputType> | ||||
|     <TargetFramework>net6.0</TargetFramework> | ||||
|     <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> | ||||
|   </PropertyGroup> | ||||
|   <ItemGroup> | ||||
|     <Compile Include="Program.fs" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <Content Include=".dockerignore" /> | ||||
|     <Content Include="Dockerfile" /> | ||||
|     <Content Include="paket.references" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ProjectReference Include="..\DbService\DbService.fsproj" /> | ||||
|     <ProjectReference Include="..\Shared\Shared.fsproj" /> | ||||
|   </ItemGroup> | ||||
|   <Import Project="..\.paket\Paket.Restore.targets" /> | ||||
| </Project> | ||||
							
								
								
									
										115
									
								
								PlayerRegistration/Program.fs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								PlayerRegistration/Program.fs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,115 @@ | ||||
| 
 | ||||
| open System.Threading.Tasks | ||||
| open DegenzGame.DbService | ||||
| open DSharpPlus | ||||
| open DSharpPlus.SlashCommands | ||||
| open DegenzGame.Shared | ||||
| 
 | ||||
| module Commands = | ||||
|     let newPlayer nickname (membr : uint64) = | ||||
|         let h1 = [| Weapon.Virus ; Weapon.Ransom |] | ||||
|         let h2 = [| Weapon.DDos  ; Weapon.Worm |] | ||||
|         let h3 = [| Weapon.Crack ; Weapon.Injection |] | ||||
|         let d1 = [| Shield.Firewall   ; Shield.PortScan |] | ||||
|         let d2 = [| Shield.Encryption ; Shield.Cypher |] | ||||
|         let d3 = [| Shield.Hardening  ; Shield.Sanitation |] | ||||
| 
 | ||||
|         let rand = System.Random(System.Guid.NewGuid().GetHashCode()) | ||||
|         let getRandom (actions : 'a array) = actions.[rand.Next(0,2)] | ||||
| 
 | ||||
|         let weapons = [| getRandom h1 ; getRandom h2 ; getRandom h3 |] | ||||
|         let shields = [| getRandom d1 ; getRandom d2 ; getRandom d3 |] | ||||
| 
 | ||||
|         { DiscordId = membr | ||||
|           Name = nickname | ||||
|           Weapons = weapons | ||||
|           Shields  = shields | ||||
|           Attacks = [||] | ||||
|           Defenses = [||] | ||||
|           Bank = 0f } | ||||
| 
 | ||||
|     let addHackerRole (ctx : InteractionContext) = | ||||
|         async { | ||||
|             let! player = tryFindPlayer ctx.Member.Id | ||||
|             let! newPlayer = | ||||
|                 match player with | ||||
|                 | Some _ -> async.Return false | ||||
|                 | None -> | ||||
|                     async { | ||||
|                         do! newPlayer ctx.Member.Username ctx.Member.Id | ||||
|                             |> insertNewPlayer | ||||
| 
 | ||||
|                         for role in ctx.Guild.Roles do | ||||
|                             if role.Value.Name = "Hacker" then | ||||
|                                 do! ctx.Member.GrantRoleAsync(role.Value) | ||||
|                                     |> Async.AwaitTask | ||||
| 
 | ||||
|                         return true | ||||
|                     } | ||||
| 
 | ||||
|             if newPlayer then | ||||
|                 do! ctx.CreateResponseAsync("You are now an elite haxxor", true) | ||||
|                     |> Async.AwaitTask | ||||
|             else | ||||
|                 do! ctx.CreateResponseAsync("Already registered as an elite haxxor", true) | ||||
|                     |> Async.AwaitTask | ||||
| 
 | ||||
|         } |> Async.StartAsTask | ||||
|         :> Task | ||||
| 
 | ||||
|     let removeHackerRole (ctx : InteractionContext) = | ||||
|         async { | ||||
|             for role in ctx.Member.Roles do | ||||
|                 if role.Name = "Hacker" then | ||||
|                     do! ctx.Member.RevokeRoleAsync(role) | ||||
|                         |> Async.AwaitTask | ||||
| 
 | ||||
|             do! removePlayer ctx.Member.Id | ||||
| 
 | ||||
|             do! ctx.CreateResponseAsync("You are now lame", true) | ||||
|                 |> Async.AwaitTask | ||||
|         } |> Async.StartAsTask | ||||
|         :> Task | ||||
| 
 | ||||
| 
 | ||||
| type EmptyGlobalCommandToAvoidFamousDuplicateSlashCommandsBug() = inherit ApplicationCommandModule () | ||||
| 
 | ||||
| type PlayerRegistration() = | ||||
|     inherit ApplicationCommandModule () | ||||
| 
 | ||||
|     [<SlashCommand("redpill", "Take the redpill and become a hacker")>] | ||||
|     member _.AddHackerRole (ctx : InteractionContext) = Commands.addHackerRole ctx | ||||
| 
 | ||||
|     [<SlashCommand("bluepill", "Take the bluepill and become lame")>] | ||||
|     member _.RemoveHackerRole (ctx : InteractionContext) = Commands.removeHackerRole ctx | ||||
| 
 | ||||
| 
 | ||||
| let config = DiscordConfiguration() | ||||
| config.Token <- "OTIyNDIyMDIyMTI1MDEwOTU1.YcBOcw.JxfW1CSIwEO7j6RbRFCnPZ-HoTk" | ||||
| config.TokenType <- TokenType.Bot | ||||
| config.Intents <- DiscordIntents.All | ||||
| //config.MinimumLogLevel <- Microsoft.Extensions.Logging.LogLevel.Trace | ||||
| 
 | ||||
| let client = new DiscordClient(config) | ||||
| 
 | ||||
| //client.add_ComponentInteractionCreated(AsyncEventHandler(handleButtonEvent)) | ||||
| 
 | ||||
| let slash = client.UseSlashCommands() | ||||
| 
 | ||||
| // My server | ||||
| slash.RegisterCommands<PlayerRegistration>(922419263275425832uL); | ||||
| // Degenz | ||||
| //slash.RegisterCommands<HackerGame>(922414052708327494uL); | ||||
| 
 | ||||
| client.ConnectAsync () | ||||
| |> Async.AwaitTask | ||||
| |> Async.RunSynchronously | ||||
| 
 | ||||
| Task.Delay(-1) | ||||
| |> Async.AwaitTask | ||||
| |> Async.RunSynchronously | ||||
| 
 | ||||
| client.DisconnectAsync () | ||||
| |> Async.AwaitTask | ||||
| |> Async.RunSynchronously | ||||
| 
 | ||||
							
								
								
									
										7
									
								
								PlayerRegistration/paket.references
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								PlayerRegistration/paket.references
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | ||||
| FSharp.Core | ||||
| DSharpPlus | ||||
| // DSharpPlus.CommandsNext | ||||
| // DSharpPlus.Interactivity | ||||
| DSharpPlus.SlashCommands | ||||
| 
 | ||||
| // MongoDB.Driver | ||||
| @ -6,6 +6,7 @@ | ||||
|   </PropertyGroup> | ||||
|   <ItemGroup> | ||||
|     <Compile Include="Types.fs" /> | ||||
|     <Content Include="paket.references" /> | ||||
|   </ItemGroup> | ||||
|   <Import Project="..\.paket\Paket.Restore.targets" /> | ||||
| </Project> | ||||
| @ -1,7 +1,9 @@ | ||||
| module DegenzGame.Types | ||||
| module DegenzGame.Shared | ||||
| 
 | ||||
| open System | ||||
| open MongoDB.Bson | ||||
| open DSharpPlus | ||||
| open DSharpPlus.Entities | ||||
| open DSharpPlus.SlashCommands | ||||
| 
 | ||||
| type ActionClass = | ||||
|     | Network | ||||
| @ -54,7 +56,6 @@ type Defense = { | ||||
| 
 | ||||
| [<CLIMutable>] | ||||
| type Player = { | ||||
|     Id : BsonObjectId | ||||
|     DiscordId : uint64 | ||||
|     Name : string | ||||
|     Weapons : Weapon array | ||||
| @ -64,4 +65,13 @@ type Player = { | ||||
|     Bank : single | ||||
| } | ||||
| 
 | ||||
| let createSimpleResponseAsync msg (ctx : InteractionContext) = | ||||
|     async { | ||||
|         let builder = DiscordInteractionResponseBuilder() | ||||
|         builder.Content <- msg | ||||
|         builder.AsEphemeral true |> ignore | ||||
|         do! ctx.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, builder) | ||||
|             |> Async.AwaitTask | ||||
|     } | ||||
| 
 | ||||
| let notYetAHackerMsg = createSimpleResponseAsync "You are not currently a hacker, first use the /redpill command to become one" | ||||
| @ -1,2 +1,3 @@ | ||||
| FSharp.Core | ||||
| MongoDB.Driver | ||||
| DSharpPlus | ||||
| DSharpPlus.SlashCommands | ||||
|  | ||||
| @ -11,8 +11,10 @@ | ||||
|   <ItemGroup> | ||||
|     <Content Include=".dockerignore" /> | ||||
|     <Content Include="Dockerfile" /> | ||||
|     <Content Include="paket.references" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ProjectReference Include="..\DbService\DbService.fsproj" /> | ||||
|     <ProjectReference Include="..\Shared\Shared.fsproj" /> | ||||
|   </ItemGroup> | ||||
|   <Import Project="..\.paket\Paket.Restore.targets" /> | ||||
|  | ||||
| @ -4,4 +4,4 @@ DSharpPlus | ||||
| // DSharpPlus.Interactivity | ||||
| DSharpPlus.SlashCommands | ||||
| 
 | ||||
| MongoDB.Driver | ||||
| // MongoDB.Driver | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user