Documentation développeur
Intégrez le système de vote de Liste-Serveurs.fr dans votre serveur Minecraft.
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.
Démarrage rapide
-
Ajoutez votre serveur sur Liste-Serveurs.fr
et notez le slug qui apparaît dans l'URL de votre fiche (ex.
mon-serveur-survie). -
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.
- Configurez votre plugin ou votre application en suivant les exemples ci-dessous.
- Attribuez vos récompenses lorsqu'un vote est détecté.
Fonctionnement des votes
- Un joueur ouvre la page de vote de votre serveur sur Liste-Serveurs.fr et saisit son pseudo Minecraft.
- Le vote est validé et enregistré. Le classement de votre serveur est mis à jour immédiatement.
-
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.phppour 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
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
{
"ok": true,
"hasVoted": true,
"username": "Notch",
"votedAt": "2026-07-16T14:30:00+00:00"
}
{
"ok": true,
"hasVoted": false,
"username": "Notch"
}
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
{ "ok": false, "message": "Missing required param: server (server slug)." }
{ "ok": false, "message": "Invalid username format. Must be 3–16 characters: letters, digits, underscore." }
{ "ok": false, "message": "Server not found: mon-serveur-survie" }
{ "ok": false, "message": "Only GET is supported." }
{ "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
curl "https://liste-serveurs.fr/api_vote_check.php?server=mon-serveur-survie&username=Notch"
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
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
| Champ | Valeur |
|---|---|
username | Pseudo Minecraft saisi par le joueur |
serviceName | "Liste-Serveurs.fr" |
address | Adresse IP du joueur |
timestamp | Horodatage 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.
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
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
hasVoted: false et le joueur peut voter à nouveau.
La date exacte du vote est disponible dans le champ votedAt.
Notch, notch et NOTCH retournent le même résultat.
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.
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.