Ścieżka konfiguracji: Panel → Edytuj serwer → Nagrody za głosy (oraz Szczegóły Minecraft dla Votifier).
01
Jak to działa
1
Gracz otwiera twój link do głosowania, najlepiej z ?p=USERNAME, żeby formularz był wstępnie wypełniony.
2
Wysyła głos. Stosujemy 24-godzinny cooldown na IP (i na zalogowane konto). Jeśli nagrody są skonfigurowane, nick / parametr jest wymagany.
3
Powiadamiamy twoje systemy nagród: HTTP GET na URL postback i/lub pakiet Votifier na host Minecraft — z tym samym parametrem i IP głosującego.
4
Przyznajesz nagrodę. Błędy dostawy po twojej stronie są logowane tutaj, ale nie usuwają głosu.
Wybierz metodę
HTTP Postback
Najlepsze dla stron, launcherów i gier innych niż Minecraft. Dla Minecraft to opcjonalna alternatywa dla Votifier (albo dodatek, jeśli nagradzasz też na stronie).
Gdy trafiamy na twój postback z p_resp=Razor, gracz Razor zagłosował. Wartość ip to adres, którego użył na tej liście.
Co powinien robić twój skrypt
Zweryfikuj, że żądanie pochodzi z publicznego IP tej listy.
Oczyść p_resp i ip (nigdy nie ufaj surowym danym).
Potwierdź, że konto / postać istnieje w twojej bazie.
Zastosuj własny cooldown nagród, jeśli potrzebujesz czegoś ostrzejszego niż 24 godziny.
Przyznaj punkty, monety lub przedmioty; zaloguj zdarzenie; zwróć HTTP 200.
Przykład postback.php
Hostuj to na swojej stronie z nagrodami, niekoniecznie na tej liście głosów. Ustaw VOTE_LIST_IP na wychodzące publiczne IP tej strony przed startem produkcyjnym.
<?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
Możemy wysłać głos prosto na twój serwer Minecraft. Plugin listener uruchamia wtedy twoje komendy nagród.
Firewall: zezwól na przychodzące TCP z publicznego IP tej strony na port Votifier (domyślnie 8192). Nie wystawiaj portu na cały internet, jeśli możesz tego uniknąć.
1
Gracz wpisuje nick Minecraft na naszej stronie głosowania (albo wchodzi przez ?p=Steve).
2
Głos przechodzi na tej liście.
3
Łączymy się z hostem/portem Votifier i dostarczamy pakiet głosu.
4
Twój listener przyznaje skrzynki, klucze, kasę itd.
Włącz Votifier w Szczegółach Minecraft, wybierz NuVotifier v2 lub Classic, a potem podaj host, port i token lub klucz publiczny RSA.
Zainstaluj NuVotifier (classic RSA i protokół v2) lub classic Votifier, plus listener do twojej wersji Minecraft (GAListener, SuperbVote lub własny listener).
Classic / v1: wklej cały plik public.key. Host i port są w config.yml. Zostaw debug: true podczas łączenia z tą listą, potem wyłącz.
host: YOUR_PUBLIC_IP
port: 8192
debug: true
Pakiety identyfikują tę listę jako: JoinGameServers
04
NuVotifier v2
Protokół v2 zastępuje RSA współdzielonym tokenem i jednorazowym challenge. Przypisz token do nazwy usługi tej listy albo użyj domyślnego tokena.
Powitanie bez challenge — użyj Classic albo zaktualizuj NuVotifier i włącz v2.
Nieprawidłowy podpis / nieznana usługa
Zły token albo nieprzypisana nazwa usługi. Dodaj nazwę usługi listy albo użyj domyślnego tokena.
Połączenie nieudane / timeout
Zły host/port, Votifier offline albo firewall blokuje IP tej listy.
Brak odpowiedzi
Interferencja proxy/pluginu; włącz debug NuVotifier i spróbuj ponownie.
05
Lista testów
Zapisz ustawienia wpisu bez błędów walidacji.
Otwórz link zachęcający — pole nicku powinno wypełnić się z ?p=.
Oddaj jeden głos. Powinieneś zobaczyć stan sukcesu. Drugi głos w 24 godzinach musi być zablokowany.
Zweryfikuj postback: włącz DEBUG w odbiorniku; potwierdź, że przychodzą p_resp i ip.
Zweryfikuj Votifier: przy debug true konsola Minecraft powinna pokazać przychodzący głos dla twojego nicku i nazwy usługi tej listy.
Potwierdź nagrodę w grze lub na stronie. Jeśli nie, napraw listener — głos na liście i tak się liczy.
Próby dostawy są zapisywane w vote_reward_logs (ok / fail / skipped). Nieudany callback nigdy nie cofa głosu na tej liście.
06
FAQ i rozwiązywanie problemów
Nie. Goście mogą głosować. Zalogowane konta mają te same zasady 24-godzinnego cooldownu dla ochrony przed nadużyciami.
Jeśli skonfigurowałeś URL postback lub Votifier, potrzebujemy parametru, żeby wiedzieć, kogo nagrodzić. Bez nagród nick pozostaje opcjonalny.
Tak. Oba uruchamiają się po udanym głosie. Błędy są niezależne.
Musi to być publiczny URL http(s). Localhost, .local, prywatne IP (np. 10.*, 192.168.*) i URL z danymi logowania są blokowane.
Potwierdź, że głos przeszedł na tej liście. Sprawdź logi postback lub output debug NuVotifier. Zweryfikuj allowlistę firewallu i czy nick pasuje do konta w grze. Cooldown listy to 24 godziny; twój własny cooldown nagród może być inny.
Tylko A–Z, a–z, 0–9, _ i -. Wszystko inne jest usuwane. Trzymaj parametry ≤ 32 znaki.
Zainstaluj aplikacjęDodaj JoinGameServers do ekranu głównego, aby mieć szybki dostęp.