discord-bot-game/README.md
2025-06-24 15:41:39 +07:00

4.8 KiB

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

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 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