Oy ödülü API'si
Serverine oy veren oyunculara oyun içinde ödül ver. Callback'i (biz seni çağırırız), Vote4Buff kontrolünü veya pull API'yi (sen bize sorarsın) ya da birkaçını birden kullan.
Oy linki
Oyuncuları, oyun içi adları userid içinde olacak şekilde bu linke gönder:
https://metin2privateservers.com/vote/YOUR-SERVER-SLUG?userid=PLAYER_NAMEBaşka bir toplistten mi geliyorsun? Parametreni değiştirmene gerek yok. username, player_id, pingUsername, custom, postback, incentive ve id parametrelerini de okuruz. Adlarda harf, rakam, - ve _ kullanılabilir, en fazla 32 karakter.
Callback (postback)
Panelinde bir callback URL'si ayarla. Oyuncu adı içeren her oydan sonra o URL'ye, query string'e şu alanlar eklenmiş bir GET isteği göndeririz:
| Alan | Anlamı |
|---|---|
userid | Oy linkindeki oyuncu adı |
userip | Oy verenin IP adresi |
voted | 1 = oy sayıldı. Yalnızca 1 olduğunda ödül ver. |
reset | Bu oyuncunun tekrar oy verebileceği Unix zamanı |
server | Serverinin slug'ı |
vote_id | Benzersiz oy ID'si. Hiçbir oy iki kez ödüllendirilmesin diye bunu sakla. |
timestamp | Callback'in gönderildiği Unix zamanı |
Her istekte bir X-Signature: sha256=… header'ı bulunur: yukarıdaki oy alanlarının (bu sırayla, URL kodlanmış) callback secret'ınla hesaplanmış HMAC-SHA256 değeri. Bunu kontrol et ki kimse URL'ni çağırarak sahte oy üretemesin. Serverin 2xx durum koduyla yanıt vermezse en fazla 3 kez yeniden deneriz. URL'n {userid} içeriyorsa, adı yolda bekleyen scriptler için bunu oyuncu adıyla değiştiririz.
PHP ile örnek handler:
<?php
// vote-callback.php on your server
$secret = 'YOUR_CALLBACK_SECRET'; // from your dashboard
$query = $_SERVER['QUERY_STRING'];
// The signature covers the vote fields, which are always appended last.
$fields = ['userid','userip','voted','reset','server','vote_id','timestamp'];
$parts = [];
foreach ($fields as $f) { $parts[] = $f . '=' . rawurlencode($_GET[$f] ?? ''); }
$signed = implode('&', $parts);
$expected = 'sha256=' . hash_hmac('sha256', $signed, $secret);
$given = $_SERVER['HTTP_X_SIGNATURE'] ?? '';
if (!hash_equals($expected, $given)) { http_response_code(403); exit('bad signature'); }
if (($_GET['voted'] ?? '0') !== '1') { exit('ignored'); }
if (abs(time() - (int)$_GET['timestamp']) > 300) { http_response_code(400); exit('too old'); }
$player = $_GET['userid'];
$voteId = (int)$_GET['vote_id'];
// TODO: skip if $voteId was already rewarded, then give the reward to $player.
echo 'ok';TEST oyuncusu için bir callback göndermek ve serverinin yanıtını görmek için paneldeki Test oyu gönder düğmesini kullan.
Vote4Buff kontrolü
Her oy, oyuncuya tekrar oy verebileceği zamana kadar 7 gün süren bir buff verir. Oyuncu giriş yaptığında veya buff NPC'sini açtığında buff'ının aktif olup olmadığını sor:
GET https://metin2privateservers.com/api/v1/vote4buff?userid=PLAYER_NAME
X-API-Key: YOUR_API_KEY
{"userid":"PLAYER_NAME","voted":true,"buff_active":true,"vote_id":1234,
"voted_at":"2026-11-09T18:02:11.000Z","buff_expires_at":"2026-11-16T18:02:11.000Z",
"next_vote_at":"2026-11-16T18:02:11.000Z","seconds_left":604700}
{"userid":"PLAYER_NAME","voted":false,"buff_active":false,"vote_url":"/vote/your-server?userid=PLAYER_NAME"}Server başına dakikada en fazla 600 istek. Moderatörlerin hile olarak işaretlediği oylar artık buff vermez.
Pull API
Çağrılmak yerine sormayı mı tercih edersin? API anahtarını X-API-Key header'ında gönder.
Bu oyuncu oy verdi mi?
GET https://metin2privateservers.com/api/v1/votes/check?userid=PLAYER_NAME
{"voted":true,"userid":"PLAYER_NAME","vote_id":1234,"claimed":false,
"voted_at":"2026-11-09T18:02:11.000Z","next_vote_at":"2026-11-10T06:02:11.000Z"}Henüz ödüllendirilmemiş oylar
GET https://metin2privateservers.com/api/v1/votes/unclaimed?limit=50
{"votes":[{"vote_id":1234,"userid":"PLAYER_NAME","created_at":"2026-11-09T18:02:11.000Z"}]}Oyları ödüllendirildi olarak işaretle
POST https://metin2privateservers.com/api/v1/votes/claim
Content-Type: application/json
{"vote_ids":[1234,1235]}
{"claimed":[1234,1235],"already_claimed_or_unknown":[]}Ödülleri tam olarak bir kez vermek için bir cron job ile her dakika önce unclaimed, sonra claim çalıştır.
Sınırlar
- Her server için her oyuncu 7 günde bir oy verebilir; IP'ye ve oyuncu adına göre kontrol edilir.
- Her oy için bir resimdeki harfleri yazmak gerekir (captcha).
- Pull API son 7 günün oylarını döndürür.