This reverts commit 0db69bf72b0b090edc22d0e682f8f3bb4356dc3e.
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.
Degenz World
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
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
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
Type-safe database operations using Npgsql.FSharp:
- User table: Discord IDs, display names, GBT balances
- 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
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 stringAPI_KEY
: Currency API authentication key- Multiple Discord bot tokens for specialized bots
Running the Application
# 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
Description
Languages
F#
99.8%
Dockerfile
0.2%