Vote-Belohnungen

Vote-Prüfung

So belohnst du Spieler, nachdem sie erfolgreich für deinen Eintrag auf JoinGameServers gestimmt haben.

Einrichtung: Dashboard → Server bearbeiten → Vote-Belohnungen (und Minecraft-Details für Votifier).

01

So funktioniert’s

  1. Spieler öffnet deinen Vote-Link, ideal mit ?p=USERNAME.

  2. Die Stimme wird abgeschickt. 24-Stunden-Cooldown pro IP (und Konto). Bei konfigurierten Belohnungen ist der Benutzername Pflicht.

  3. Wir benachrichtigen dein System: HTTP-GET auf die Postback-URL und/oder ein Votifier-Paket — mit demselben Parameter und der Wähler-IP.

  4. Du vergibst die Belohnung. Fehlschläge bei dir werden hier geloggt, die Stimme bleibt.

Methode wählen

HTTP-Postback

Am besten für Websites, Launcher und Nicht-Minecraft-Spiele. Für Minecraft optional zusätzlich zu Votifier.

  • Funktioniert für jedes Spiel
  • Punkte, Cooldowns und Logs bestimmst du
  • Braucht einen öffentlichen HTTPS-Endpunkt
Postback (PHP) →
Ideal für Minecraft

Minecraft-Votifier

Bevorzugt für Minecraft. Für Kisten, Keys und Listener-Plugins. Wir verbinden uns per TCP mit deinem Votifier-Port.

  • Nur Minecraft-Einträge
  • Classic-RSA oder NuVotifier-v2-Token
  • Offener Port + Firewall-Allowlist
Minecraft-Votifier →

Für Minecraft zuerst Votifier. Postback ist optional oder zusätzlich. Beide Kanäle laufen unabhängig.

Schnellstart

  1. Einloggen und Dashboard öffnen.
  2. Freigegebenen Server bearbeiten.
  3. Postback-URL setzen und/oder Votifier unter Minecraft-Details aktivieren.
  4. Incentive-Link aus dem Formular kopieren (endet mit ?p=USERNAME).
  5. Link auf Website oder Discord setzen; USERNAME pro Spieler ersetzen.
  6. Testvote abgeben und Belohnung prüfen.
02

Postback (PHP)

Nach einer gültigen Stimme rufen wir deine URL mit Parameter und IP auf.

Die öffentliche Ausgangs-IP dieser Liste in Firewall und Postback-Script freigeben. Andere Quellen ablehnen. HTTPS bevorzugen.

1. Postback-URL setzen

Dashboard → Server bearbeiten → Vote-Belohnungen → Postback-URL.

https://YOURDOMAIN/postback.php
  • Der Dateiname ist beliebig.
  • Nur öffentliche http/https-URLs. Localhost, private IPs und URLs mit Zugangsdaten werden abgelehnt.
  • Wenige Redirects, Timeout nach wenigen Sekunden.

2. Incentive-Links bauen

Parameter anhängen, damit der Spieler auf der Vote-Seite erkannt wird.

/GAME/server/SLUG/vote?p=PARAMETER
Teil Regeln
PARAMETER / p_resp Nur Buchstaben, Zahlen, _, - · max. 32 Zeichen
ip IPv4 oder IPv6 des Wählers, wie diese Liste sie sieht
Vorausfüllen ?p= oder ?username=

3. Was wir nach einer Stimme aufrufen

Nur bei Erfolg. Ohne gültige Stimme keine Anfrage.

https://YOURDOMAIN/postback.php?p_resp=PARAMETER&ip=USERIP
Incentive-Link Unser Callback
/minecraft-server/server/your-server-slug/vote?p=1234 …/postback.php?p_resp=1234&ip=123.123.123.123
/minecraft-server/server/your-server-slug/vote?p=Razor …/postback.php?p_resp=Razor&ip=123.123.123.123

Wenn wir p_resp=Razor senden, hat Spieler Razor abgestimmt. ip ist die Adresse, die diese Liste gesehen hat.

Was dein Script tun sollte

  • Prüfen, dass die Anfrage von der Listen-IP kommt.
  • p_resp und ip säubern.
  • Konto / Charakter in der Datenbank prüfen.
  • Eigenen Cooldown anwenden, falls strenger als 24 Stunden.
  • Punkte oder Items vergeben, loggen, HTTP 200 zurückgeben.

postback.php Beispiel

Auf deiner Reward-Seite hosten. VOTE_LIST_IP vor dem Livegang setzen.

<?php
/**
 * Example vote postback receiver for YOUR game website / CMS.
 *
 * Configure this URL on your listing under Dashboard → Edit server → Vote Rewards.
 * This list will call it ONLY after a successful vote:
 *
 *   https://yoursite.com/postback.php?p_resp=PARAMETER&ip=USERIP
 *
 * PARAMETER is the username / account id the player entered on the vote form
 * (or the value from ?p= on your incentive voting link).
 *
 * Docs: /voting-check
 */

define('DEBUG', 0); // set to 1 to write _postback.log
define('LOG_FILE', __DIR__ . '/_postback.log');

/**
 * Only accept callbacks from the vote list's public IP.
 * Leave empty to skip the allowlist (not recommended in production).
 *
 * Example: define('VOTE_LIST_IP', '203.0.113.10');
 */
define('VOTE_LIST_IP', '');

$ipRequest = $_SERVER['HTTP_CF_CONNECTING_IP']
    ?? (isset($_SERVER['HTTP_X_FORWARDED_FOR'])
        ? trim(explode(',', (string) $_SERVER['HTTP_X_FORWARDED_FOR'])[0])
        : null)
    ?? $_SERVER['REMOTE_ADDR']
    ?? '';
$ipRequest = trim((string) $ipRequest);

if (VOTE_LIST_IP !== '' && $ipRequest !== VOTE_LIST_IP) {
    if (DEBUG) {
        error_log(date('[Y-m-d H:i] ') . "[Invalid] Request from {$ipRequest}" . PHP_EOL, 3, LOG_FILE);
    }
    http_response_code(403);
    exit('Forbidden');
}

if (DEBUG) {
    error_log(date('[Y-m-d H:i] ') . "[OK] Valid callback: {$ipRequest}" . PHP_EOL, 3, LOG_FILE);
}

// Clean parameters from the vote list (letters, numbers, underscore, hyphen).
$p = preg_replace('/[^A-Za-z0-9_\-]+/', '', (string) ($_GET['p_resp'] ?? '')) ?? '';
$userIp = preg_replace('/[^0-9a-fA-F:\.]+/', '', (string) ($_GET['ip'] ?? '')) ?? '';

if ($p === '') {
    http_response_code(400);
    exit('Missing p_resp');
}

if (DEBUG) {
    error_log(date('[Y-m-d H:i] ') . "[GET] Parameters [p_resp]={$p} [ip]={$userIp}" . PHP_EOL, 3, LOG_FILE);
}

// ---------------------------------------------------------------------------
// Connect to your database, verify account $p exists, enforce your own
// cooldown if needed, then grant vote points / items to $p (voted from $userIp).
// We send p_resp + ip ONLY when that player successfully voted on the list.
// ---------------------------------------------------------------------------

http_response_code(200);
echo 'OK';
03

Minecraft-Votifier

Wir können die Stimme direkt in deinen Minecraft-Server schieben.

Firewall: eingehendes TCP von der Listen-IP auf den Votifier-Port (Standard 8192) erlauben.

  1. Spieler gibt den Minecraft-Namen auf der Vote-Seite ein (oder kommt via ?p=Steve).

  2. Stimme ist auf dieser Liste gültig.

  3. Wir verbinden uns mit Host/Port und senden das Paket.

  4. Dein Listener vergibt Kisten, Keys, Geld usw.

Votifier unter Minecraft-Details aktivieren, v2 oder Classic wählen, Host, Port und Token oder Public Key eintragen.

NuVotifier (classic RSA und v2) oder classic Votifier installieren, plus einen Listener (GAListener, SuperbVote oder eigenen).

Classic / v1: gesamte public.key einfügen. Host und Port stehen in der config.yml. debug: true nur beim Einrichten.

host: YOUR_PUBLIC_IP
port: 8192
debug: true

Pakete identifizieren diese Liste als: JoinGameServers

04

NuVotifier v2

v2 ersetzt RSA durch ein Shared Token und eine Challenge. Token auf den Service-Namen mappen oder den Default-Token nutzen.

tokens:
  default: REPLACE_WITH_DEFAULT_TOKEN
  "JoinGameServers": REPLACE_WITH_LIST_TOKEN

Format: TCP → Greeting VOTIFIER 2 <challenge> → JSON-Payload → Base64(HMAC-SHA256) → Magic 0x733A + Länge + JSON. Erwartet {"status":"ok"}.

Fehlersymptom Wahrscheinliche Ursache
Kein NuVotifier-v2-Server Greeting ohne Challenge — Classic nutzen oder NuVotifier mit v2 aktualisieren.
Ungültige Signatur / unbekannter Dienst Falsches Token oder Service-Name nicht gemappt.
Verbindung fehlgeschlagen / Zeitüberschreitung Falscher Host/Port, Votifier offline oder Firewall.
Keine Antwort Proxy/Plugin; NuVotifier-Debug aktivieren.
05

Test-Checkliste

  1. Einstellungen ohne Validierungsfehler speichern.
  2. Incentive-Link öffnen — Benutzername kommt aus ?p=.
  3. Eine Stimme abgeben. Erfolg anzeigen. Zweite Stimme in 24 Stunden blockieren.
  4. Postback prüfen: DEBUG im Empfänger, p_resp und ip müssen ankommen.
  5. Votifier prüfen: Konsole zeigt Vote für den Namen und den Service-Namen dieser Liste.
  6. Ingame- oder Site-Belohnung prüfen. Die Listen-Stimme bleibt in jedem Fall.

Zustellversuche stehen in vote_reward_logs (ok / fail / skipped). Ein Fehlschlag rollt die Stimme nicht zurück.

06

FAQ & Fehler

Nein. Gäste können abstimmen. Eingeloggte Konten teilen dieselben 24-Stunden-Regeln.

Bei Postback oder Votifier müssen wir wissen, wen wir belohnen. Ohne Belohnungen bleibt das Feld optional.

Ja. Beide laufen nach einer gültigen Stimme. Fehler sind unabhängig.

Es muss eine öffentliche http(s)-URL sein. Localhost, .local, private IPs und URLs mit Zugangsdaten sind gesperrt.

Prüfe den Erfolg auf dieser Liste, deine Postback-Logs oder NuVotifier-Debug, Firewall und den Ingame-Namen. Listen-Cooldown ist 24 Stunden.

Nur A–Z, a–z, 0–9, _ und -. Alles andere wird entfernt. Maximal 32 Zeichen.