README
This commit is contained in:
		
							parent
							
								
									027074a13e
								
							
						
					
					
						commit
						d908e2bc3f
					
				
							
								
								
									
										152
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,152 @@ | ||||
| # DegenzGame | ||||
| 
 | ||||
| A multiplayer Discord gaming platform built with F# and the Giraffe web framework, featuring interactive games with player progression and an in-game economy. | ||||
| 
 | ||||
| ## Architecture | ||||
| 
 | ||||
| ### Core Technologies | ||||
| 
 | ||||
| - **F# (.NET 6.0)**: Primary programming language for all game logic and bot functionality | ||||
| - **Giraffe**: F# web framework used for the Currency API microservice | ||||
| - **DSharpPlus**: Discord API library for bot interactions and slash commands | ||||
| - **PostgreSQL**: Database with Npgsql.FSharp for type-safe operations | ||||
| - **Docker**: Containerized deployment | ||||
| 
 | ||||
| ### Project Structure | ||||
| 
 | ||||
| The solution consists of two main projects: | ||||
| 
 | ||||
| - **Bot** (`Bot.fsproj`): Main Discord bot application containing all game implementations | ||||
| - **CurrencyAPI** (`CurrencyAPI.fsproj`): HTTP API microservice for currency balance management | ||||
| 
 | ||||
| ## Game System | ||||
| 
 | ||||
| ### Available Games | ||||
| 
 | ||||
| #### HackerBattle | ||||
| Cyberpunk-themed combat game where players: | ||||
| - Use hack items (VIRUS, REMOTE, WORM) to attack other players and steal GBT currency | ||||
| - Deploy shields (FIREWALL, ENCRYPTION, CYPHER) for defense | ||||
| - Items have cooldown periods and class-based effectiveness | ||||
| - Combat resolution based on item power vs resistance stats | ||||
| - Includes comprehensive validation (can't attack yourself, cooldown checks, etc.) | ||||
| 
 | ||||
| #### SlotMachine | ||||
| Casino-style slot machine featuring: | ||||
| - Custom symbols: BigBrother, Eye, Obey, AnonMask, Rat, Ramen, Sushi, Pizza | ||||
| - Configurable reel probabilities per symbol | ||||
| - Prize table with money rewards and jackpot system | ||||
| - Integration with GBT currency system | ||||
| 
 | ||||
| #### Thief Game | ||||
| Player-vs-player stealing mechanics: | ||||
| - 1-minute cooldown for thieves, 1-hour recovery for victims | ||||
| - Success chance calculation based on player stats | ||||
| - Payout formula: `defenderBank * 0.1 * (1.0 - chance)` with random bonus | ||||
| - Two outcomes: Success (steal GBT) or WentToPrison (imprisoned status) | ||||
| 
 | ||||
| #### Rock Paper Scissors | ||||
| Classic game with Discord UI integration and animated GIF results | ||||
| 
 | ||||
| #### Store System | ||||
| In-game marketplace with: | ||||
| - Fixed-price item purchasing with GBT currency | ||||
| - Stock management (limited/unlimited items) | ||||
| - Role-based access control and invite requirements | ||||
| - Timed sales with Unix timestamp endpoints | ||||
| - Stack limits for certain items | ||||
| 
 | ||||
| #### Trainer System | ||||
| Tutorial/onboarding system: | ||||
| - Grants "Trainee" role to new players | ||||
| - Multi-step tutorial teaching shield and hack mechanics | ||||
| - Provides starting items (REMOTE hack, FIREWALL shield) | ||||
| - Simulated combat against "Sensei" bot | ||||
| 
 | ||||
| ### Player Progression | ||||
| 
 | ||||
| #### Stats System (`GameTypes.fs:41-55`) | ||||
| Four core attributes with time-based decay: | ||||
| - **Strength**: Combat effectiveness | ||||
| - **Focus**: Precision and accuracy | ||||
| - **Charisma**: Social interactions | ||||
| - **Luck**: Random event outcomes | ||||
| 
 | ||||
| Each stat features: | ||||
| - Base range 0-100 with item-based modifications | ||||
| - Decay rate of 2.09 (100 to 0 in ~48 hours) | ||||
| - Item effects: Min/Max bounds, Add bonuses, RateMultiplier | ||||
| 
 | ||||
| ## Discord Integration | ||||
| 
 | ||||
| ### Multi-Bot Architecture (`Bot.fs:53-59`) | ||||
| The system uses multiple specialized Discord bot clients: | ||||
| - **hackerBattleBot**: HackerBattle game interactions | ||||
| - **storeBot**: Store transactions and interactions | ||||
| - **inviterBot**: Member recruitment and invite tracking | ||||
| - **slotsBot**: Slot machine operations | ||||
| - **adminBot**: Administrative functions | ||||
| 
 | ||||
| ### Event Handling | ||||
| - Component interactions (buttons, dropdowns) | ||||
| - Slash command registration per guild | ||||
| - Message creation events | ||||
| - Guild member join/update tracking | ||||
| - Real-time game state management | ||||
| 
 | ||||
| ## Database Design | ||||
| 
 | ||||
| ### PostgreSQL Integration (`DbService.fs`) | ||||
| Type-safe database operations using Npgsql.FSharp: | ||||
| 
 | ||||
| - **User table**: Discord IDs, display names, GBT balances, wallet addresses | ||||
| - **Item system**: Database-driven item definitions with custom composite types | ||||
| - **Event tracking**: Player actions, cooldowns, game history with proper typing | ||||
| - **Custom types**: `StatMod` composite type for database item modifiers | ||||
| 
 | ||||
| ## Currency API (Giraffe) | ||||
| 
 | ||||
| ### Endpoints (`Currency.fs`) | ||||
| - **GET `/user/{id}/balance`**: Retrieve player's GBT balance | ||||
| - **PATCH `/user/{id}/balance/withdraw`**: Deduct GBT (with insufficient funds validation) | ||||
| - **PATCH `/user/{id}/balance/deposit`**: Add GBT to player account | ||||
| - **API Key Authentication**: `X-API-Key` header validation | ||||
| - **Error Handling**: Comprehensive error responses and logging | ||||
| 
 | ||||
| ## Player Economy | ||||
| 
 | ||||
| The game features a balanced virtual economy: | ||||
| - **GBT Currency**: Primary medium of exchange earned through gameplay | ||||
| - **Fixed Pricing**: Items have set buy/sell prices (no dynamic market) | ||||
| - **Cooldown Systems**: Rate limiting prevents exploitation | ||||
| - **Risk/Reward Balance**: Thief game risk vs potential reward | ||||
| - **Player Progression**: Long-term engagement through stat decay requiring active play | ||||
| 
 | ||||
| ## Development Setup | ||||
| 
 | ||||
| ### Prerequisites | ||||
| - .NET 6.0 SDK | ||||
| - PostgreSQL database | ||||
| - Discord application with multiple bot tokens | ||||
| - Paket for F# package management | ||||
| 
 | ||||
| ### Configuration | ||||
| Environment variables required: | ||||
| - `DATABASE_URL`: PostgreSQL connection string | ||||
| - `API_KEY`: Currency API authentication key | ||||
| - Multiple Discord bot tokens for specialized bots | ||||
| 
 | ||||
| ### Running the Application | ||||
| ```bash | ||||
| # Restore packages | ||||
| dotnet paket restore | ||||
| 
 | ||||
| # Build the solution | ||||
| dotnet build | ||||
| 
 | ||||
| # Run the Discord bot | ||||
| dotnet run --project Bot | ||||
| 
 | ||||
| # Run the Currency API | ||||
| dotnet run --project CurrencyAPI | ||||
| ``` | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user