Duels, SMP e Pillars live · Survival in arrivo Discord · Store · play.dragonmc.it
Documentazione

Collega il plugin e il bot

Un’unica API REST collega tutto: plugin Minecraft, bot Discord e sito. Ti basta inviare gli eventi giusti e il sito si aggiorna da solo: online, modalità, elo, classifiche, forum e ticket.

Base URLhttp://site.dragonmc.it/api/v1/
AutenticazioneX-API-Key
FormatoJSON
🔑
La tua API key è in Admin → Integrazioni. Va inviata nell’header X-API-Key (oppure come ?key=). Non metterla mai nel client Minecraft.

Endpoint

Tutti gli endpoint di scrittura richiedono la chiave. Quelli pubblici sono marcati come tali.

MetodoEndpointDescrizioneAuth
GET/api/v1/statusStato server e modalità (usato dal sito)pubblico
POST/api/v1/heartbeatOnline per modalità + stato (ogni 30-60s)key
POST/api/v1/duel/resultRegistra un duello e aggiorna l’elokey
POST/api/v1/elo/syncSync massiva della classificakey
GET/api/v1/leaderboard?mode=modernClassifica pubblicapubblico
GET/api/v1/player?name=NickProfilo elo di un giocatorepubblico
POST/api/v1/discord/linkCollega Discord con codice (/link)key
GET/api/v1/discord/outboxIl bot legge gli eventi da pubblicarekey
POST/api/v1/discord/inboundMessaggi da Discord → forum/ticketkey
POST/api/v1/discord/mapRegistra l'ID Discord di thread/canale creatokey
POST/api/v1/pillars/resultRisultato partita PillarsDuels (FFA)key
POST/api/v1/modes/syncRegistra tutte le modalità create sul serverkey
POST/api/v1/ticket/statusCambia stato ticket da Discordkey
POST/api/v1/ticket/deleteElimina definitivamente un ticketkey
POST/api/v1/ticket/createApre un ticket da Discord (/ticket)key
GET/api/v1/healthPing senza autenticazionepubblico

Esempi

Heartbeat

POST /api/v1/heartbeat

curl -X POST "http://site.dragonmc.it/api/v1/heartbeat" \
  -H "X-API-Key: a00e6140…" \
  -H "Content-Type: application/json" \
  -d '{
    "modes": [
      {"slug":"modern","online":42,"status":"live"},
      {"slug":"smp","online":118,"status":"live"},
      {"slug":"pillars","online":16,"status":"live"}
    ]
  }'
Duello

POST /api/v1/duel/result

curl -X POST "http://site.dragonmc.it/api/v1/duel/result" \
  -H "X-API-Key: a00e6140…" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "modern",   // modern | old | pillars
    "winner": "Draco",
    "loser": "Nightfall",
    "winner_elo": 1284,
    "loser_elo": 1240,
    "elo_delta": 18,
    "arena": "Colosseo",
    "duration": 74
  }'
Sync classifica

POST /api/v1/elo/sync

{
  "mode": "old",
  "players": [
    {"name":"Draco","uuid":"…","elo":1420,"wins":31,"losses":9,"streak":4},
    {"name":"Vex","uuid":"…","elo":1310,"wins":22,"losses":14,"streak":-2}
  ]
}
Bot · outbox

GET /api/v1/discord/outbox

{
  "ok": true,
  "events": [
    {
      "id": 12,
      "target": "forum_thread",
      "ref_id": 4,
      "channel_id": "123…",
      "title": "Cerco team",
      "body": "Testo del post…",
      "color": 15118656
    }
  ]
}

Dopo la pubblicazione il bot conferma con
GET /api/v1/discord/outbox?ack=1&ids=12

Flusso Discord ↔ sito

1. Sito → Discord

Quando un utente apre un ticket o un thread, il sito accoda un evento in discord_outbox. Il bot lo legge e crea canale/thread, poi registra l’ID con POST /api/v1/discord/map.

2. Discord → sito

Ogni messaggio nel thread/canale viene inoltrato a POST /api/v1/discord/inbound con kind, author, content e thread_id o ticket_code.

3. Collegamento account

L’utente genera un codice sul sito e scrive /link CODICE. Il bot chiama POST /api/v1/discord/link con discord_id: il sito collega i due account.

Setup rapido

  1. Apri Admin → Integrazioni, copia l’API key.
  2. Nel plugin (Paper 1.21.x) imposta api-url: http://site.dragonmc.it/api/v1/ e api-key, poi invia heartbeat ogni 30s e il risultato di ogni duello.
  3. Per l’elo, invia solo winner, loser e i nuovi elo calcolati dal tuo sistema (o lascia calcolare al sito con elo_delta omesso).
  4. Nel bot Discord (Node/Python) crea un loop che legge /discord/outbox e un listener messageCreate che chiama /discord/inbound.
  5. Configura OAuth2 in includes/config.php per il collegamento automatico (redirect: http://site.dragonmc.it/discord-callback.php).

Serve una mano?

Il ponte è pronto: se il tuo plugin usa un formato diverso, apri un ticket e adattiamo l’endpoint.