discord-bot-game/README.md
2025-06-24 12:25:34 +07:00

164 lines
5.9 KiB
Markdown

# 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.
## Screenshots & Game Assets
![Hacker Battle](https://s10.gifyu.com/images/Hacker-Degenz-V20ce8eb832734aa62-min.gif)
![Defense System](https://s10.gifyu.com/images/Defense-Degenz-V2-min.gif)
![Master Training](https://s10.gifyu.com/images/MasterTraining_Degenz.gif)
![Store Interface](https://s8.gifyu.com/images/Shop_Degenz_Resampled.gif)
![Slot Machine](https://s7.gifyu.com/images/ezgif.com-gif-maker-268ecb6e4d28bd55a0.gif)
![Whitelist Banner](https://s8.gifyu.com/images/whitelist-banner-smaller2.gif)
![Rock Paper Scissors](https://s10.gifyu.com/images/Sprite-0001614d8697f32165af.gif)
![Invite System](https://s8.gifyu.com/images/invite_banner_new.png)
## 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
```