Odmeny za hlasovanie

Voting Check

Ako odmeníš hráčov po tom, čo úspešne zahlasujú za tvoj záznam na JoinGameServers.

Cesta nastavenia: Panel → Upraviť server → Odmeny za vote (a Detaily Minecraft pre Votifier).

01

Ako to funguje

  1. Hráč otvorí tvoj vote odkaz, ideálne s ?p=USERNAME, aby bol formulár predvyplnený.

  2. Odošle hlas. Vynucujeme 24-hodinový cooldown na IP (a na prihlásený účet). Ak sú nastavené odmeny, používateľské meno / parameter je povinné.

  3. Upozorníme tvoje reward systémy: HTTP GET na postback URL a/alebo Votifier paket na Minecraft host — s rovnakým parametrom a IP voliča.

  4. Ty udelíš odmenu. Zlyhania doručenia na tvojej strane sa tu logujú, ale hlas neodoberajú.

Vyber metódu

HTTP Postback

Najlepšie pre weby, launchery a hry mimo Minecraft. Pre Minecraft je to voliteľná alternatíva k Votifier (alebo doplnok, ak odmeňuješ aj na webe).

  • Funguje pre každú hru v tomto zozname
  • Ty ovládaš body, cooldowny a logovanie
  • Potrebuje verejný HTTPS endpoint
Postback PHP →
Najlepšie pre Minecraft

Minecraft Votifier

Preferované pre Minecraft. Ideálne pre in-game cratey, kľúče a listener pluginy. Otvoríme TCP spojenie na tvoj Votifier port.

  • Len záznamy Minecraft
  • Classic RSA alebo NuVotifier v2 token
  • Potrebuje otvorený port + firewall allowlist
Minecraft Votifier →

Pre Minecraft použi najprv Votifier. HTTP postback je voliteľný (alebo doplnkový). Každý zapnutý kanál beží po hlase nezávisle.

Rýchly štart

  1. Prihlás sa a otvor Panel.
  2. Uprav svoj schválený záznam servera.
  3. Nastav Postback URL a/alebo zapni Votifier v Detaily Minecraft.
  4. Skopíruj incentive voting odkaz z editačného formulára (končí na ?p=USERNAME).
  5. Daj ten odkaz na web alebo Discord; nahraď USERNAME za každého hráča.
  6. Odovzdaj testovací hlas a over, že odmeny prídu.
02

Postback PHP

Po úspešnom hlase požiadame tvoju URL s parametrom hráča a jeho IP. Tvoj skript označí účet ako hlasujúci a udelí body alebo itemy.

Daj do whitelistu verejnú odchádzajúcu IP tohto webu vo firewalle a postback skripte. Odmietni každý iný zdroj. Preferuj HTTPS.

1. Nastav Postback URL

Panel → Upraviť server → Odmeny za vote → Postback URL.

https://YOURDOMAIN/postback.php
  • Názov súboru je ľubovoľný — použi cestu, akú preferuje tvoj stack.
  • Prijímajú sa len verejné http/https URL. Localhost, privátne LAN IP a credentials v URL sa odmietajú (ochrana SSRF).
  • Nasledujeme malý počet redirectov a timeoutujeme po niekoľkých sekundách, aby hlasovanie ostalo rýchle.

2. Vytvor incentive voting odkazy

Pridaj parameter, aby bol každý hráč identifikovaný, keď príde na stránku hlasovania.

/GAME/server/SLUG/vote?p=PARAMETER
Časť Pravidlá
PARAMETER / p_resp Len písmená, čísla, _, - · max. 32 znakov · používateľské meno, ID účtu alebo akékoľvek ID, ktoré sleduješ
ip IPv4 alebo IPv6 voliča, ako ju vidí tento zoznam (proxy-aware, ak je zapnuté)
Predvyplnenie query ?p= alebo ?username=

3. Čo voláme po hlase

Len pri úspechu. Ak hráč nedokončil platný hlas, request neposielame.

https://YOURDOMAIN/postback.php?p_resp=PARAMETER&ip=USERIP
Incentive odkaz Náš 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

Keď hitneme tvoj postback s p_resp=Razor, hráč Razor zahlasoval. Hodnota ip je adresa, ktorú použil v tomto zozname.

Čo by mal tvoj skript urobiť

  • Over, že request prichádza z verejnej IP tohto zoznamu.
  • Sanitizuj p_resp a ip (nikdy never surovému vstupu).
  • Over, že účet / postava existuje v tvojej databáze.
  • Aplikuj vlastný reward cooldown, ak potrebuješ niečo prísnejšie ako 24 hodín.
  • Udeľ body, coins alebo itemy; zaloguj udalosť; vráť HTTP 200.

Príklad postback.php

Hostuj toto na svojom reward webe, nie nutne na tomto vote zozname. Pred spustením nastav VOTE_LIST_IP na odchádzajúcu verejnú IP tohto webu.

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

Hlas vieme poslať priamo do tvojho Minecraft servera. Listener plugin potom spustí tvoje reward príkazy.

Firewall: povoľ prichádzajúci TCP z verejnej IP tohto webu na tvoj Votifier port (predvolene 8192). Ak sa dá, nevystavuj port celému internetu.

  1. Hráč zadá svoje Minecraft meno na našej stránke hlasovania (alebo príde cez ?p=Steve).

  2. Hlas uspeje v tomto zozname.

  3. Pripojíme sa na tvoj Votifier host/port a doručíme vote paket.

  4. Tvoj listener udelí cratey, kľúče, peniaze atď.

Zapni Votifier v Detaily Minecraft, vyber NuVotifier v2 alebo Classic a zadaj host, port a token alebo RSA verejný kľúč.

Nainštaluj NuVotifier (classic RSA a protokol v2) alebo classic Votifier plus listener pre tvoju verziu Minecraft (GAListener, SuperbVote alebo vlastný listener).

Classic / v1: vlož celý súbor public.key. Host a port berú z config.yml. Kým napájaš tento zoznam, nechaj debug: true, potom to vypni.

host: YOUR_PUBLIC_IP
port: 8192
debug: true

Pakety identifikujú tento zoznam ako: JoinGameServers

04

NuVotifier v2

Protokol v2 nahrádza RSA zdieľaným tokenom a jednorazovou výzvou. Mapuj token na service name tohto zoznamu, alebo použi predvolený token.

tokens:
  default: REPLACE_WITH_DEFAULT_TOKEN
  "JoinGameServers": REPLACE_WITH_LIST_TOKEN

Wire formát: TCP connect → prečítaj greeting VOTIFIER 2 <challenge> → JSON payload (username, serviceName, timestamp ms, address, challenge) → Base64(HMAC-SHA256(payload, token)) → magic 0x733A + dĺžka + JSON {signature, payload}. Očakávaj {"status":"ok"}.

Príznak Pravdepodobná príčina
Nie je to NuVotifier v2 server Greeting nemá challenge — použi Classic, alebo upgradni NuVotifier a zapni v2.
Neplatný podpis / neznámy service Zlý token, alebo service name nie je namapovaný. Pridaj service name zoznamu alebo použi default.
Connect zlyhal / timeout Zlý host/port, Votifier offline, alebo firewall blokuje IP tohto zoznamu.
Žiadna odpoveď Interference proxy/pluginu; zapni NuVotifier debug a skús znova.
05

Kontrolný zoznam testovania

  1. Ulož nastavenia záznamu bez chýb validácie.
  2. Otvor incentive odkaz — pole používateľského mena by sa malo predvyplniť z ?p=.
  3. Odovzdaj jeden hlas. Mal by si vidieť úspešný stav. Druhý hlas do 24 hodín musí byť zablokovaný.
  4. Over postback: zapni DEBUG v receiveri; potvrď príchod p_resp a ip.
  5. Over Votifier: pri debug true by Minecraft konzola mala ukázať prichádzajúci hlas pre tvoje meno a service name tohto zoznamu.
  6. Potvrď in-game alebo webovú odmenu. Ak nie, oprav listener — hlas v zozname aj tak platí.

Pokusy o doručenie sa zapisujú do vote_reward_logs (ok / fail / skipped). Zlyhaný callback nikdy nevráti hlas v tomto zozname späť.

06

FAQ a riešenie problémov

Nie. Hostia môžu hlasovať. Prihlásené účty zdieľajú rovnaké 24-hodinové cooldown pravidlá proti zneužitiu.

Ak máš nastavenú postback URL alebo Votifier, potrebujeme parameter, aby sme ti povedali, koho odmeniť. Bez nastavených odmien ostáva meno voliteľné.

Áno. Oba bežia po úspešnom hlase. Zlyhania sú nezávislé.

Musí to byť verejná http(s) URL. Localhost, .local, privátne IP (napr. 10.*, 192.168.*) a URL so zabudovanými credentials sú blokované.

Over, že hlas uspel v tomto zozname. Skontroluj postback logy alebo NuVotifier debug výstup. Over firewall allowlisty a že používateľské meno sedí s in-game účtom. Cooldown zoznamu je 24 hodín; vlastný reward cooldown môže byť iný.

Len A–Z, a–z, 0–9, _ a -. Všetko ostatné sa odstráni. Parametre drž ≤ 32 znakov.