Szavazási jutalmak

Voting Check

Így jutalmazhatod a játékosokat, miután sikeresen szavaztak a JoinGameServers bejegyzésedre.

Beállítás: Vezérlőpult → Szerver szerkesztése → Szavazati jutalmak (és Minecraft részletek a Votifierhez).

01

Hogyan működik

  1. A játékos megnyitja a szavazólinkedet, lehetőleg ?p=USERNAME paraméterrel, hogy az űrlap előre ki legyen töltve.

  2. Beküldi a szavazatot. 24 órás cooldown van IP-nként (és bejelentkezett fiókonként). Ha vannak jutalmak, a felhasználónév / paraméter kötelező.

  3. Értesítjük a jutalmazó rendszereidet: HTTP GET a postback URL-re és/vagy Votifier csomag a Minecraft hostodra — ugyanazzal a paraméterrel és a szavazó IP-jével.

  4. Te adod a jutalmat. A te oldaladon történt kézbesítési hibák itt naplózódnak, de a szavazatot nem törlik.

Válassz módszert

HTTP Postback

Weboldalakhoz, launcherekhez és nem Minecraft játékokhoz a legjobb. Minecraftnál opcionális alternatíva a Votifier mellett (vagy kiegészítés, ha weboldalon is jutalmazol).

  • A lista minden játékához működik
  • Te kezeled a pontokat, cooldownokat, naplókat
  • Nyilvános HTTPS endpoint kell
Postback PHP →
Legjobb Minecrafthez

Minecraft Votifier

Minecrafthoz ezt javasoljuk. Ideális crate-ekhez, kulcsokhoz és listener pluginokhoz. TCP kapcsolatot nyitunk a Votifier portodra.

  • Csak Minecraft bejegyzésekhez
  • Classic RSA vagy NuVotifier v2 token
  • Nyitott port + tűzfal allowlist kell
Minecraft Votifier →

Minecraftnál először a Votifiert használd. Az HTTP postback opcionális (vagy kiegészítő). Minden bekapcsolt csatorna a szavazat után egymástól függetlenül fut.

Gyors kezdés

  1. Jelentkezz be, és nyisd meg a vezérlőpultot.
  2. Szerkeszd a jóváhagyott szerverbejegyzésedet.
  3. Állíts be Postback URL-t és/vagy kapcsold be a Votifiert a Minecraft részleteknél.
  4. Másold ki az incentive szavazólinket a szerkesztő űrlapról (a végén ?p=USERNAME van).
  5. Tedd ki a linket a weboldaladra vagy Discordra; játékosonként cseréld a USERNAME részt.
  6. Adj le egy tesztszavazatot, és ellenőrizd, hogy megérkezik-e a jutalom.
02

Postback PHP

Sikeres szavazat után meghívjuk az URL-edet a játékos paraméterével és az IP-jével. A szkripted megjelöli, hogy az a fiók szavazott, és pontot vagy tárgyat ad.

Whitelisteld ennek a weboldalnak a nyilvános kimenő IP-jét a tűzfaladon és a postback szkriptedben. Minden más forrást utasíts el. HTTPS-t részesíts előnyben.

1. Állítsd be a Postback URL-t

Vezérlőpult → Szerver szerkesztése → Szavazati jutalmak → Postback URL.

https://YOURDOMAIN/postback.php
  • A fájlnév tetszőleges — használd a stackednek megfelelő útvonalat.
  • Csak nyilvános http/https URL-eket fogadunk el. Localhost, privát LAN IP és URL-ben lévő bejelentkezési adatok elutasítva (SSRF védelem).
  • Kevesebb átirányítást követünk, és pár másodperc után időtúllépés van, hogy a szavazás gyors maradjon.

2. Incentive szavazólinkek készítése

Adj hozzá egy paramétert, hogy minden játékost azonosítani tudjunk, amikor a szavazóoldalra érkezik.

/GAME/server/SLUG/vote?p=PARAMETER
Részelem Szabályok
PARAMETER / p_resp Csak betű, szám, _, - · max. 32 karakter · nick, fiókazonosító vagy bármilyen ID, amit követed
ip A szavazó IPv4 vagy IPv6 címe, ahogy ez a lista látja (proxy-tudatos, ha be van kapcsolva)
Előtöltő query ?p= vagy ?username=

3. Mit hívunk szavazat után

Csak siker esetén. Ha a játékos nem adott le érvényes szavazatot, nem küldünk kérést.

https://YOURDOMAIN/postback.php?p_resp=PARAMETER&ip=USERIP
Incentive link A callbackünk
/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

Ha a postbackedet p_resp=Razor értékkel hívjuk, a Razor játékos szavazott. Az ip érték az a cím, amellyel ezen a listán szavazott.

Mit tegyen a szkripted

  • Ellenőrizd, hogy a kérés ennek a listának a nyilvános IP-jéről jön.
  • Tisztítsd a p_resp és ip értékeket (soha ne bízz a nyers bemenetben).
  • Erősítsd meg, hogy a fiók / karakter létezik az adatbázisodban.
  • Alkalmazz saját jutalom-cooldownot, ha a 24 óránál szigorúbb szabály kell.
  • Adj pontot, érmét vagy tárgyat; naplózd az eseményt; válaszolj HTTP 200-zal.

postback.php példa

Ezt a jutalomweboldaladon hosztold, nem feltétlenül ezen a szavazólistán. Élesítés előtt állítsd a VOTE_LIST_IP-t ennek a weboldalnak a kimenő nyilvános IP-jére.

<?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

A szavazatot közvetlenül a Minecraft szerveredre tudjuk küldeni. Egy listener plugin futtatja a jutalomparancsaidat.

Tűzfal: engedd be a bejövő TCP-t ennek a weboldalnak a nyilvános IP-jéről a Votifier portodra (alapértelmezés 8192). Ha lehet, ne tedd ki a portot az egész internetnek.

  1. A játékos megadja a Minecraft nickjét a szavazóoldalunkon (vagy ?p=Steve linkkel érkezik).

  2. A szavazat sikeres ezen a listán.

  3. Csatlakozunk a Votifier hostodhoz/portodhoz, és kézbesítjük a szavazatcsomagot.

  4. A listenered crate-eket, kulcsokat, pénzt stb. ad.

Kapcsold be a Votifiert a Minecraft részleteknél, válassz NuVotifier v2-t vagy Classicot, majd add meg a hostot, a portot és a tokent vagy az RSA nyilvános kulcsot.

Telepíts NuVotifiert (classic RSA és v2 protokoll) vagy classic Votifiert, plusz egy listenert a Minecraft verziódhoz (GAListener, SuperbVote vagy saját listener).

Classic / v1: illeszd be a teljes public.key fájlt. A host és a port a config.yml-ből jön. Amíg összekötöd ezt a listát, tartsd a debug: true értéket, aztán kapcsold ki.

host: YOUR_PUBLIC_IP
port: 8192
debug: true

A csomagok így azonosítják ezt a listát: JoinGameServers

04

NuVotifier v2

A v2 protokoll az RSA helyett megosztott tokent és egyszeri challenge-et használ. Rendelj tokent ehhez a lista szolgáltatásnevéhez, vagy használd az alapértelmezett tokent.

tokens:
  default: REPLACE_WITH_DEFAULT_TOKEN
  "JoinGameServers": REPLACE_WITH_LIST_TOKEN

Wire formátum: TCP connect → greeting olvasása VOTIFIER 2 <challenge> → JSON payload (username, serviceName, timestamp ms, address, challenge) → Base64(HMAC-SHA256(payload, token)) → magic 0x733A + length + JSON {signature, payload}. Várd a {"status":"ok"} választ.

Tünet Valószínű ok
Nem NuVotifier v2 szerver A greetingben nincs challenge — használd a Classicot, vagy frissítsd a NuVotifiert és kapcsold be a v2-t.
Érvénytelen aláírás / ismeretlen szolgáltatás Rossz token, vagy a szolgáltatásnév nincs leképezve. Add hozzá a lista szolgáltatásnevét, vagy használd az alapértelmezettet.
Kapcsolódás sikertelen / időtúllépés Rossz host/port, a Votifier offline, vagy a tűzfal blokkolja a lista IP-jét.
Nincs válasz Proxy/plugin zavar; kapcsold be a NuVotifier debugot, és próbáld újra.
05

Teszt checklist

  1. Mentsd el a bejegyzés beállításait validációs hiba nélkül.
  2. Nyiss meg egy incentive linket — a felhasználónév mezőnek előre ki kell töltődnie a ?p= paraméterből.
  3. Adj le egy szavazatot. A siker állapotot kell látnod. A 24 órán belüli második szavazatot blokkolni kell.
  4. Ellenőrizd a postbacket: kapcsold be a DEBUG-ot a fogadóban; erősítsd meg, hogy a p_resp és az ip megérkezik.
  5. Ellenőrizd a Votifiert: debug true mellett a Minecraft konzolon meg kell jelennie a bejövő szavazatnak a nickeddel és a lista szolgáltatásnevével.
  6. Erősítsd meg a játékon belüli vagy weboldalas jutalmat. Ha nincs, javítsd a listenert — a listán a szavazat ettől még megmarad.

A kézbesítési kísérletek a vote_reward_logs-ban vannak (ok / fail / skipped). A sikertelen callback soha nem vonja vissza a szavazatot erről a listáról.

06

GYIK és hibaelhárítás

Nem. Vendégként is lehet szavazni. A bejelentkezett fiókok ugyanazokat a 24 órás cooldown szabályokat kapják a visszaélések megelőzésére.

Ha beállítottál postback URL-t vagy Votifiert, kell egy paraméter, hogy tudjuk, kit jutalmazz. Jutalmak nélkül a felhasználónév opcionális marad.

Igen. Mindkettő sikeres szavazat után fut. A hibák egymástól függetlenek.

Nyilvános http(s) URL-nek kell lennie. Localhost, .local, privát IP-k (pl. 10.*, 192.168.*) és beágyazott bejelentkezési adatokat tartalmazó URL-ek blokkolva vannak.

Ellenőrizd, hogy a szavazat sikeres volt-e ezen a listán. Nézd a postback naplókat vagy a NuVotifier debug kimenetét. Ellenőrizd a tűzfal allowlistet, és hogy a nick egyezik-e a játékbeli fiókkal. A lista cooldownja 24 óra; a saját jutalom-cooldownod ettől eltérhet.

Csak A–Z, a–z, 0–9, _ és -. Minden más kiszűrve. A paraméterek legyenek ≤ 32 karakteresek.