Documentation développeur

Intégrez le système de vote de Liste-Serveurs.fr dans votre serveur Minecraft.

Version : 1.0 Dernière mise à jour : 16/07/2026 Format : application/json; charset=utf-8

Introduction

Liste-Serveurs.fr est un annuaire Minecraft où les joueurs votent pour soutenir leurs serveurs préférés. Chaque vote augmente le classement d'un serveur et peut déclencher des récompenses en jeu.

En tant que propriétaire ou développeur d'un serveur, vous disposez de deux méthodes d'intégration — choisissez celle qui correspond le mieux à votre infrastructure :

  • Votifier — votre serveur Minecraft est notifié en temps réel dès qu'un joueur vote. Aucun polling nécessaire.
  • API de vérification — un endpoint HTTP public que vous interrogez pour savoir si un joueur a voté. Aucun plugin requis.
Joueur │ ▼ Liste-Serveurs.fr (vote enregistré) │ │ │ │ ┌─────▼─────┐ └──────────────────────┐ │ Votifier │ │ │ (temps │ GET https://liste-serveurs.fr/api_vote_check.php │ réel) │ │ └─────┬─────┘ ▼ │ Votre plugin ou script ▼ (interroge à la demande) Serveur Minecraft (VotingPlugin, etc.)
ℹ️ Ces deux méthodes sont indépendantes. Choisissez une seule selon votre infrastructure — inutile d'en utiliser deux simultanément.

Démarrage rapide

  1. Ajoutez votre serveur sur Liste-Serveurs.fr et notez le slug qui apparaît dans l'URL de votre fiche (ex. mon-serveur-survie).
  2. Choisissez votre méthode d'intégration :
    • Votifier — pour une notification temps réel via un plugin Minecraft.
    • API de vérification — pour un contrôle depuis votre propre code, sans plugin.
  3. Configurez votre plugin ou votre application en suivant les exemples ci-dessous.
  4. Attribuez vos récompenses lorsqu'un vote est détecté.

Fonctionnement des votes

  1. Un joueur ouvre la page de vote de votre serveur sur Liste-Serveurs.fr et saisit son pseudo Minecraft.
  2. Le vote est validé et enregistré. Le classement de votre serveur est mis à jour immédiatement.
  3. Selon votre méthode d'intégration :
    • Avec Votifier — la plateforme ouvre une connexion TCP vers le listener Votifier de votre serveur et envoie un paquet signé. Votre plugin le reçoit instantanément.
    • Avec l'API — votre code interroge GET https://liste-serveurs.fr/api_vote_check.php pour les joueurs connectés et attribue les récompenses lorsqu'un vote est détecté.

Un vote reste actif pendant 3 heures. Le joueur peut voter à nouveau une fois ce délai écoulé.


Référence API

GET https://liste-serveurs.fr/api_vote_check.php Public

Vérifie si un joueur a voté pour un serveur au cours des 3 dernières heures.

Authentification : aucune  ·  CORS : Access-Control-Allow-Origin: *

Paramètres

Paramètre Type Description
server string Obligatoire Slug de votre serveur, tel qu'il apparaît dans l'URL de la fiche (ex. mon-serveur-survie)
username string Obligatoire Pseudo Minecraft du joueur — 3 à 16 caractères, lettres ASCII (A–Z, a–z), chiffres et underscore uniquement

Réponses

200 — Le joueur a voté
JSON
{
  "ok": true,
  "hasVoted": true,
  "username": "Notch",
  "votedAt": "2026-07-16T14:30:00+00:00"
}
200 — Aucun vote récent
JSON
{
  "ok": true,
  "hasVoted": false,
  "username": "Notch"
}
⚠️ Un code 200 indique que la requête a été traitée avec succès — pas nécessairement qu'un vote existe. Vérifiez toujours le champ hasVoted.

Champs de la réponse

Champ Type Description
ok boolean true quand la requête s'est terminée sans erreur
hasVoted boolean Indique si le joueur a voté dans les 3 dernières heures
username string Le pseudo tel qu'il a été transmis dans la requête
votedAt string Horodatage du vote au format ISO 8601 (UTC) — présent uniquement si hasVoted est true

Réponses d'erreur

400 — Paramètre manquant
JSON
{ "ok": false, "message": "Missing required param: server (server slug)." }
400 — Format de pseudo invalide
JSON
{ "ok": false, "message": "Invalid username format. Must be 3–16 characters: letters, digits, underscore." }
404 — Serveur introuvable
JSON
{ "ok": false, "message": "Server not found: mon-serveur-survie" }
405 — Méthode non autorisée
JSON
{ "ok": false, "message": "Only GET is supported." }
500 — Erreur interne
JSON
{ "ok": false, "message": "Internal server error." }

Codes HTTP

Code Signification
200 Requête traitée — vérifiez hasVoted pour le résultat
400 Paramètre manquant ou format invalide
404 Slug de serveur introuvable ou serveur supprimé
405 Méthode HTTP autre que GET
500 Erreur côté plateforme

Exemples de code

cURL

bash
curl "https://liste-serveurs.fr/api_vote_check.php?server=mon-serveur-survie&username=Notch"

JavaScript

javascript
async function verifierVote(serverSlug, username) {
  const url = new URL('https://liste-serveurs.fr/api_vote_check.php');
  url.searchParams.set('server', serverSlug);
  url.searchParams.set('username', username);

  const response = await fetch(url);
  const data = await response.json();

  if (!data.ok) {
    throw new Error(data.message);
  }

  return data; // { hasVoted: boolean, username: string, votedAt?: string }
}

// Utilisation
const result = await verifierVote('mon-serveur-survie', 'Notch');

if (result.hasVoted) {
  console.log(`${result.username} a voté le ${result.votedAt}`);
} else {
  console.log(`${result.username} n'a pas encore voté.`);
}

Java — Plugin Paper / Spigot

java
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.concurrent.CompletableFuture;

public class VoteChecker {

    private static final String API_URL =
        "https://liste-serveurs.fr/api_vote_check.php";

    private final HttpClient client = HttpClient.newBuilder()
        .connectTimeout(Duration.ofSeconds(5))
        .build();

    /**
     * Retourne true si le joueur a voté pour ce serveur
     * dans les 3 dernières heures. Retourne false en cas d'erreur (fail-safe).
     */
    public CompletableFuture<Boolean> aVote(String username, String serverSlug) {
        return CompletableFuture.supplyAsync(() -> {
            try {
                String u = URLEncoder.encode(username,   StandardCharsets.UTF_8);
                String s = URLEncoder.encode(serverSlug, StandardCharsets.UTF_8);

                HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create(API_URL + "?server=" + s + "&username=" + u))
                    .GET()
                    .timeout(Duration.ofSeconds(5))
                    .build();

                HttpResponse<String> response =
                    client.send(request, HttpResponse.BodyHandlers.ofString());

                // Désérialiser avec Gson, Jackson, ou toute autre bibliothèque JSON.
                // Exemple avec Gson :
                //   JsonObject json = JsonParser.parseString(response.body()).getAsJsonObject();
                //   return json.get("ok").getAsBoolean()
                //       && json.get("hasVoted").getAsBoolean();

                return response.statusCode() == 200
                    && response.body().contains("\"hasVoted\":true");

            } catch (Exception e) {
                getLogger().warning("[VoteChecker] Erreur : " + e.getMessage());
                return false; // fail-safe — ne jamais bloquer le joueur
            }
        });
    }
}

// --- Utilisation dans un CommandExecutor ---
voteChecker.aVote(player.getName(), "mon-serveur-survie")
    .thenAccept(vote -> {
        Bukkit.getScheduler().runTask(plugin, () -> {
            if (vote) {
                attribuerRecompense(player);
                player.sendMessage("§aMerci pour votre vote ! Récompense accordée.");
            } else {
                player.sendMessage("§cAucun vote trouvé. Votez sur liste-serveurs.fr et réessayez.");
            }
        });
    });

Méthodes d'intégration

Choisissez une seule méthode selon votre configuration.

Option A — Votifier (notification temps réel)

Avec Votifier, Liste-Serveurs.fr se connecte directement au listener de votre serveur Minecraft et envoie un paquet signé dès qu'un joueur vote. Votre plugin le traite immédiatement, sans polling ni délai.

Prérequis

  • Un plugin compatible installé sur votre serveur : NuVotifier (recommandé), VotingPlugin, SuperbVote, VoteParty, ou tout plugin implémentant le protocole Votifier.
  • Votifier activé dans votre fiche serveur sur Liste-Serveurs.fr, avec l'hôte, le port et les identifiants configurés.

Protocoles supportés

Protocole Authentification Recommandation
NuVotifier v2 Token HMAC-SHA256 ✅ Recommandé
Votifier v1 Clé publique RSA Supporté (legacy)
Auto Tente v2 en premier, puis v1 Lorsque les deux sont configurés

Données reçues par votre plugin

ChampValeur
usernamePseudo Minecraft saisi par le joueur
serviceName"Liste-Serveurs.fr"
addressAdresse IP du joueur
timestampHorodatage du vote

Option B — API de vérification (sans plugin)

Si vous ne souhaitez pas utiliser Votifier, ou si votre infrastructure ne le permet pas, interrogez l'API de vérification depuis votre propre code pour les joueurs connectés. Lorsque hasVoted retourne true, attribuez la récompense.

💡 Conservez localement les votes déjà récompensés (par exemple via le champ votedAt comme clé unique) afin d'éviter d'attribuer deux fois la même récompense dans la fenêtre de 3 heures.

Exemple — Node.js

javascript
const SERVER_SLUG = 'mon-serveur-survie';
const votesRecompenses = new Set(); // évite les doublons

async function verifierEtRecompenser(joueursConnectes) {
  for (const pseudo of joueursConnectes) {
    try {
      const url = 'https://liste-serveurs.fr/api_vote_check.php'
                + '?server=' + encodeURIComponent(SERVER_SLUG)
                + '&username=' + encodeURIComponent(pseudo);

      const res  = await fetch(url);
      const data = await res.json();

      if (data.ok && data.hasVoted) {
        // Clé unique : pseudo + horodatage du vote
        const cle = `${pseudo}:${data.votedAt}`;
        if (!votesRecompenses.has(cle)) {
          votesRecompenses.add(cle);
          await attribuerRecompense(pseudo);
        }
      }
    } catch (err) {
      console.error(`[Vote] Erreur pour ${pseudo} :`, err.message);
    }
  }
}

FAQ

Le plugin Votifier est-il obligatoire ?
Non. Votifier est entièrement optionnel. Sans lui, les votes sont quand même comptabilisés sur la plateforme et le classement de votre serveur est mis à jour. Vous pouvez utiliser l'API de vérification à la place.
Combien de temps un vote reste-t-il valide ?
Un vote est actif pendant 3 heures. Passé ce délai, l'API retourne hasVoted: false et le joueur peut voter à nouveau. La date exacte du vote est disponible dans le champ votedAt.
La vérification est-elle sensible à la casse ?
Non. La comparaison du pseudo est insensible à la casse. Notch, notch et NOTCH retournent le même résultat.
Puis-je appeler l'API depuis mon propre serveur ou script ?
Oui. GET https://liste-serveurs.fr/api_vote_check.php est public, sans authentification, et expose l'en-tête Access-Control-Allow-Origin: *. Il peut être appelé depuis n'importe quel backend ou navigateur.
Que se passe-t-il si Votifier échoue ?
Le vote reste comptabilisé sur la plateforme. Un échec de notification Votifier n'annule pas le vote. Si la livraison en temps réel est critique pour vous, vous pouvez interroger l'API de vérification en complément.
Pourquoi l'API retourne-t-elle 200 même quand le joueur n'a pas voté ?
Un code 200 indique que la requête a été traitée correctement — pas que le vote existe. Les codes d'erreur (4xx, 5xx) sont réservés aux problèmes de requête ou de plateforme. Vérifiez toujours le champ hasVoted.