#!/usr/bin/env bash
#
# VoteRank player reporter — shell version.
#
# Reports your server's live player count to VoteRank every 5 minutes, so your
# listing shows a real number instead of nothing. Works for any server that can
# tell you its player count from a command, a log file or a database query.
#
#   1. Get your API key: your listing -> API keys -> Create key
#   2. Set VOTERANK_KEY below (or export it in your environment)
#   3. Replace count_players() with however your server counts players
#   4. Run it:  ./voterank-players.sh
#
# Keep the key secret. Anyone who has it can report numbers as your server.

set -euo pipefail

VOTERANK_KEY="${VOTERANK_KEY:-tl_your_key_here}"
VOTERANK_API="${VOTERANK_API:-https://api.voterank.net}"
INTERVAL=300

# ---------------------------------------------------------------------------
# Replace this with your own count. It must print a single number.
#
# Some examples:
#
#   MySQL:   mysql -N -u user -ppass -e "select count(*) from players where online=1" mydb
#   Log tail: grep -c "logged in" /path/to/latest.log
#   RCON:    mcrcon -H 127.0.0.1 -P 25575 -p pass "list" | grep -oE '[0-9]+' | head -1
#   HTTP:    curl -s http://127.0.0.1:8080/status | jq .online
# ---------------------------------------------------------------------------
count_players() {
  echo 0
}

report() {
  local players
  players="$(count_players | tr -dc '0-9')"

  if [ -z "$players" ]; then
    echo "[voterank] could not read a player count — skipping this cycle" >&2
    return
  fi

  local response
  response="$(curl -s -m 10 -X POST "$VOTERANK_API/api/v1/players" \
    -H "authorization: Bearer $VOTERANK_KEY" \
    -H "content-type: application/json" \
    -d "{\"players\": $players}" || true)"

  case "$response" in
    *'"success":true'*) echo "[voterank] reported $players players" ;;
    "")                 echo "[voterank] no response from VoteRank" >&2 ;;
    *)                  echo "[voterank] $response" >&2 ;;
  esac
}

echo "[voterank] reporting every ${INTERVAL}s. Ctrl-C to stop."
while true; do
  report
  sleep "$INTERVAL"
done
