Äänestyspalkinnot

Voting Check

Miten palkitset pelaajia, kun he äänestävät onnistuneesti listaustasi JoinGameServersissa.

Asetuspolku: Hallinta → Muokkaa serveriä → Vote Rewards (ja Minecraft-tiedot Votifierille).

01

Miten se toimii

  1. Pelaaja avaa äänestyslinkkisi, mieluiten ?p=USERNAME, jotta lomake on valmiiksi täytetty.

  2. Hän lähettää äänen. Pakotamme 24 tunnin cooldownin per IP (ja per kirjautunut tili). Jos rewardit on määritetty, käyttäjänimi / parametri on pakollinen.

  3. Ilmoitamme reward-järjestelmillesi: HTTP GET postback-URL:iisi ja/tai Votifier-paketti Minecraft-hostillesi — samalla parametrilla ja äänestäjän IP:llä.

  4. Annat rewardin. Toimitusvirheet sinun puolellasi lokitetaan tänne, mutta eivät poista ääntä.

Valitse tapa

HTTP Postback

Paras sivustoille, launchereille ja muille kuin Minecraft-peleille. Minecraftissa tämä on valinnainen vaihtoehto Votifierille (tai lisä, jos palkitset myös sivustolla).

  • Toimii jokaiselle pelille tällä listalla
  • Sinä hallitset pisteet, cooldownit, lokituksen
  • Tarvitsee julkisen HTTPS-endpointin
Postback PHP →
Paras Minecraftille

Minecraft Votifier

Suositeltu Minecraftille. Paras pelinsisäisille crateille, keylle ja listener-plugineille. Avaamme TCP-yhteyden Votifier-porttiisi.

  • Vain Minecraft-listaukset
  • Classic RSA tai NuVotifier v2 -token
  • Tarvitsee avoimen portin + firewall-allowlistin
Minecraft Votifier →

Minecraftissa käytä ensin Votifieria. HTTP-postback on valinnainen (tai lisä). Jokainen käytössä oleva kanava toimii itsenäisesti äänen jälkeen.

Pika-aloitus

  1. Kirjaudu ja avaa Hallinta.
  2. Muokkaa hyväksyttyä serverilistaustasi.
  3. Aseta Postback-URL ja/tai ota Votifier käyttöön Minecraft-tiedot -osiossa.
  4. Kopioi kannustinäänestyslinkki muokkauslomakkeesta (loppuu ?p=USERNAME).
  5. Laita linkki sivustollesi tai Discordiin; korvaa USERNAME pelaajakohtaisesti.
  6. Anna testiääni ja varmista, että rewardit saapuvat.
02

Postback PHP

Onnistuneen äänen jälkeen kutsumme URL:iasi pelaajaparametrilla ja heidän IP:llään. Skriptisi merkitsee tilin äänestäneeksi ja myöntää pisteitä tai esineitä.

Whitelistaa tämän sivuston julkinen outbound-IP firewallissa ja postback-skriptissäsi. Hylkää kaikki muut lähteet. Suosi HTTPS:ää.

1. Aseta Postback-URL

Hallinta → Muokkaa serveriä → Vote Rewards → Postback-URL.

https://YOURDOMAIN/postback.php
  • Tiedostonimi on vapaa — käytä mitä tahansa polkua stackisi suosii.
  • Vain julkiset http/https-URL:t hyväksytään. Localhost, yksityiset LAN-IP:t ja URL-tunnukset hylätään (SSRF-suojaus).
  • Seuraamme pientä määrää uudelleenohjauksia ja aikakatkaisemme muutaman sekunnin jälkeen, jotta äänestys pysyy nopeana.

2. Rakenna kannustinäänestyslinkkejä

Lisää parametri, jotta jokainen pelaaja tunnistetaan, kun hän saapuu äänestyssivulle.

/GAME/server/SLUG/vote?p=PARAMETER
Osa Säännöt
PARAMETER / p_resp Vain kirjaimet, numerot, _, - · max 32 merkkiä · käyttäjänimi, tilin id tai mikä tahansa id jota seuraat
ip Äänestäjän IPv4 tai IPv6 sellaisena kuin tämä lista sen näkee (proxy-tietoinen kun käytössä)
Esitäyttökysely ?p= tai ?username=

3. Mitä kutsumme äänen jälkeen

Vain onnistuessa. Jos pelaaja ei tehnyt kelvollista ääntä, emme lähetä pyyntöä.

https://YOURDOMAIN/postback.php?p_resp=PARAMETER&ip=USERIP
Kannustinlinkki Callbackimme
/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

Kun kutsumme postbackiasi p_resp=Razor, pelaaja Razor on äänestänyt. ip-arvo on osoite, jota hän käytti tällä listalla.

Mitä skriptisi pitäisi tehdä

  • Varmista, että pyyntö tulee tämän listan julkisesta IP:stä.
  • Siivoa p_resp ja ip (älä koskaan luota raakaan syötteeseen).
  • Vahvista, että tili / hahmo on olemassa tietokannassasi.
  • Käytä omaa reward-cooldownia, jos tarvitset tiukempaa kuin 24 tuntia.
  • Myönnä pisteitä, kolikoita tai esineitä; lokita tapahtuma; palauta HTTP 200.

postback.php-esimerkki

Hostaa tämä reward-sivustollasi, ei välttämättä tällä äänestyslistalla. Aseta VOTE_LIST_IP tämän sivuston outbound-julkiseksi IP:ksi ennen tuotantoon menoa.

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

Voimme työntää äänen suoraan Minecraft-serverillesi. Listener-plugin ajaa sitten reward-komennot.

Firewall: salli inbound TCP tämän sivuston julkisesta IP:stä Votifier-porttiisi (oletus 8192). Älä altista porttia koko internetille, jos voit välttää sen.

  1. Pelaaja syöttää Minecraft-käyttäjänimensä äänestyssivullamme (tai saapuu ?p=Steve).

  2. Ääni onnistuu tällä listalla.

  3. Yhdistämme Votifier-hostiisi/porttiisi ja toimitamme äänipaketin.

  4. Listenerisi myöntää crateja, keytä, rahaa jne.

Ota Votifier käyttöön Minecraft-tiedot -osiossa, valitse NuVotifier v2 tai Classic, ja syötä host, portti sekä token tai RSA-julkinen avain.

Asenna NuVotifier (classic RSA ja protokolla v2) tai classic Votifier, plus listener Minecraft-versiollesi (GAListener, SuperbVote tai custom listener).

Classic / v1: liitä koko public.key-tiedosto. Host ja portti tulevat config.yml:stä. Pidä debug: true kun yhdistät tätä listaa, sammuta sitten.

host: YOUR_PUBLIC_IP
port: 8192
debug: true

Paketit tunnistavat tämän listan nimellä: JoinGameServers

04

NuVotifier v2

Protokolla v2 korvaa RSA:n jaetulla tokenilla ja kertaluonteisella challengeilla. Kartota token tämän listan service-nimeen tai käytä oletustokenia.

tokens:
  default: REPLACE_WITH_DEFAULT_TOKEN
  "JoinGameServers": REPLACE_WITH_LIST_TOKEN

Wire-muoto: TCP-yhteys → lue tervehdys VOTIFIER 2 <challenge> → JSON-payload (username, serviceName, timestamp ms, address, challenge) → Base64(HMAC-SHA256(payload, token)) → magic 0x733A + pituus + JSON {signature, payload}. Odota {"status":"ok"}.

Oire Todennäköinen syy
Ei NuVotifier v2 -serveri Tervehdyksessä ei ole challengea — käytä Classicia tai päivitä NuVotifier ja ota v2 käyttöön.
Virheellinen signature / tuntematon service Väärä token tai service-nimeä ei ole kartotettu. Lisää listan service-nimi tai käytä oletusta.
Yhteys epäonnistui / timeout Huono host/portti, Votifier offline tai firewall estää tämän listan IP:n.
Ei vastausta Proxy/plugin-häiriö; ota NuVotifier-debug käyttöön ja yritä uudelleen.
05

Testauslista

  1. Tallenna listauksen asetukset ilman validointivirheitä.
  2. Avaa kannustinlinkki — käyttäjänimikentän pitäisi esitäyttyä ?p=-parametrista.
  3. Anna yksi ääni. Näet onnistumistilanteen. Toisen äänen 24 tunnin sisällä on estyttävä.
  4. Varmista postback: ota DEBUG käyttöön vastaanottimessasi; varmista että p_resp ja ip saapuvat.
  5. Varmista Votifier: debug true -tilassa Minecraft-konsolin pitäisi näyttää saapuva ääni käyttäjänimellesi ja tämän listan service-nimelle.
  6. Vahvista pelinsisäinen tai sivuston reward. Jos ei, korjaa listener — listan ääni lasketaan silti.

Toimitusyritykset kirjataan tauluun vote_reward_logs (ok / fail / skipped). Epäonnistunut callback ei koskaan peruuta ääntä tältä listalta.

06

UKK & vianetsintä

Ei. Vierailijat voivat äänestää. Kirjautuneet tilit jakavat samat 24 tunnin cooldown-säännöt väärinkäytön estämiseksi.

Jos määritit postback-URL:n tai Votifierin, tarvitsemme parametrin kertoaksemme kenelle reward kuuluu. Ilman rewardeja käyttäjänimi pysyy valinnaisena.

Kyllä. Molemmat ajetaan onnistuneen äänen jälkeen. Virheet ovat itsenäisiä.

Sen on oltava julkinen http(s)-URL. Localhost, .local, yksityiset IP:t (esim. 10.*, 192.168.*) ja URL:t sisäänrakennetuilla tunnuksilla on estetty.

Varmista, että ääni onnistui tällä listalla. Tarkista postback-lokisi tai NuVotifier-debug. Varmista firewall-allowlistit ja että käyttäjänimi vastaa pelinsisäistä tiliä. Listan cooldown on 24 tuntia; oma reward-cooldown voi erota.

Vain A–Z, a–z, 0–9, _ ja -. Muut merkit poistetaan. Pidä parametrit ≤ 32 merkkiä.