# 123jsen/discord-farm-game architecture

> Architecture diagram of the GitHub repository 123jsen/discord-farm-game, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/123jsen/discord-farm-game
- Repository: https://github.com/123jsen/discord-farm-game

## Overview

Dodo’s Weed Farm is a Discord farming game. Players use slash commands to manage crops and buildings, trade resources, and participate in server-wide prestige races; game state is persisted in MongoDB. The graph shows the documented command capabilities and the sampled service/model relationships. Some command handlers and services were not excerpted, so their internal call links are omitted rather than inferred.

Main entry points: [`src/services/prestige.service.js`](https://github.com/123jsen/discord-farm-game/blob/main/src/services/prestige.service.js) (Race and prestige), [`src/player.js`](https://github.com/123jsen/discord-farm-game/blob/main/src/player.js) (Player setup), [`src/models/player.model.js`](https://github.com/123jsen/discord-farm-game/blob/main/src/models/player.model.js) (Player records), [`src/services/build.service.js`](https://github.com/123jsen/discord-farm-game/blob/main/src/services/build.service.js) (Building management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Discord runtime"]
  node_player["Player setup<br/>[player.js]"]
  node_help_cmd["Help and listings<br/>[help.command.js]"]
  node_app["Bot entry and middleware<br/>[app.js]"]
end

subgraph group_gameplay["Farm gameplay"]
  node_farm_cmd["Farm commands<br/>[plant.command.js]"]
  node_farm_service["Crop lifecycle<br/>[farm.service.js]"]
  node_farm_view["Farm views<br/>[farm.command.js]"]
  node_build_cmd["Building commands<br/>[build.command.js]"]
  node_build_service["Building management<br/>[build.service.js]"]
  node_upgrade_cmd["Farm upgrades<br/>[upgrade.command.js]"]
  node_upgrade_service["Upgrade logic<br/>[upgrade.service.js]"]
end

subgraph group_economy["Economy and progression"]
  node_trade_cmd["Trade commands<br/>[give.command.js]"]
  node_trade_service["Resource trading<br/>[trade.service.js]"]
  node_contract_cmd["Contract commands"]
  node_prestige_cmd["Prestige commands"]
  node_prestige_service["Race and prestige"]
  node_achievement_service["Achievements"]
  node_minigame_cmd["Code breaker"]
  node_minigame_service["Minigame logic"]
  node_smoke_cmd["Smoke command<br/>[smoke.command.js]"]
  node_smoke_service["Smoke service<br/>[smoke.service.js]"]
end

subgraph group_storage["State and game data"]
  node_player_model[("Player records<br/>[player.model.js]")]
  node_server_model[("Server race state<br/>[server.model.js]")]
  node_contract_model[("Trade contracts<br/>[contract.model.js]")]
  node_crop_data["Crop catalog<br/>[export.js]"]
  node_building_data["Building catalog<br/>[export.js]"]
  node_upgrade_data["Upgrade catalog<br/>[export.js]"]
  node_data_loader["Catalog loader<br/>[export.base.js]"]
end

node_discord(("Discord users"))
node_mongo[("MongoDB")]

node_discord -->|"invoke commands"| node_app
node_app -->|"resolve players"| node_player
node_app -->|"check race expiry"| node_prestige_service
node_farm_cmd -->|"run crop actions"| node_farm_service
node_farm_cmd -->|"supply crop catalog"| node_crop_data
node_farm_service -->|"resolve race success"| node_prestige_service
node_farm_service -->|"unlock achievements"| node_achievement_service
node_farm_view -->|"read crop catalog"| node_crop_data
node_farm_view -->|"read building catalog"| node_building_data
node_build_cmd -->|"run building actions"| node_build_service
node_build_cmd -->|"supply building catalog"| node_building_data
node_build_service -->|"check affordability"| node_player
node_build_service -->|"unlock achievements"| node_achievement_service
node_build_service -->|"recalculate effects"| node_player_model
node_upgrade_cmd -->|"run upgrades"| node_upgrade_service
node_upgrade_cmd -->|"supply upgrade catalog"| node_upgrade_data
node_trade_cmd -->|"run resource transfers"| node_trade_service
node_contract_cmd -->|"manage contracts"| node_trade_service
node_contract_cmd -->|"provide contract model"| node_contract_model
node_trade_service -->|"unlock achievements"| node_achievement_service
node_prestige_cmd -.->|"manage prestige race"| node_prestige_service
node_prestige_service -->|"check costs"| node_player
node_prestige_service -->|"find race initiator"| node_player_model
node_prestige_service -->|"unlock prestige awards"| node_achievement_service
node_minigame_cmd -->|"run minigame"| node_minigame_service
node_smoke_cmd -.->|"run smoke feature"| node_smoke_service
node_help_cmd -->|"present game guide"| node_discord
node_player -->|"find or create"| node_player_model
node_player -->|"find or create"| node_server_model
node_player_model -->|"calculate building effects"| node_building_data
node_crop_data -->|"load JSON catalog"| node_data_loader
node_building_data -->|"load JSON catalog"| node_data_loader
node_upgrade_data -->|"load JSON catalog"| node_data_loader
node_player_model -.->|"persist player state"| node_mongo
node_server_model -.->|"persist server state"| node_mongo
node_contract_model -.->|"persist contracts"| node_mongo

click node_player "https://github.com/123jsen/discord-farm-game/blob/main/src/player.js"
click node_farm_cmd "https://github.com/123jsen/discord-farm-game/blob/main/src/commands/plant.command.js"
click node_farm_service "https://github.com/123jsen/discord-farm-game/blob/main/src/services/farm.service.js"
click node_farm_view "https://github.com/123jsen/discord-farm-game/blob/main/src/commands/farm.command.js"
click node_build_cmd "https://github.com/123jsen/discord-farm-game/blob/main/src/commands/build.command.js"
click node_build_service "https://github.com/123jsen/discord-farm-game/blob/main/src/services/build.service.js"
click node_upgrade_cmd "https://github.com/123jsen/discord-farm-game/blob/main/src/commands/upgrade.command.js"
click node_upgrade_service "https://github.com/123jsen/discord-farm-game/blob/main/src/services/upgrade.service.js"
click node_trade_cmd "https://github.com/123jsen/discord-farm-game/blob/main/src/commands/give.command.js"
click node_trade_service "https://github.com/123jsen/discord-farm-game/blob/main/src/services/trade.service.js"
click node_contract_cmd "https://github.com/123jsen/discord-farm-game/blob/main/src/commands/makecontract.command.js"
click node_prestige_cmd "https://github.com/123jsen/discord-farm-game/blob/main/src/commands/prestige.command.js"
click node_prestige_service "https://github.com/123jsen/discord-farm-game/blob/main/src/services/prestige.service.js"
click node_achievement_service "https://github.com/123jsen/discord-farm-game/blob/main/src/services/achievement.service.js"
click node_minigame_cmd "https://github.com/123jsen/discord-farm-game/blob/main/src/commands/minigame.command.js"
click node_minigame_service "https://github.com/123jsen/discord-farm-game/blob/main/src/services/minigame.service.js"
click node_smoke_cmd "https://github.com/123jsen/discord-farm-game/blob/main/src/commands/smoke.command.js"
click node_smoke_service "https://github.com/123jsen/discord-farm-game/blob/main/src/services/smoke.service.js"
click node_help_cmd "https://github.com/123jsen/discord-farm-game/blob/main/src/commands/help.command.js"
click node_app "https://github.com/123jsen/discord-farm-game/blob/main/src/app.js"
click node_player_model "https://github.com/123jsen/discord-farm-game/blob/main/src/models/player.model.js"
click node_server_model "https://github.com/123jsen/discord-farm-game/blob/main/src/models/server.model.js"
click node_contract_model "https://github.com/123jsen/discord-farm-game/blob/main/src/models/contract.model.js"
click node_crop_data "https://github.com/123jsen/discord-farm-game/blob/main/data/crops/export.js"
click node_building_data "https://github.com/123jsen/discord-farm-game/blob/main/data/buildings/export.js"
click node_upgrade_data "https://github.com/123jsen/discord-farm-game/blob/main/data/upgrades/export.js"
click node_data_loader "https://github.com/123jsen/discord-farm-game/blob/main/data/export.base.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_player,node_help_cmd,node_app,node_discord toneBlue
class node_farm_cmd,node_farm_service,node_farm_view,node_build_cmd,node_build_service,node_upgrade_cmd,node_upgrade_service,node_mongo toneAmber
class node_trade_cmd,node_trade_service,node_contract_cmd,node_prestige_cmd,node_prestige_service,node_achievement_service,node_minigame_cmd,node_minigame_service,node_smoke_cmd,node_smoke_service toneMint
class node_player_model,node_server_model,node_contract_model,node_crop_data,node_building_data,node_upgrade_data,node_data_loader toneRose
```

## Components

### Discord runtime

- [Player setup](https://github.com/123jsen/discord-farm-game/blob/main/src/player.js): `src/player.js`
- [Help and listings](https://github.com/123jsen/discord-farm-game/blob/main/src/commands/help.command.js): `src/commands/help.command.js`
- [Bot entry and middleware](https://github.com/123jsen/discord-farm-game/blob/main/src/app.js): `src/app.js`

### Farm gameplay

- [Farm commands](https://github.com/123jsen/discord-farm-game/blob/main/src/commands/plant.command.js): `src/commands/plant.command.js`
- [Crop lifecycle](https://github.com/123jsen/discord-farm-game/blob/main/src/services/farm.service.js): `src/services/farm.service.js`
- [Farm views](https://github.com/123jsen/discord-farm-game/blob/main/src/commands/farm.command.js): `src/commands/farm.command.js`
- [Building commands](https://github.com/123jsen/discord-farm-game/blob/main/src/commands/build.command.js): `src/commands/build.command.js`
- [Building management](https://github.com/123jsen/discord-farm-game/blob/main/src/services/build.service.js): `src/services/build.service.js`
- [Farm upgrades](https://github.com/123jsen/discord-farm-game/blob/main/src/commands/upgrade.command.js): `src/commands/upgrade.command.js`
- [Upgrade logic](https://github.com/123jsen/discord-farm-game/blob/main/src/services/upgrade.service.js): `src/services/upgrade.service.js`

### Economy and progression

- [Trade commands](https://github.com/123jsen/discord-farm-game/blob/main/src/commands/give.command.js): `src/commands/give.command.js`
- [Resource trading](https://github.com/123jsen/discord-farm-game/blob/main/src/services/trade.service.js): `src/services/trade.service.js`
- [Contract commands](https://github.com/123jsen/discord-farm-game/blob/main/src/commands/makecontract.command.js): `src/commands/makecontract.command.js`
- [Prestige commands](https://github.com/123jsen/discord-farm-game/blob/main/src/commands/prestige.command.js): `src/commands/prestige.command.js`
- [Race and prestige](https://github.com/123jsen/discord-farm-game/blob/main/src/services/prestige.service.js): `src/services/prestige.service.js`
- [Achievements](https://github.com/123jsen/discord-farm-game/blob/main/src/services/achievement.service.js): `src/services/achievement.service.js`
- [Code breaker](https://github.com/123jsen/discord-farm-game/blob/main/src/commands/minigame.command.js): `src/commands/minigame.command.js`
- [Minigame logic](https://github.com/123jsen/discord-farm-game/blob/main/src/services/minigame.service.js): `src/services/minigame.service.js`
- [Smoke command](https://github.com/123jsen/discord-farm-game/blob/main/src/commands/smoke.command.js): `src/commands/smoke.command.js`
- [Smoke service](https://github.com/123jsen/discord-farm-game/blob/main/src/services/smoke.service.js): `src/services/smoke.service.js`

### State and game data

- [Player records](https://github.com/123jsen/discord-farm-game/blob/main/src/models/player.model.js): `src/models/player.model.js`
- [Server race state](https://github.com/123jsen/discord-farm-game/blob/main/src/models/server.model.js): `src/models/server.model.js`
- [Trade contracts](https://github.com/123jsen/discord-farm-game/blob/main/src/models/contract.model.js): `src/models/contract.model.js`
- [Crop catalog](https://github.com/123jsen/discord-farm-game/blob/main/data/crops/export.js): `data/crops/export.js`
- [Building catalog](https://github.com/123jsen/discord-farm-game/blob/main/data/buildings/export.js): `data/buildings/export.js`
- [Upgrade catalog](https://github.com/123jsen/discord-farm-game/blob/main/data/upgrades/export.js): `data/upgrades/export.js`
- [Catalog loader](https://github.com/123jsen/discord-farm-game/blob/main/data/export.base.js): `data/export.base.js`

### Other components

- **Discord users**
- **MongoDB**

## Connections

- Discord users → Bot entry and middleware: invoke commands (evidence: `README.md`)
- Bot entry and middleware → Player setup: resolve players (evidence: `src/app.js`)
- Bot entry and middleware → Race and prestige: check race expiry (evidence: `src/app.js`)
- Farm commands → Crop lifecycle: run crop actions (evidence: `src/commands/plant.command.js`)
- Farm commands → Crop catalog: supply crop catalog (evidence: `src/commands/plant.command.js`)
- Crop lifecycle → Race and prestige: resolve race success (evidence: `src/services/farm.service.js`)
- Crop lifecycle → Achievements: unlock achievements (evidence: `src/services/farm.service.js`)
- Farm views → Crop catalog: read crop catalog (evidence: `src/commands/farm.command.js`)
- Farm views → Building catalog: read building catalog (evidence: `src/commands/farm.command.js`)
- Building commands → Building management: run building actions (evidence: `src/commands/build.command.js`)
- Building commands → Building catalog: supply building catalog (evidence: `src/commands/build.command.js`)
- Building management → Player setup: check affordability (evidence: `src/services/build.service.js`)
- Building management → Achievements: unlock achievements (evidence: `src/services/build.service.js`)
- Building management → Player records: recalculate effects (evidence: `src/services/build.service.js`)
- Farm upgrades → Upgrade logic: run upgrades (evidence: `src/commands/upgrade.command.js`)
- Farm upgrades → Upgrade catalog: supply upgrade catalog (evidence: `src/commands/upgrade.command.js`)
- Trade commands → Resource trading: run resource transfers (evidence: `src/commands/give.command.js`)
- Contract commands → Resource trading: manage contracts (evidence: `src/commands/makecontract.command.js`)
- Contract commands → Trade contracts: provide contract model (evidence: `src/commands/makecontract.command.js`)
- Resource trading → Achievements: unlock achievements (evidence: `src/services/trade.service.js`)
- Prestige commands → Race and prestige: manage prestige race
- Race and prestige → Player setup: check costs (evidence: `src/services/prestige.service.js`)
- Race and prestige → Player records: find race initiator (evidence: `src/services/prestige.service.js`)
- Race and prestige → Achievements: unlock prestige awards (evidence: `src/services/prestige.service.js`)
- Code breaker → Minigame logic: run minigame (evidence: `src/commands/minigame.command.js`)
- Smoke command → Smoke service: run smoke feature
- Help and listings → Discord users: present game guide (evidence: `README.md`)
- Player setup → Player records: find or create (evidence: `src/player.js`)
- Player setup → Server race state: find or create (evidence: `src/player.js`)
- Player records → Building catalog: calculate building effects (evidence: `src/models/player.model.js`)
- Crop catalog → Catalog loader: load JSON catalog (evidence: `data/crops/export.js`)
- Building catalog → Catalog loader: load JSON catalog (evidence: `data/buildings/export.js`)
- Upgrade catalog → Catalog loader: load JSON catalog (evidence: `data/upgrades/export.js`)
- Player records → MongoDB: persist player state
- Server race state → MongoDB: persist server state
- Trade contracts → MongoDB: persist contracts
