Stats Tracker 📊

A Python script that tracks Minecraft server player stats and posts them to Discord via webhook.

Setup

1. Install Dependencies

pip install -r requirements.txt

2. Configure Environment Variables

Copy the example file and fill in your credentials:

cp .env.example .env

Edit .env and add:

  • DISCORD_WEBHOOK_URL: Your Discord webhook URL
  • API_KEY: Your DonutSMP API key (get it with /api in-game)

3. Add Players to Track

Edit players.json and add the usernames you want to track:

{
  "players": ["player1", "player2", "player3"]
}

Running

python main.py

The script will:

  • Fetch stats every 2 minutes
  • Create a new Discord message on first run
  • Edit the same message on subsequent updates (no spam!)
  • Only update the message if stats actually change (saves API calls)
  • Display stats grouped by type across all players
  • Detect who is currently online using the lookup API
  • Show online location state icons per player
  • Show: Money, Playtime, Kills, Deaths, Mobs Killed, Blocks Placed/Broken, Shards

How It Works

  1. First Run: Posts a new message with all player stats grouped by type
  2. Subsequent Runs:
    • Compares current stats with cached stats
    • Only edits the Discord message if something changed
    • Skips updates if stats are unchanged (saves Discord API calls)
  3. No Message Found: If message_id.txt is deleted or the Discord message is removed, it will create a new one
  4. Error Handling: If a player doesn't exist or API fails, it shows "" for that player

Files Created

  • message_id.txt - Stores the Discord message ID for edits
  • stats_cache.json - Caches previous stats to detect changes

Notes

  • The message ID is automatically saved to prevent creating duplicate messages
  • Stats are cached to avoid unnecessary Discord updates
  • If you want to reset and create a new message, delete message_id.txt and stats_cache.json
  • The script handles network errors gracefully and will retry every 2 minutes
  • Press Ctrl+C to stop the script

Online Detection Icons

The tracker uses https://api.donutsmp.net/v1/lookup/<username> to detect online state and location:

  • :sleeping: = Limbo (AFK)
  • :yellow_circle: = Spawn
  • :green_circle: = Overworld (also used for Nether and End)
  • :black_circle: = Offline
Description
No description provided
Readme 46 KiB
Languages
Python 100%