2022-01-19 21:41:14 +07:00
2022-01-19 23:51:13 +07:00
2025-06-24 15:38:15 +07:00
2025-06-24 15:34:54 +07:00
2025-06-24 12:12:04 +07:00
2022-01-19 21:41:14 +07:00
2022-07-20 17:35:38 +07:00
2022-08-04 13:50:32 +07:00
2025-06-24 12:12:04 +07:00
2022-08-04 15:27:24 +07:00
2025-06-24 15:39:09 +07:00

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

Armory Slot Machine Jpegs for Sale

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

# 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
No description provided
Readme 1.1 MiB
Languages
F# 99.8%
Dockerfile 0.2%