سیستم API مکسگیمینگ
سایت یا ربات خود را به سرور بازیتان وصل کنید؛ از دریافت رنک بازیکنان تا مدیریت VIP، فرمانهای بازی و گزارشها.
https://server.maxgaming.ir/api/owner-api/v1- ۱فعالسازی اشتراکدر «ارتقای سرور»، سیستم API را انتخاب و پرداخت کنید. ماهانه ۴۹۹٬۰۰۰ تومان؛ برای ارتقا، هزینه روزهای باقیمانده و برای تمدید، مدت انتخابشده محاسبه میشود.
- ۲ساخت کلیدمالک اصلی از «دسترسی API سرور» فقط دسترسیهای مورد نیاز را انتخاب و یک کلید ایجاد میکند.
- ۳اولین درخواستکلید را در متغیر محیطی بکاند خود قرار دهید و با یکی از مسیرهای خواندنی شروع کنید.
کلید و احراز هویت
کلید کامل فقط یک بار، بلافاصله بعد از ساخت نمایش داده میشود. هیچ مسیر «نمایش دوباره secret» وجود ندارد؛ حتی مدیر سایت هم مقدار اصلی را نمیبیند. اگر کلید را گم کردید، قبلی را لغو و حذف کنید، سپس کلید تازه بسازید.
export MAXGAMING_API_SECRET="YOUR_API_SECRET"| هدر | زمان استفاده | مقدار |
|---|---|---|
| Authorization | همه درخواستها | Bearer YOUR_API_SECRET |
| Content-Type | درخواستهای POST | application/json |
| Idempotency-Key | همه درخواستهای POST | یک UUID نسخه ۴؛ برای هر عملیات تازه، یک شناسه تازه |
هممالک به مدیریت کلید دسترسی ندارد. پس از تغییر مالکیت یا پایان اشتراک، کلید قبلی اجازه اجرای عملیات ندارد. کلید لغوشده دوباره فعال نمیشود و کلید مسدودشده توسط مدیریت قابل حذف نیست.
صفحهبندی و جستجو
| پارامتر | نوع | توضیح |
|---|---|---|
| page | integer · پیشفرض ۱ | از ۱ تا ۲۰۰ |
| limit | integer · پیشفرض ۲۵ | از ۱ تا ۵۰ رکورد در هر صفحه |
| q | string · اختیاری | متن ساده تا ۸۰ نویسه؛ جستجوی نام یا SteamID در فهرستها، یا متن لاگ. Regex و فیلتر دیتابیس پذیرفته نمیشود. |
پاسخ شامل یک پوشش بیرونی success و data است. در فهرستها، رکوردها در response.data.data قرار دارند. تا وقتی response.data.hasMore برابر true است، صفحه بعد را بخوانید. مجموع دقیق رکوردها برگردانده نمیشود.
رنک بازیکنان
رتبه و تجربه بازیکنان همین سرور را دریافت کنید. ترتیب بر اساس تجربه است؛ اطلاعاتی مانند امتیاز فقط در صورت ثبت توسط پلاگین برمیگردند.
ranksپارامترهای page، limit و q اختیاریاند؛ محدودیتها در بخش صفحهبندی آمده است.
نمونه درخواست
curl --get 'https://server.maxgaming.ir/api/owner-api/v1/ranks' \
-H "Authorization: Bearer $MAXGAMING_API_SECRET" \
--data-urlencode 'page=1' \
--data-urlencode 'limit=25' \
--data-urlencode 'q=76561199123456789'// روی بکاند Node.js اجرا کنید؛ secret را وارد کد مرورگر نکنید.
const response = await fetch("https://server.maxgaming.ir/api/owner-api/v1/ranks?page=1&limit=25&q=76561199123456789", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.MAXGAMING_API_SECRET}`
}
});
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result.data);import os
import requests # pip install requests
response = requests.get(
"https://server.maxgaming.ir/api/owner-api/v1/ranks",
headers={
"Authorization": "Bearer " + os.environ["MAXGAMING_API_SECRET"]
},
params={"page": 1, "limit": 25, "q": "76561199123456789"},
timeout=20
)
response.raise_for_status()
print(response.json())<?php
// PHP 8+ با افزونه cURL؛ فقط روی بکاند اجرا کنید.
$secret = getenv('MAXGAMING_API_SECRET') ?: throw new RuntimeException('API secret is missing');
$headers = ['Authorization: Bearer ' . $secret];
$ch = curl_init('https://server.maxgaming.ir/api/owner-api/v1/ranks?page=1&limit=25&q=76561199123456789');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 20,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => $headers
]);
$raw = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($raw === false) {
$error = curl_error($ch);
curl_close($ch);
throw new RuntimeException($error);
}
curl_close($ch);
if ($status < 200 || $status >= 300) {
throw new RuntimeException("HTTP $status: $raw");
}
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT), PHP_EOL;// برنامه Console با .NET 6+؛ secret فقط در بکاند نگهداری شود.
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
var secret = Environment.GetEnvironmentVariable("MAXGAMING_API_SECRET")
?? throw new InvalidOperationException("API secret is missing");
// در سرویس دائمی، HttpClient را بین درخواستها به اشتراک بگذارید.
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(20) };
using var request = new HttpRequestMessage(HttpMethod.Get, "https://server.maxgaming.ir/api/owner-api/v1/ranks?page=1&limit=25&q=76561199123456789");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secret);
using var response = await client.SendAsync(request);
var result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException($"HTTP {(int)response.StatusCode}: {result}");
Console.WriteLine(result);// فقط کتابخانه استاندارد Go؛ روی سرور خودتان اجرا کنید.
package main
import (
"fmt"
"io"
"net/http"
"os"
"time"
)
func main() {
secret := os.Getenv("MAXGAMING_API_SECRET")
if secret == "" { panic("API secret is missing") }
client := &http.Client{Timeout: 20 * time.Second}
request, err := http.NewRequest("GET", "https://server.maxgaming.ir/api/owner-api/v1/ranks?page=1&limit=25&q=76561199123456789", nil)
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer " + secret)
response, err := client.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
result, err := io.ReadAll(io.LimitReader(response.Body, 2 * 1024 * 1024))
if err != nil { panic(err) }
if response.StatusCode < 200 || response.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, result))
}
fmt.Println(string(result))
}// Java 11+، بدون کتابخانه جانبی؛ فایل MaxGamingApi.java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class MaxGamingApi {
public static void main(String[] args) throws Exception {
String secret = System.getenv("MAXGAMING_API_SECRET");
if (secret == null || secret.isBlank())
throw new IllegalStateException("API secret is missing");
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10)).build();
HttpRequest.Builder request = HttpRequest.newBuilder(URI.create("https://server.maxgaming.ir/api/owner-api/v1/ranks?page=1&limit=25&q=76561199123456789"))
.timeout(Duration.ofSeconds(20))
.header("Authorization", "Bearer " + secret);
request.GET();
HttpResponse<String> response = client.send(request.build(), HttpResponse.BodyHandlers.ofString());
if (response.statusCode() < 200 || response.statusCode() >= 300)
throw new IllegalStateException("HTTP " + response.statusCode() + ": " + response.body());
System.out.println(response.body());
}
}نمونه پاسخ موفق · HTTP 200
این داده صرفاً نمونه آموزشی است؛ فیلدهای اختیاری بسته به پلاگین و اطلاعات ثبتشده تغییر میکنند.
{
"success": true,
"data": {
"data": [
{
"steamid": "76561199123456789",
"data": {
"player_name": "Player",
"experience": 1200
}
}
],
"hasMore": false,
"pagination": {
"currentPage": 1,
"itemsPerPage": 25,
"hasMore": false
}
}
}بنهای سرور
رکوردهای بن سرور را بخوانید. این مسیر فقط خواندنی است و بازیکن را بن یا آنبن نمیکند. برای بن و رفع بن، از POST /rcon و راهنمای فرمانهای مدیریت بازیکن در پایین استفاده کنید.
bansپارامترهای page، limit و q اختیاریاند؛ محدودیتها در بخش صفحهبندی آمده است.
نمونه درخواست
curl --get 'https://server.maxgaming.ir/api/owner-api/v1/bans' \
-H "Authorization: Bearer $MAXGAMING_API_SECRET" \
--data-urlencode 'page=1' \
--data-urlencode 'limit=25' \
--data-urlencode 'q=76561199123456789'// روی بکاند Node.js اجرا کنید؛ secret را وارد کد مرورگر نکنید.
const response = await fetch("https://server.maxgaming.ir/api/owner-api/v1/bans?page=1&limit=25&q=76561199123456789", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.MAXGAMING_API_SECRET}`
}
});
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result.data);import os
import requests # pip install requests
response = requests.get(
"https://server.maxgaming.ir/api/owner-api/v1/bans",
headers={
"Authorization": "Bearer " + os.environ["MAXGAMING_API_SECRET"]
},
params={"page": 1, "limit": 25, "q": "76561199123456789"},
timeout=20
)
response.raise_for_status()
print(response.json())<?php
// PHP 8+ با افزونه cURL؛ فقط روی بکاند اجرا کنید.
$secret = getenv('MAXGAMING_API_SECRET') ?: throw new RuntimeException('API secret is missing');
$headers = ['Authorization: Bearer ' . $secret];
$ch = curl_init('https://server.maxgaming.ir/api/owner-api/v1/bans?page=1&limit=25&q=76561199123456789');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 20,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => $headers
]);
$raw = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($raw === false) {
$error = curl_error($ch);
curl_close($ch);
throw new RuntimeException($error);
}
curl_close($ch);
if ($status < 200 || $status >= 300) {
throw new RuntimeException("HTTP $status: $raw");
}
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT), PHP_EOL;// برنامه Console با .NET 6+؛ secret فقط در بکاند نگهداری شود.
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
var secret = Environment.GetEnvironmentVariable("MAXGAMING_API_SECRET")
?? throw new InvalidOperationException("API secret is missing");
// در سرویس دائمی، HttpClient را بین درخواستها به اشتراک بگذارید.
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(20) };
using var request = new HttpRequestMessage(HttpMethod.Get, "https://server.maxgaming.ir/api/owner-api/v1/bans?page=1&limit=25&q=76561199123456789");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secret);
using var response = await client.SendAsync(request);
var result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException($"HTTP {(int)response.StatusCode}: {result}");
Console.WriteLine(result);// فقط کتابخانه استاندارد Go؛ روی سرور خودتان اجرا کنید.
package main
import (
"fmt"
"io"
"net/http"
"os"
"time"
)
func main() {
secret := os.Getenv("MAXGAMING_API_SECRET")
if secret == "" { panic("API secret is missing") }
client := &http.Client{Timeout: 20 * time.Second}
request, err := http.NewRequest("GET", "https://server.maxgaming.ir/api/owner-api/v1/bans?page=1&limit=25&q=76561199123456789", nil)
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer " + secret)
response, err := client.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
result, err := io.ReadAll(io.LimitReader(response.Body, 2 * 1024 * 1024))
if err != nil { panic(err) }
if response.StatusCode < 200 || response.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, result))
}
fmt.Println(string(result))
}// Java 11+، بدون کتابخانه جانبی؛ فایل MaxGamingApi.java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class MaxGamingApi {
public static void main(String[] args) throws Exception {
String secret = System.getenv("MAXGAMING_API_SECRET");
if (secret == null || secret.isBlank())
throw new IllegalStateException("API secret is missing");
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10)).build();
HttpRequest.Builder request = HttpRequest.newBuilder(URI.create("https://server.maxgaming.ir/api/owner-api/v1/bans?page=1&limit=25&q=76561199123456789"))
.timeout(Duration.ofSeconds(20))
.header("Authorization", "Bearer " + secret);
request.GET();
HttpResponse<String> response = client.send(request.build(), HttpResponse.BodyHandlers.ofString());
if (response.statusCode() < 200 || response.statusCode() >= 300)
throw new IllegalStateException("HTTP " + response.statusCode() + ": " + response.body());
System.out.println(response.body());
}
}نمونه پاسخ موفق · HTTP 200
این داده صرفاً نمونه آموزشی است؛ فیلدهای اختیاری بسته به پلاگین و اطلاعات ثبتشده تغییر میکنند.
{
"success": true,
"data": {
"data": [
{
"steamid": "76561199123456789",
"data": {
"player_steamid": "76561199123456789",
"type": "BAN"
}
}
],
"hasMore": false,
"pagination": {
"currentPage": 1,
"itemsPerPage": 25,
"hasMore": false
}
}
}محدودیت صدای بازیکنان
رکوردهای نوع MUTE را دریافت کنید. میوت مربوط به صدا است و با محدودیت نوشتن در چت تفاوت دارد.
mutesپارامترهای page، limit و q اختیاریاند؛ محدودیتها در بخش صفحهبندی آمده است.
نمونه درخواست
curl --get 'https://server.maxgaming.ir/api/owner-api/v1/mutes' \
-H "Authorization: Bearer $MAXGAMING_API_SECRET" \
--data-urlencode 'page=1' \
--data-urlencode 'limit=25' \
--data-urlencode 'q=76561199123456789'// روی بکاند Node.js اجرا کنید؛ secret را وارد کد مرورگر نکنید.
const response = await fetch("https://server.maxgaming.ir/api/owner-api/v1/mutes?page=1&limit=25&q=76561199123456789", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.MAXGAMING_API_SECRET}`
}
});
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result.data);import os
import requests # pip install requests
response = requests.get(
"https://server.maxgaming.ir/api/owner-api/v1/mutes",
headers={
"Authorization": "Bearer " + os.environ["MAXGAMING_API_SECRET"]
},
params={"page": 1, "limit": 25, "q": "76561199123456789"},
timeout=20
)
response.raise_for_status()
print(response.json())<?php
// PHP 8+ با افزونه cURL؛ فقط روی بکاند اجرا کنید.
$secret = getenv('MAXGAMING_API_SECRET') ?: throw new RuntimeException('API secret is missing');
$headers = ['Authorization: Bearer ' . $secret];
$ch = curl_init('https://server.maxgaming.ir/api/owner-api/v1/mutes?page=1&limit=25&q=76561199123456789');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 20,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => $headers
]);
$raw = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($raw === false) {
$error = curl_error($ch);
curl_close($ch);
throw new RuntimeException($error);
}
curl_close($ch);
if ($status < 200 || $status >= 300) {
throw new RuntimeException("HTTP $status: $raw");
}
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT), PHP_EOL;// برنامه Console با .NET 6+؛ secret فقط در بکاند نگهداری شود.
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
var secret = Environment.GetEnvironmentVariable("MAXGAMING_API_SECRET")
?? throw new InvalidOperationException("API secret is missing");
// در سرویس دائمی، HttpClient را بین درخواستها به اشتراک بگذارید.
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(20) };
using var request = new HttpRequestMessage(HttpMethod.Get, "https://server.maxgaming.ir/api/owner-api/v1/mutes?page=1&limit=25&q=76561199123456789");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secret);
using var response = await client.SendAsync(request);
var result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException($"HTTP {(int)response.StatusCode}: {result}");
Console.WriteLine(result);// فقط کتابخانه استاندارد Go؛ روی سرور خودتان اجرا کنید.
package main
import (
"fmt"
"io"
"net/http"
"os"
"time"
)
func main() {
secret := os.Getenv("MAXGAMING_API_SECRET")
if secret == "" { panic("API secret is missing") }
client := &http.Client{Timeout: 20 * time.Second}
request, err := http.NewRequest("GET", "https://server.maxgaming.ir/api/owner-api/v1/mutes?page=1&limit=25&q=76561199123456789", nil)
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer " + secret)
response, err := client.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
result, err := io.ReadAll(io.LimitReader(response.Body, 2 * 1024 * 1024))
if err != nil { panic(err) }
if response.StatusCode < 200 || response.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, result))
}
fmt.Println(string(result))
}// Java 11+، بدون کتابخانه جانبی؛ فایل MaxGamingApi.java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class MaxGamingApi {
public static void main(String[] args) throws Exception {
String secret = System.getenv("MAXGAMING_API_SECRET");
if (secret == null || secret.isBlank())
throw new IllegalStateException("API secret is missing");
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10)).build();
HttpRequest.Builder request = HttpRequest.newBuilder(URI.create("https://server.maxgaming.ir/api/owner-api/v1/mutes?page=1&limit=25&q=76561199123456789"))
.timeout(Duration.ofSeconds(20))
.header("Authorization", "Bearer " + secret);
request.GET();
HttpResponse<String> response = client.send(request.build(), HttpResponse.BodyHandlers.ofString());
if (response.statusCode() < 200 || response.statusCode() >= 300)
throw new IllegalStateException("HTTP " + response.statusCode() + ": " + response.body());
System.out.println(response.body());
}
}نمونه پاسخ موفق · HTTP 200
این داده صرفاً نمونه آموزشی است؛ فیلدهای اختیاری بسته به پلاگین و اطلاعات ثبتشده تغییر میکنند.
{
"success": true,
"data": {
"data": [
{
"steamid": "76561199123456789",
"data": {
"player_steamid": "76561199123456789",
"type": "MUTE"
}
}
],
"hasMore": false,
"pagination": {
"currentPage": 1,
"itemsPerPage": 25,
"hasMore": false
}
}
}محدودیت چت بازیکنان
رکوردهای نوع GAG را بخوانید. گگ، محدودیت چت متنی بازیکن است. دادههای این مسیر از رکوردهای ارتباطی پلاگین سرور میآیند.
gagsپارامترهای page، limit و q اختیاریاند؛ محدودیتها در بخش صفحهبندی آمده است.
نمونه درخواست
curl --get 'https://server.maxgaming.ir/api/owner-api/v1/gags' \
-H "Authorization: Bearer $MAXGAMING_API_SECRET" \
--data-urlencode 'page=1' \
--data-urlencode 'limit=25' \
--data-urlencode 'q=76561199123456789'// روی بکاند Node.js اجرا کنید؛ secret را وارد کد مرورگر نکنید.
const response = await fetch("https://server.maxgaming.ir/api/owner-api/v1/gags?page=1&limit=25&q=76561199123456789", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.MAXGAMING_API_SECRET}`
}
});
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result.data);import os
import requests # pip install requests
response = requests.get(
"https://server.maxgaming.ir/api/owner-api/v1/gags",
headers={
"Authorization": "Bearer " + os.environ["MAXGAMING_API_SECRET"]
},
params={"page": 1, "limit": 25, "q": "76561199123456789"},
timeout=20
)
response.raise_for_status()
print(response.json())<?php
// PHP 8+ با افزونه cURL؛ فقط روی بکاند اجرا کنید.
$secret = getenv('MAXGAMING_API_SECRET') ?: throw new RuntimeException('API secret is missing');
$headers = ['Authorization: Bearer ' . $secret];
$ch = curl_init('https://server.maxgaming.ir/api/owner-api/v1/gags?page=1&limit=25&q=76561199123456789');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 20,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => $headers
]);
$raw = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($raw === false) {
$error = curl_error($ch);
curl_close($ch);
throw new RuntimeException($error);
}
curl_close($ch);
if ($status < 200 || $status >= 300) {
throw new RuntimeException("HTTP $status: $raw");
}
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT), PHP_EOL;// برنامه Console با .NET 6+؛ secret فقط در بکاند نگهداری شود.
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
var secret = Environment.GetEnvironmentVariable("MAXGAMING_API_SECRET")
?? throw new InvalidOperationException("API secret is missing");
// در سرویس دائمی، HttpClient را بین درخواستها به اشتراک بگذارید.
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(20) };
using var request = new HttpRequestMessage(HttpMethod.Get, "https://server.maxgaming.ir/api/owner-api/v1/gags?page=1&limit=25&q=76561199123456789");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secret);
using var response = await client.SendAsync(request);
var result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException($"HTTP {(int)response.StatusCode}: {result}");
Console.WriteLine(result);// فقط کتابخانه استاندارد Go؛ روی سرور خودتان اجرا کنید.
package main
import (
"fmt"
"io"
"net/http"
"os"
"time"
)
func main() {
secret := os.Getenv("MAXGAMING_API_SECRET")
if secret == "" { panic("API secret is missing") }
client := &http.Client{Timeout: 20 * time.Second}
request, err := http.NewRequest("GET", "https://server.maxgaming.ir/api/owner-api/v1/gags?page=1&limit=25&q=76561199123456789", nil)
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer " + secret)
response, err := client.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
result, err := io.ReadAll(io.LimitReader(response.Body, 2 * 1024 * 1024))
if err != nil { panic(err) }
if response.StatusCode < 200 || response.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, result))
}
fmt.Println(string(result))
}// Java 11+، بدون کتابخانه جانبی؛ فایل MaxGamingApi.java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class MaxGamingApi {
public static void main(String[] args) throws Exception {
String secret = System.getenv("MAXGAMING_API_SECRET");
if (secret == null || secret.isBlank())
throw new IllegalStateException("API secret is missing");
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10)).build();
HttpRequest.Builder request = HttpRequest.newBuilder(URI.create("https://server.maxgaming.ir/api/owner-api/v1/gags?page=1&limit=25&q=76561199123456789"))
.timeout(Duration.ofSeconds(20))
.header("Authorization", "Bearer " + secret);
request.GET();
HttpResponse<String> response = client.send(request.build(), HttpResponse.BodyHandlers.ofString());
if (response.statusCode() < 200 || response.statusCode() >= 300)
throw new IllegalStateException("HTTP " + response.statusCode() + ": " + response.body());
System.out.println(response.body());
}
}نمونه پاسخ موفق · HTTP 200
این داده صرفاً نمونه آموزشی است؛ فیلدهای اختیاری بسته به پلاگین و اطلاعات ثبتشده تغییر میکنند.
{
"success": true,
"data": {
"data": [
{
"steamid": "76561199123456789",
"data": {
"player_steamid": "76561199123456789",
"type": "GAG"
}
}
],
"hasMore": false,
"pagination": {
"currentPage": 1,
"itemsPerPage": 25,
"hasMore": false
}
}
}فهرست VIPها
VIPهای ثبتشده را بررسی کنید. وجود رکورد الزاماً به معنی فعال بودن آن نیست؛ زمان ends را با زمان فعلی، به ثانیه، مقایسه کنید.
vips.readپارامترهای page، limit و q اختیاریاند؛ محدودیتها در بخش صفحهبندی آمده است.
نمونه درخواست
curl --get 'https://server.maxgaming.ir/api/owner-api/v1/vips' \
-H "Authorization: Bearer $MAXGAMING_API_SECRET" \
--data-urlencode 'page=1' \
--data-urlencode 'limit=25' \
--data-urlencode 'q=76561199123456789'// روی بکاند Node.js اجرا کنید؛ secret را وارد کد مرورگر نکنید.
const response = await fetch("https://server.maxgaming.ir/api/owner-api/v1/vips?page=1&limit=25&q=76561199123456789", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.MAXGAMING_API_SECRET}`
}
});
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result.data);import os
import requests # pip install requests
response = requests.get(
"https://server.maxgaming.ir/api/owner-api/v1/vips",
headers={
"Authorization": "Bearer " + os.environ["MAXGAMING_API_SECRET"]
},
params={"page": 1, "limit": 25, "q": "76561199123456789"},
timeout=20
)
response.raise_for_status()
print(response.json())<?php
// PHP 8+ با افزونه cURL؛ فقط روی بکاند اجرا کنید.
$secret = getenv('MAXGAMING_API_SECRET') ?: throw new RuntimeException('API secret is missing');
$headers = ['Authorization: Bearer ' . $secret];
$ch = curl_init('https://server.maxgaming.ir/api/owner-api/v1/vips?page=1&limit=25&q=76561199123456789');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 20,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => $headers
]);
$raw = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($raw === false) {
$error = curl_error($ch);
curl_close($ch);
throw new RuntimeException($error);
}
curl_close($ch);
if ($status < 200 || $status >= 300) {
throw new RuntimeException("HTTP $status: $raw");
}
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT), PHP_EOL;// برنامه Console با .NET 6+؛ secret فقط در بکاند نگهداری شود.
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
var secret = Environment.GetEnvironmentVariable("MAXGAMING_API_SECRET")
?? throw new InvalidOperationException("API secret is missing");
// در سرویس دائمی، HttpClient را بین درخواستها به اشتراک بگذارید.
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(20) };
using var request = new HttpRequestMessage(HttpMethod.Get, "https://server.maxgaming.ir/api/owner-api/v1/vips?page=1&limit=25&q=76561199123456789");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secret);
using var response = await client.SendAsync(request);
var result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException($"HTTP {(int)response.StatusCode}: {result}");
Console.WriteLine(result);// فقط کتابخانه استاندارد Go؛ روی سرور خودتان اجرا کنید.
package main
import (
"fmt"
"io"
"net/http"
"os"
"time"
)
func main() {
secret := os.Getenv("MAXGAMING_API_SECRET")
if secret == "" { panic("API secret is missing") }
client := &http.Client{Timeout: 20 * time.Second}
request, err := http.NewRequest("GET", "https://server.maxgaming.ir/api/owner-api/v1/vips?page=1&limit=25&q=76561199123456789", nil)
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer " + secret)
response, err := client.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
result, err := io.ReadAll(io.LimitReader(response.Body, 2 * 1024 * 1024))
if err != nil { panic(err) }
if response.StatusCode < 200 || response.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, result))
}
fmt.Println(string(result))
}// Java 11+، بدون کتابخانه جانبی؛ فایل MaxGamingApi.java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class MaxGamingApi {
public static void main(String[] args) throws Exception {
String secret = System.getenv("MAXGAMING_API_SECRET");
if (secret == null || secret.isBlank())
throw new IllegalStateException("API secret is missing");
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10)).build();
HttpRequest.Builder request = HttpRequest.newBuilder(URI.create("https://server.maxgaming.ir/api/owner-api/v1/vips?page=1&limit=25&q=76561199123456789"))
.timeout(Duration.ofSeconds(20))
.header("Authorization", "Bearer " + secret);
request.GET();
HttpResponse<String> response = client.send(request.build(), HttpResponse.BodyHandlers.ofString());
if (response.statusCode() < 200 || response.statusCode() >= 300)
throw new IllegalStateException("HTTP " + response.statusCode() + ": " + response.body());
System.out.println(response.body());
}
}نمونه پاسخ موفق · HTTP 200
این داده صرفاً نمونه آموزشی است؛ فیلدهای اختیاری بسته به پلاگین و اطلاعات ثبتشده تغییر میکنند.
{
"success": true,
"data": {
"data": [
{
"steamid": "76561199123456789",
"data": {
"player_steamid": "76561199123456789",
"player_name": "Player",
"level": 1,
"ends": 1893456000
}
}
],
"hasMore": false,
"pagination": {
"currentPage": 1,
"itemsPerPage": 25,
"hasMore": false
}
}
}گزارشهای دیسکورد
لاگهای ذخیرهشده همین سرور را با صفحهبندی و جستجو بخوانید. ربات دیسکورد سرور باید فعال باشد؛ خرید سیستم API بهتنهایی این قابلیت را فعال نمیکند.
logsپارامترهای page، limit و q اختیاریاند؛ محدودیتها در بخش صفحهبندی آمده است.
نمونه درخواست
curl --get 'https://server.maxgaming.ir/api/owner-api/v1/logs' \
-H "Authorization: Bearer $MAXGAMING_API_SECRET" \
--data-urlencode 'page=1' \
--data-urlencode 'limit=25' \
--data-urlencode 'q=76561199123456789'// روی بکاند Node.js اجرا کنید؛ secret را وارد کد مرورگر نکنید.
const response = await fetch("https://server.maxgaming.ir/api/owner-api/v1/logs?page=1&limit=25&q=76561199123456789", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.MAXGAMING_API_SECRET}`
}
});
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result.data);import os
import requests # pip install requests
response = requests.get(
"https://server.maxgaming.ir/api/owner-api/v1/logs",
headers={
"Authorization": "Bearer " + os.environ["MAXGAMING_API_SECRET"]
},
params={"page": 1, "limit": 25, "q": "76561199123456789"},
timeout=20
)
response.raise_for_status()
print(response.json())<?php
// PHP 8+ با افزونه cURL؛ فقط روی بکاند اجرا کنید.
$secret = getenv('MAXGAMING_API_SECRET') ?: throw new RuntimeException('API secret is missing');
$headers = ['Authorization: Bearer ' . $secret];
$ch = curl_init('https://server.maxgaming.ir/api/owner-api/v1/logs?page=1&limit=25&q=76561199123456789');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 20,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => $headers
]);
$raw = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($raw === false) {
$error = curl_error($ch);
curl_close($ch);
throw new RuntimeException($error);
}
curl_close($ch);
if ($status < 200 || $status >= 300) {
throw new RuntimeException("HTTP $status: $raw");
}
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT), PHP_EOL;// برنامه Console با .NET 6+؛ secret فقط در بکاند نگهداری شود.
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
var secret = Environment.GetEnvironmentVariable("MAXGAMING_API_SECRET")
?? throw new InvalidOperationException("API secret is missing");
// در سرویس دائمی، HttpClient را بین درخواستها به اشتراک بگذارید.
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(20) };
using var request = new HttpRequestMessage(HttpMethod.Get, "https://server.maxgaming.ir/api/owner-api/v1/logs?page=1&limit=25&q=76561199123456789");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secret);
using var response = await client.SendAsync(request);
var result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException($"HTTP {(int)response.StatusCode}: {result}");
Console.WriteLine(result);// فقط کتابخانه استاندارد Go؛ روی سرور خودتان اجرا کنید.
package main
import (
"fmt"
"io"
"net/http"
"os"
"time"
)
func main() {
secret := os.Getenv("MAXGAMING_API_SECRET")
if secret == "" { panic("API secret is missing") }
client := &http.Client{Timeout: 20 * time.Second}
request, err := http.NewRequest("GET", "https://server.maxgaming.ir/api/owner-api/v1/logs?page=1&limit=25&q=76561199123456789", nil)
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer " + secret)
response, err := client.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
result, err := io.ReadAll(io.LimitReader(response.Body, 2 * 1024 * 1024))
if err != nil { panic(err) }
if response.StatusCode < 200 || response.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, result))
}
fmt.Println(string(result))
}// Java 11+، بدون کتابخانه جانبی؛ فایل MaxGamingApi.java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class MaxGamingApi {
public static void main(String[] args) throws Exception {
String secret = System.getenv("MAXGAMING_API_SECRET");
if (secret == null || secret.isBlank())
throw new IllegalStateException("API secret is missing");
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10)).build();
HttpRequest.Builder request = HttpRequest.newBuilder(URI.create("https://server.maxgaming.ir/api/owner-api/v1/logs?page=1&limit=25&q=76561199123456789"))
.timeout(Duration.ofSeconds(20))
.header("Authorization", "Bearer " + secret);
request.GET();
HttpResponse<String> response = client.send(request.build(), HttpResponse.BodyHandlers.ofString());
if (response.statusCode() < 200 || response.statusCode() >= 300)
throw new IllegalStateException("HTTP " + response.statusCode() + ": " + response.body());
System.out.println(response.body());
}
}نمونه پاسخ موفق · HTTP 200
این داده صرفاً نمونه آموزشی است؛ فیلدهای اختیاری بسته به پلاگین و اطلاعات ثبتشده تغییر میکنند.
{
"success": true,
"data": {
"data": [
{
"type": "vip",
"botname": "Server",
"steamid": "76561199123456789",
"dec": "VIP بازیکن ثبت شد."
}
],
"hasMore": false,
"pagination": {
"currentPage": 1,
"itemsPerPage": 25,
"hasMore": false
}
}
}افزودن VIP
VIP را با SteamID64، نام بازیکن، سطح و زمان پایان ثبت کنید. سرویس فعلی برای SteamID موجود نیز اطلاعات را بهروزرسانی میکند؛ قبل از افزودن، فهرست را بررسی کنید.
vips.write| پارامتر | نوع | توضیح |
|---|---|---|
| playerSteamId | string | SteamID64 هفدهرقمی، مانند 76561199123456789؛ نه SteamID2 و نه لینک پروفایل. |
| playerName | string | نام نمایشی بازیکن، حداکثر ۱۲۰ نویسه، بدون نویسههای کنترلی. |
| level | integer | سطح VIP، عدد صحیح از ۱ تا ۱۰۰؛ سطح متناسب با تنظیمات پلاگین خود انتخاب کنید. |
| ends | integer | زمان نهایی پایان به ثانیه Unix، از ۱ تا 2147483647؛ میلیثانیه و مقدار منفی پذیرفته نمیشود. |
نمونه درخواست
در نمونههای PHP، C#، Go و Java، متغیر محیطی MAXGAMING_IDEMPOTENCY_KEY را برابر یک UUID نسخه ۴ قرار دهید. برای عملیات جدید، UUID تازه بسازید؛ هنگام تکرار همان عملیات، همان مقدار را نگه دارید.
curl --request POST 'https://server.maxgaming.ir/api/owner-api/v1/vips/create' \
-H "Authorization: Bearer $MAXGAMING_API_SECRET" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: YOUR_UUID_V4' \
--data '{"playerSteamId":"76561199123456789","playerName":"Player","level":1,"ends":1893456000}'// روی بکاند Node.js اجرا کنید؛ secret را وارد کد مرورگر نکنید.
const response = await fetch("https://server.maxgaming.ir/api/owner-api/v1/vips/create", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.MAXGAMING_API_SECRET}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID()
},
body: JSON.stringify({
"playerSteamId": "76561199123456789",
"playerName": "Player",
"level": 1,
"ends": 1893456000
})
});
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result.data);import os, uuid
import requests # pip install requests
response = requests.post(
"https://server.maxgaming.ir/api/owner-api/v1/vips/create",
headers={
"Authorization": "Bearer " + os.environ["MAXGAMING_API_SECRET"],
"Idempotency-Key": str(uuid.uuid4())
},
json={
"playerSteamId": "76561199123456789",
"playerName": "Player",
"level": 1,
"ends": 1893456000
},
timeout=20
)
response.raise_for_status()
print(response.json())<?php
// PHP 8+ با افزونه cURL؛ فقط روی بکاند اجرا کنید.
$secret = getenv('MAXGAMING_API_SECRET') ?: throw new RuntimeException('API secret is missing');
$headers = ['Authorization: Bearer ' . $secret];
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
$operationId = getenv('MAXGAMING_IDEMPOTENCY_KEY') ?: throw new RuntimeException('Operation UUID is missing');
$headers[] = 'Content-Type: application/json';
$headers[] = 'Idempotency-Key: ' . $operationId;
$ch = curl_init('https://server.maxgaming.ir/api/owner-api/v1/vips/create');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 20,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => '{"playerSteamId":"76561199123456789","playerName":"Player","level":1,"ends":1893456000}'
]);
$raw = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($raw === false) {
$error = curl_error($ch);
curl_close($ch);
throw new RuntimeException($error);
}
curl_close($ch);
if ($status < 200 || $status >= 300) {
throw new RuntimeException("HTTP $status: $raw");
}
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT), PHP_EOL;// برنامه Console با .NET 6+؛ secret فقط در بکاند نگهداری شود.
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
var secret = Environment.GetEnvironmentVariable("MAXGAMING_API_SECRET")
?? throw new InvalidOperationException("API secret is missing");
// در سرویس دائمی، HttpClient را بین درخواستها به اشتراک بگذارید.
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(20) };
using var request = new HttpRequestMessage(HttpMethod.Post, "https://server.maxgaming.ir/api/owner-api/v1/vips/create");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secret);
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
var operationId = Environment.GetEnvironmentVariable("MAXGAMING_IDEMPOTENCY_KEY")
?? throw new InvalidOperationException("Operation UUID is missing");
request.Headers.Add("Idempotency-Key", operationId);
request.Content = new StringContent("{\"playerSteamId\":\"76561199123456789\",\"playerName\":\"Player\",\"level\":1,\"ends\":1893456000}", Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException($"HTTP {(int)response.StatusCode}: {result}");
Console.WriteLine(result);// فقط کتابخانه استاندارد Go؛ روی سرور خودتان اجرا کنید.
package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
"time"
)
func main() {
secret := os.Getenv("MAXGAMING_API_SECRET")
if secret == "" { panic("API secret is missing") }
client := &http.Client{Timeout: 20 * time.Second}
request, err := http.NewRequest("POST", "https://server.maxgaming.ir/api/owner-api/v1/vips/create", strings.NewReader("{\"playerSteamId\":\"76561199123456789\",\"playerName\":\"Player\",\"level\":1,\"ends\":1893456000}"))
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer " + secret)
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
operationID := os.Getenv("MAXGAMING_IDEMPOTENCY_KEY")
if operationID == "" { panic("Operation UUID is missing") }
request.Header.Set("Idempotency-Key", operationID)
request.Header.Set("Content-Type", "application/json")
response, err := client.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
result, err := io.ReadAll(io.LimitReader(response.Body, 2 * 1024 * 1024))
if err != nil { panic(err) }
if response.StatusCode < 200 || response.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, result))
}
fmt.Println(string(result))
}// Java 11+، بدون کتابخانه جانبی؛ فایل MaxGamingApi.java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class MaxGamingApi {
public static void main(String[] args) throws Exception {
String secret = System.getenv("MAXGAMING_API_SECRET");
if (secret == null || secret.isBlank())
throw new IllegalStateException("API secret is missing");
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10)).build();
HttpRequest.Builder request = HttpRequest.newBuilder(URI.create("https://server.maxgaming.ir/api/owner-api/v1/vips/create"))
.timeout(Duration.ofSeconds(20))
.header("Authorization", "Bearer " + secret);
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
String operationId = System.getenv("MAXGAMING_IDEMPOTENCY_KEY");
if (operationId == null || operationId.isBlank())
throw new IllegalStateException("Operation UUID is missing");
request.header("Idempotency-Key", operationId)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\"playerSteamId\":\"76561199123456789\",\"playerName\":\"Player\",\"level\":1,\"ends\":1893456000}"));
HttpResponse<String> response = client.send(request.build(), HttpResponse.BodyHandlers.ofString());
if (response.statusCode() < 200 || response.statusCode() >= 300)
throw new IllegalStateException("HTTP " + response.statusCode() + ": " + response.body());
System.out.println(response.body());
}
}نمونه پاسخ موفق · HTTP 200
این داده صرفاً نمونه آموزشی است؛ فیلدهای اختیاری بسته به پلاگین و اطلاعات ثبتشده تغییر میکنند.
{
"success": true,
"data": {
"success": true,
"result": {
"player_steamid": "76561199123456789",
"level": 1,
"ends": 1893456000
}
}
}ویرایش VIP
مقادیر نهایی VIP را ارسال کنید، نه تعداد روزی که باید اضافه شود. برای تمدید، زمان پایان جدید را محاسبه کنید. این مسیر PATCH نیست؛ تمام چهار فیلد زیر را بفرستید.
vips.write| پارامتر | نوع | توضیح |
|---|---|---|
| playerSteamId | string | SteamID64 هفدهرقمی، مانند 76561199123456789؛ نه SteamID2 و نه لینک پروفایل. |
| playerName | string | نام نمایشی بازیکن، حداکثر ۱۲۰ نویسه، بدون نویسههای کنترلی. |
| level | integer | سطح VIP، عدد صحیح از ۱ تا ۱۰۰؛ سطح متناسب با تنظیمات پلاگین خود انتخاب کنید. |
| ends | integer | زمان نهایی پایان به ثانیه Unix، از ۱ تا 2147483647؛ میلیثانیه و مقدار منفی پذیرفته نمیشود. |
نمونه درخواست
در نمونههای PHP، C#، Go و Java، متغیر محیطی MAXGAMING_IDEMPOTENCY_KEY را برابر یک UUID نسخه ۴ قرار دهید. برای عملیات جدید، UUID تازه بسازید؛ هنگام تکرار همان عملیات، همان مقدار را نگه دارید.
curl --request POST 'https://server.maxgaming.ir/api/owner-api/v1/vips/update' \
-H "Authorization: Bearer $MAXGAMING_API_SECRET" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: YOUR_UUID_V4' \
--data '{"playerSteamId":"76561199123456789","playerName":"Player","level":2,"ends":1896134400}'// روی بکاند Node.js اجرا کنید؛ secret را وارد کد مرورگر نکنید.
const response = await fetch("https://server.maxgaming.ir/api/owner-api/v1/vips/update", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.MAXGAMING_API_SECRET}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID()
},
body: JSON.stringify({
"playerSteamId": "76561199123456789",
"playerName": "Player",
"level": 2,
"ends": 1896134400
})
});
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result.data);import os, uuid
import requests # pip install requests
response = requests.post(
"https://server.maxgaming.ir/api/owner-api/v1/vips/update",
headers={
"Authorization": "Bearer " + os.environ["MAXGAMING_API_SECRET"],
"Idempotency-Key": str(uuid.uuid4())
},
json={
"playerSteamId": "76561199123456789",
"playerName": "Player",
"level": 2,
"ends": 1896134400
},
timeout=20
)
response.raise_for_status()
print(response.json())<?php
// PHP 8+ با افزونه cURL؛ فقط روی بکاند اجرا کنید.
$secret = getenv('MAXGAMING_API_SECRET') ?: throw new RuntimeException('API secret is missing');
$headers = ['Authorization: Bearer ' . $secret];
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
$operationId = getenv('MAXGAMING_IDEMPOTENCY_KEY') ?: throw new RuntimeException('Operation UUID is missing');
$headers[] = 'Content-Type: application/json';
$headers[] = 'Idempotency-Key: ' . $operationId;
$ch = curl_init('https://server.maxgaming.ir/api/owner-api/v1/vips/update');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 20,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => '{"playerSteamId":"76561199123456789","playerName":"Player","level":2,"ends":1896134400}'
]);
$raw = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($raw === false) {
$error = curl_error($ch);
curl_close($ch);
throw new RuntimeException($error);
}
curl_close($ch);
if ($status < 200 || $status >= 300) {
throw new RuntimeException("HTTP $status: $raw");
}
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT), PHP_EOL;// برنامه Console با .NET 6+؛ secret فقط در بکاند نگهداری شود.
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
var secret = Environment.GetEnvironmentVariable("MAXGAMING_API_SECRET")
?? throw new InvalidOperationException("API secret is missing");
// در سرویس دائمی، HttpClient را بین درخواستها به اشتراک بگذارید.
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(20) };
using var request = new HttpRequestMessage(HttpMethod.Post, "https://server.maxgaming.ir/api/owner-api/v1/vips/update");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secret);
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
var operationId = Environment.GetEnvironmentVariable("MAXGAMING_IDEMPOTENCY_KEY")
?? throw new InvalidOperationException("Operation UUID is missing");
request.Headers.Add("Idempotency-Key", operationId);
request.Content = new StringContent("{\"playerSteamId\":\"76561199123456789\",\"playerName\":\"Player\",\"level\":2,\"ends\":1896134400}", Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException($"HTTP {(int)response.StatusCode}: {result}");
Console.WriteLine(result);// فقط کتابخانه استاندارد Go؛ روی سرور خودتان اجرا کنید.
package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
"time"
)
func main() {
secret := os.Getenv("MAXGAMING_API_SECRET")
if secret == "" { panic("API secret is missing") }
client := &http.Client{Timeout: 20 * time.Second}
request, err := http.NewRequest("POST", "https://server.maxgaming.ir/api/owner-api/v1/vips/update", strings.NewReader("{\"playerSteamId\":\"76561199123456789\",\"playerName\":\"Player\",\"level\":2,\"ends\":1896134400}"))
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer " + secret)
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
operationID := os.Getenv("MAXGAMING_IDEMPOTENCY_KEY")
if operationID == "" { panic("Operation UUID is missing") }
request.Header.Set("Idempotency-Key", operationID)
request.Header.Set("Content-Type", "application/json")
response, err := client.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
result, err := io.ReadAll(io.LimitReader(response.Body, 2 * 1024 * 1024))
if err != nil { panic(err) }
if response.StatusCode < 200 || response.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, result))
}
fmt.Println(string(result))
}// Java 11+، بدون کتابخانه جانبی؛ فایل MaxGamingApi.java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class MaxGamingApi {
public static void main(String[] args) throws Exception {
String secret = System.getenv("MAXGAMING_API_SECRET");
if (secret == null || secret.isBlank())
throw new IllegalStateException("API secret is missing");
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10)).build();
HttpRequest.Builder request = HttpRequest.newBuilder(URI.create("https://server.maxgaming.ir/api/owner-api/v1/vips/update"))
.timeout(Duration.ofSeconds(20))
.header("Authorization", "Bearer " + secret);
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
String operationId = System.getenv("MAXGAMING_IDEMPOTENCY_KEY");
if (operationId == null || operationId.isBlank())
throw new IllegalStateException("Operation UUID is missing");
request.header("Idempotency-Key", operationId)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\"playerSteamId\":\"76561199123456789\",\"playerName\":\"Player\",\"level\":2,\"ends\":1896134400}"));
HttpResponse<String> response = client.send(request.build(), HttpResponse.BodyHandlers.ofString());
if (response.statusCode() < 200 || response.statusCode() >= 300)
throw new IllegalStateException("HTTP " + response.statusCode() + ": " + response.body());
System.out.println(response.body());
}
}نمونه پاسخ موفق · HTTP 200
این داده صرفاً نمونه آموزشی است؛ فیلدهای اختیاری بسته به پلاگین و اطلاعات ثبتشده تغییر میکنند.
{
"success": true,
"data": {
"success": true,
"result": {
"player_steamid": "76561199123456789",
"level": 2,
"ends": 1896134400
}
}
}پایان دسترسی VIP
زمان پایان را به زمان فعلی تغییر دهید؛ رکورد VIP حذف نمیشود. برای متوقف کردن دسترسی بدون پاک کردن رکورد، این مسیر را انتخاب کنید.
vips.write| پارامتر | نوع | توضیح |
|---|---|---|
| playerSteamId | string | SteamID64 هفدهرقمی، مانند 76561199123456789؛ نه SteamID2 و نه لینک پروفایل. |
نمونه درخواست
در نمونههای PHP، C#، Go و Java، متغیر محیطی MAXGAMING_IDEMPOTENCY_KEY را برابر یک UUID نسخه ۴ قرار دهید. برای عملیات جدید، UUID تازه بسازید؛ هنگام تکرار همان عملیات، همان مقدار را نگه دارید.
curl --request POST 'https://server.maxgaming.ir/api/owner-api/v1/vips/remove' \
-H "Authorization: Bearer $MAXGAMING_API_SECRET" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: YOUR_UUID_V4' \
--data '{"playerSteamId":"76561199123456789"}'// روی بکاند Node.js اجرا کنید؛ secret را وارد کد مرورگر نکنید.
const response = await fetch("https://server.maxgaming.ir/api/owner-api/v1/vips/remove", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.MAXGAMING_API_SECRET}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID()
},
body: JSON.stringify({
"playerSteamId": "76561199123456789"
})
});
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result.data);import os, uuid
import requests # pip install requests
response = requests.post(
"https://server.maxgaming.ir/api/owner-api/v1/vips/remove",
headers={
"Authorization": "Bearer " + os.environ["MAXGAMING_API_SECRET"],
"Idempotency-Key": str(uuid.uuid4())
},
json={
"playerSteamId": "76561199123456789"
},
timeout=20
)
response.raise_for_status()
print(response.json())<?php
// PHP 8+ با افزونه cURL؛ فقط روی بکاند اجرا کنید.
$secret = getenv('MAXGAMING_API_SECRET') ?: throw new RuntimeException('API secret is missing');
$headers = ['Authorization: Bearer ' . $secret];
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
$operationId = getenv('MAXGAMING_IDEMPOTENCY_KEY') ?: throw new RuntimeException('Operation UUID is missing');
$headers[] = 'Content-Type: application/json';
$headers[] = 'Idempotency-Key: ' . $operationId;
$ch = curl_init('https://server.maxgaming.ir/api/owner-api/v1/vips/remove');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 20,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => '{"playerSteamId":"76561199123456789"}'
]);
$raw = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($raw === false) {
$error = curl_error($ch);
curl_close($ch);
throw new RuntimeException($error);
}
curl_close($ch);
if ($status < 200 || $status >= 300) {
throw new RuntimeException("HTTP $status: $raw");
}
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT), PHP_EOL;// برنامه Console با .NET 6+؛ secret فقط در بکاند نگهداری شود.
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
var secret = Environment.GetEnvironmentVariable("MAXGAMING_API_SECRET")
?? throw new InvalidOperationException("API secret is missing");
// در سرویس دائمی، HttpClient را بین درخواستها به اشتراک بگذارید.
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(20) };
using var request = new HttpRequestMessage(HttpMethod.Post, "https://server.maxgaming.ir/api/owner-api/v1/vips/remove");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secret);
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
var operationId = Environment.GetEnvironmentVariable("MAXGAMING_IDEMPOTENCY_KEY")
?? throw new InvalidOperationException("Operation UUID is missing");
request.Headers.Add("Idempotency-Key", operationId);
request.Content = new StringContent("{\"playerSteamId\":\"76561199123456789\"}", Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException($"HTTP {(int)response.StatusCode}: {result}");
Console.WriteLine(result);// فقط کتابخانه استاندارد Go؛ روی سرور خودتان اجرا کنید.
package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
"time"
)
func main() {
secret := os.Getenv("MAXGAMING_API_SECRET")
if secret == "" { panic("API secret is missing") }
client := &http.Client{Timeout: 20 * time.Second}
request, err := http.NewRequest("POST", "https://server.maxgaming.ir/api/owner-api/v1/vips/remove", strings.NewReader("{\"playerSteamId\":\"76561199123456789\"}"))
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer " + secret)
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
operationID := os.Getenv("MAXGAMING_IDEMPOTENCY_KEY")
if operationID == "" { panic("Operation UUID is missing") }
request.Header.Set("Idempotency-Key", operationID)
request.Header.Set("Content-Type", "application/json")
response, err := client.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
result, err := io.ReadAll(io.LimitReader(response.Body, 2 * 1024 * 1024))
if err != nil { panic(err) }
if response.StatusCode < 200 || response.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, result))
}
fmt.Println(string(result))
}// Java 11+، بدون کتابخانه جانبی؛ فایل MaxGamingApi.java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class MaxGamingApi {
public static void main(String[] args) throws Exception {
String secret = System.getenv("MAXGAMING_API_SECRET");
if (secret == null || secret.isBlank())
throw new IllegalStateException("API secret is missing");
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10)).build();
HttpRequest.Builder request = HttpRequest.newBuilder(URI.create("https://server.maxgaming.ir/api/owner-api/v1/vips/remove"))
.timeout(Duration.ofSeconds(20))
.header("Authorization", "Bearer " + secret);
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
String operationId = System.getenv("MAXGAMING_IDEMPOTENCY_KEY");
if (operationId == null || operationId.isBlank())
throw new IllegalStateException("Operation UUID is missing");
request.header("Idempotency-Key", operationId)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\"playerSteamId\":\"76561199123456789\"}"));
HttpResponse<String> response = client.send(request.build(), HttpResponse.BodyHandlers.ofString());
if (response.statusCode() < 200 || response.statusCode() >= 300)
throw new IllegalStateException("HTTP " + response.statusCode() + ": " + response.body());
System.out.println(response.body());
}
}نمونه پاسخ موفق · HTTP 200
این داده صرفاً نمونه آموزشی است؛ فیلدهای اختیاری بسته به پلاگین و اطلاعات ثبتشده تغییر میکنند.
{
"success": true,
"data": {
"success": true,
"result": {
"player_steamid": "76561199123456789"
}
}
}حذف نهایی VIP
رکورد VIP را حذف کنید. این کار با منقضی کردن VIP متفاوت و برگشتناپذیر است. برای تأیید، SteamID64 را عیناً در confirm تکرار کنید.
vips.write| پارامتر | نوع | توضیح |
|---|---|---|
| playerSteamId | string | SteamID64 هفدهرقمی، مانند 76561199123456789؛ نه SteamID2 و نه لینک پروفایل. |
| confirm | string | فقط برای حذف نهایی؛ باید دقیقاً برابر playerSteamId باشد. |
نمونه درخواست
در نمونههای PHP، C#، Go و Java، متغیر محیطی MAXGAMING_IDEMPOTENCY_KEY را برابر یک UUID نسخه ۴ قرار دهید. برای عملیات جدید، UUID تازه بسازید؛ هنگام تکرار همان عملیات، همان مقدار را نگه دارید.
curl --request POST 'https://server.maxgaming.ir/api/owner-api/v1/vips/delete' \
-H "Authorization: Bearer $MAXGAMING_API_SECRET" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: YOUR_UUID_V4' \
--data '{"playerSteamId":"76561199123456789","confirm":"76561199123456789"}'// روی بکاند Node.js اجرا کنید؛ secret را وارد کد مرورگر نکنید.
const response = await fetch("https://server.maxgaming.ir/api/owner-api/v1/vips/delete", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.MAXGAMING_API_SECRET}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID()
},
body: JSON.stringify({
"playerSteamId": "76561199123456789",
"confirm": "76561199123456789"
})
});
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result.data);import os, uuid
import requests # pip install requests
response = requests.post(
"https://server.maxgaming.ir/api/owner-api/v1/vips/delete",
headers={
"Authorization": "Bearer " + os.environ["MAXGAMING_API_SECRET"],
"Idempotency-Key": str(uuid.uuid4())
},
json={
"playerSteamId": "76561199123456789",
"confirm": "76561199123456789"
},
timeout=20
)
response.raise_for_status()
print(response.json())<?php
// PHP 8+ با افزونه cURL؛ فقط روی بکاند اجرا کنید.
$secret = getenv('MAXGAMING_API_SECRET') ?: throw new RuntimeException('API secret is missing');
$headers = ['Authorization: Bearer ' . $secret];
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
$operationId = getenv('MAXGAMING_IDEMPOTENCY_KEY') ?: throw new RuntimeException('Operation UUID is missing');
$headers[] = 'Content-Type: application/json';
$headers[] = 'Idempotency-Key: ' . $operationId;
$ch = curl_init('https://server.maxgaming.ir/api/owner-api/v1/vips/delete');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 20,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => '{"playerSteamId":"76561199123456789","confirm":"76561199123456789"}'
]);
$raw = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($raw === false) {
$error = curl_error($ch);
curl_close($ch);
throw new RuntimeException($error);
}
curl_close($ch);
if ($status < 200 || $status >= 300) {
throw new RuntimeException("HTTP $status: $raw");
}
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT), PHP_EOL;// برنامه Console با .NET 6+؛ secret فقط در بکاند نگهداری شود.
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
var secret = Environment.GetEnvironmentVariable("MAXGAMING_API_SECRET")
?? throw new InvalidOperationException("API secret is missing");
// در سرویس دائمی، HttpClient را بین درخواستها به اشتراک بگذارید.
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(20) };
using var request = new HttpRequestMessage(HttpMethod.Post, "https://server.maxgaming.ir/api/owner-api/v1/vips/delete");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secret);
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
var operationId = Environment.GetEnvironmentVariable("MAXGAMING_IDEMPOTENCY_KEY")
?? throw new InvalidOperationException("Operation UUID is missing");
request.Headers.Add("Idempotency-Key", operationId);
request.Content = new StringContent("{\"playerSteamId\":\"76561199123456789\",\"confirm\":\"76561199123456789\"}", Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException($"HTTP {(int)response.StatusCode}: {result}");
Console.WriteLine(result);// فقط کتابخانه استاندارد Go؛ روی سرور خودتان اجرا کنید.
package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
"time"
)
func main() {
secret := os.Getenv("MAXGAMING_API_SECRET")
if secret == "" { panic("API secret is missing") }
client := &http.Client{Timeout: 20 * time.Second}
request, err := http.NewRequest("POST", "https://server.maxgaming.ir/api/owner-api/v1/vips/delete", strings.NewReader("{\"playerSteamId\":\"76561199123456789\",\"confirm\":\"76561199123456789\"}"))
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer " + secret)
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
operationID := os.Getenv("MAXGAMING_IDEMPOTENCY_KEY")
if operationID == "" { panic("Operation UUID is missing") }
request.Header.Set("Idempotency-Key", operationID)
request.Header.Set("Content-Type", "application/json")
response, err := client.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
result, err := io.ReadAll(io.LimitReader(response.Body, 2 * 1024 * 1024))
if err != nil { panic(err) }
if response.StatusCode < 200 || response.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, result))
}
fmt.Println(string(result))
}// Java 11+، بدون کتابخانه جانبی؛ فایل MaxGamingApi.java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class MaxGamingApi {
public static void main(String[] args) throws Exception {
String secret = System.getenv("MAXGAMING_API_SECRET");
if (secret == null || secret.isBlank())
throw new IllegalStateException("API secret is missing");
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10)).build();
HttpRequest.Builder request = HttpRequest.newBuilder(URI.create("https://server.maxgaming.ir/api/owner-api/v1/vips/delete"))
.timeout(Duration.ofSeconds(20))
.header("Authorization", "Bearer " + secret);
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
String operationId = System.getenv("MAXGAMING_IDEMPOTENCY_KEY");
if (operationId == null || operationId.isBlank())
throw new IllegalStateException("Operation UUID is missing");
request.header("Idempotency-Key", operationId)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\"playerSteamId\":\"76561199123456789\",\"confirm\":\"76561199123456789\"}"));
HttpResponse<String> response = client.send(request.build(), HttpResponse.BodyHandlers.ofString());
if (response.statusCode() < 200 || response.statusCode() >= 300)
throw new IllegalStateException("HTTP " + response.statusCode() + ": " + response.body());
System.out.println(response.body());
}
}نمونه پاسخ موفق · HTTP 200
این داده صرفاً نمونه آموزشی است؛ فیلدهای اختیاری بسته به پلاگین و اطلاعات ثبتشده تغییر میکنند.
{
"success": true,
"data": {
"success": true,
"result": {
"deletedCount": 1
}
}
}فرمانهای مجاز RCON
یک فرمان مجاز بازی را اجرا کنید. این مسیر دسترسی shell یا RCON نامحدود نیست. IP، پورت و رمز از اطلاعات همان سرور خوانده میشوند و ورودی شما نیستند.
بن، میوت، گگ و رفع محدودیت با RCON
مسیرهای GET /bans، GET /mutes و GET /gags فقط فهرست را میخوانند. برای بن، میوت، گگ، سایلنس و برداشتن آنها، به POST /rcon درخواست بفرستید. هنگام ساخت کلید، دسترسی rcon را فعال کنید؛ دسترسی خواندن فهرست بهتنهایی کافی نیست.
| فرمان | نمونه مقدار command | کاربرد |
|---|---|---|
| css_ban | css_ban 76561199123456789 30 "Rule violation" | بن بازیکن برای ۳۰ دقیقه |
| css_mute | css_mute 76561199123456789 30 "Voice abuse" | بستن صدای بازیکن برای ۳۰ دقیقه |
| css_gag | css_gag 76561199123456789 30 "Chat abuse" | بستن چت نوشتاری برای ۳۰ دقیقه |
| css_silence | css_silence 76561199123456789 30 "Rule violation" | بستن همزمان صدا و چت برای ۳۰ دقیقه |
| css_unban | css_unban 76561199123456789 | برداشتن بن |
| css_unmute | css_unmute 76561199123456789 | باز کردن صدا |
| css_ungag | css_ungag 76561199123456789 | باز کردن چت نوشتاری |
| css_unsilence | css_unsilence 76561199123456789 | برداشتن محدودیت همزمان صدا و چت |
SteamID64 هفدهرقمی بازیکن را جایگزین عدد نمونه کنید. نام بازیکن، IP و هدفهای گروهی مثل @all پذیرفته نمیشوند. مدت بر حسب دقیقه و بین ۰ تا ۵۲۵۶۰۰ است؛ ۰ یعنی دائمی، نه برداشتن محدودیت. دلیل باید داخل کوتیشن دوتایی و بین ۱ تا ۳۲ نویسه باشد؛ کوتیشن، بکاسلش، نقطهویرگول و خط جدید در دلیل مجاز نیستند. طول کل فرمان حداکثر ۸۰ نویسه است.
نمونه درخواست برای رفع بن
curl --request POST 'https://server.maxgaming.ir/api/owner-api/v1/rcon' \
-H "Authorization: Bearer $MAXGAMING_API_SECRET" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: YOUR_UUID_V4' \
--data '{"command":"css_unban 76561199123456789"}'پلاگین مدیریت بن و محدودیتهای ارتباطی باید روی سرور نصب و فعال باشد. پاسخ HTTP 200 بهتنهایی اثبات اعمال محدودیت نیست؛ متن data.answer را بخوانید. اگر فرمان ناشناخته بود یا بازیکن پیدا نشد، وضعیت پلاگین و SteamID را بررسی کنید. پس از اعمال، فهرست مربوط را دوباره بخوانید؛ رکورد تاریخی ممکن است باقی بماند و باید وضعیت و زمان پایان آن را بررسی کنید. برای این کار دیتابیس را مستقیم تغییر ندهید.
rcon| پارامتر | نوع | توضیح |
|---|---|---|
| command | string | فقط یک فرمان مجاز، حداکثر ۸۰ نویسه. نام فرمان و فاصلهها باید مطابق مثال باشند. |
فهرست کامل فرمانها و مقادیر مجاز
| فرمان | مقدار | کاربرد |
|---|---|---|
| status / version | بدون آرگومان | وضعیت یا نسخه بازی |
| meta version / meta list | بدون آرگومان | نسخه متامود یا پلاگینها |
| css_plugins list | بدون آرگومان | پلاگینهای CSS |
| mp_restartgame | ۱ تا ۶۰ | تأخیر شروع دوباره، به ثانیه |
| mp_freezetime | ۰ تا ۶۰ | زمان فریز، به ثانیه |
| mp_warmuptime | ۰ تا ۶۰۰ | زمان گرمکردن، به ثانیه |
| mp_maxrounds | ۱ تا ۱۰۰ | حداکثر راندها |
نمونه درخواست
در نمونههای PHP، C#، Go و Java، متغیر محیطی MAXGAMING_IDEMPOTENCY_KEY را برابر یک UUID نسخه ۴ قرار دهید. برای عملیات جدید، UUID تازه بسازید؛ هنگام تکرار همان عملیات، همان مقدار را نگه دارید.
curl --request POST 'https://server.maxgaming.ir/api/owner-api/v1/rcon' \
-H "Authorization: Bearer $MAXGAMING_API_SECRET" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: YOUR_UUID_V4' \
--data '{"command":"status"}'// روی بکاند Node.js اجرا کنید؛ secret را وارد کد مرورگر نکنید.
const response = await fetch("https://server.maxgaming.ir/api/owner-api/v1/rcon", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.MAXGAMING_API_SECRET}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID()
},
body: JSON.stringify({
"command": "status"
})
});
const result = await response.json();
if (!response.ok) throw new Error(result.error);
console.log(result.data);import os, uuid
import requests # pip install requests
response = requests.post(
"https://server.maxgaming.ir/api/owner-api/v1/rcon",
headers={
"Authorization": "Bearer " + os.environ["MAXGAMING_API_SECRET"],
"Idempotency-Key": str(uuid.uuid4())
},
json={
"command": "status"
},
timeout=20
)
response.raise_for_status()
print(response.json())<?php
// PHP 8+ با افزونه cURL؛ فقط روی بکاند اجرا کنید.
$secret = getenv('MAXGAMING_API_SECRET') ?: throw new RuntimeException('API secret is missing');
$headers = ['Authorization: Bearer ' . $secret];
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
$operationId = getenv('MAXGAMING_IDEMPOTENCY_KEY') ?: throw new RuntimeException('Operation UUID is missing');
$headers[] = 'Content-Type: application/json';
$headers[] = 'Idempotency-Key: ' . $operationId;
$ch = curl_init('https://server.maxgaming.ir/api/owner-api/v1/rcon');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 20,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => '{"command":"status"}'
]);
$raw = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($raw === false) {
$error = curl_error($ch);
curl_close($ch);
throw new RuntimeException($error);
}
curl_close($ch);
if ($status < 200 || $status >= 300) {
throw new RuntimeException("HTTP $status: $raw");
}
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT), PHP_EOL;// برنامه Console با .NET 6+؛ secret فقط در بکاند نگهداری شود.
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
var secret = Environment.GetEnvironmentVariable("MAXGAMING_API_SECRET")
?? throw new InvalidOperationException("API secret is missing");
// در سرویس دائمی، HttpClient را بین درخواستها به اشتراک بگذارید.
using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(20) };
using var request = new HttpRequestMessage(HttpMethod.Post, "https://server.maxgaming.ir/api/owner-api/v1/rcon");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secret);
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
var operationId = Environment.GetEnvironmentVariable("MAXGAMING_IDEMPOTENCY_KEY")
?? throw new InvalidOperationException("Operation UUID is missing");
request.Headers.Add("Idempotency-Key", operationId);
request.Content = new StringContent("{\"command\":\"status\"}", Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
throw new HttpRequestException($"HTTP {(int)response.StatusCode}: {result}");
Console.WriteLine(result);// فقط کتابخانه استاندارد Go؛ روی سرور خودتان اجرا کنید.
package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
"time"
)
func main() {
secret := os.Getenv("MAXGAMING_API_SECRET")
if secret == "" { panic("API secret is missing") }
client := &http.Client{Timeout: 20 * time.Second}
request, err := http.NewRequest("POST", "https://server.maxgaming.ir/api/owner-api/v1/rcon", strings.NewReader("{\"command\":\"status\"}"))
if err != nil { panic(err) }
request.Header.Set("Authorization", "Bearer " + secret)
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
operationID := os.Getenv("MAXGAMING_IDEMPOTENCY_KEY")
if operationID == "" { panic("Operation UUID is missing") }
request.Header.Set("Idempotency-Key", operationID)
request.Header.Set("Content-Type", "application/json")
response, err := client.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
result, err := io.ReadAll(io.LimitReader(response.Body, 2 * 1024 * 1024))
if err != nil { panic(err) }
if response.StatusCode < 200 || response.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, result))
}
fmt.Println(string(result))
}// Java 11+، بدون کتابخانه جانبی؛ فایل MaxGamingApi.java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class MaxGamingApi {
public static void main(String[] args) throws Exception {
String secret = System.getenv("MAXGAMING_API_SECRET");
if (secret == null || secret.isBlank())
throw new IllegalStateException("API secret is missing");
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10)).build();
HttpRequest.Builder request = HttpRequest.newBuilder(URI.create("https://server.maxgaming.ir/api/owner-api/v1/rcon"))
.timeout(Duration.ofSeconds(20))
.header("Authorization", "Bearer " + secret);
// UUID v4 همین عملیات؛ در تکرار درخواست، مقدار را عوض نکنید.
String operationId = System.getenv("MAXGAMING_IDEMPOTENCY_KEY");
if (operationId == null || operationId.isBlank())
throw new IllegalStateException("Operation UUID is missing");
request.header("Idempotency-Key", operationId)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\"command\":\"status\"}"));
HttpResponse<String> response = client.send(request.build(), HttpResponse.BodyHandlers.ofString());
if (response.statusCode() < 200 || response.statusCode() >= 300)
throw new IllegalStateException("HTTP " + response.statusCode() + ": " + response.body());
System.out.println(response.body());
}
}نمونه پاسخ موفق · HTTP 200
این داده صرفاً نمونه آموزشی است؛ فیلدهای اختیاری بسته به پلاگین و اطلاعات ثبتشده تغییر میکنند.
{
"success": true,
"data": {
"success": true,
"answer": "نمونه خروجی فرمان سرور"
}
}ارسال دوباره، بدون تغییر تکراری
برای هر POST، یک UUID نسخه ۴ بسازید و قبل از ارسال در برنامه خود نگه دارید. نمونه Node.js از crypto.randomUUID() و Python از uuid.uuid4() استفاده میکند. هنگام تکرار همان عملیات، همان شناسه و همان بدنه را دوباره بفرستید؛ UUID جدید نسازید.
Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000نتیجه موفق تا ۲۴ ساعت نگهداری و بدون اجرای دوباره بازگردانده میشود. تغییر بدنه با همان شناسه، یا نامشخص بودن نتیجه درخواست قبلی، خطای ۴۰۹ دارد. در خطای ۵۰۰ یا قطع ارتباط، اول فهرست VIP یا وضعیت سرور را بررسی کنید؛ کورکورانه عملیات را با UUID تازه تکرار نکنید.
محدودیت درخواست و زمان رفع محدودیت
سهمیه اصلی روی secret معتبر شما اعمال میشود، نه فقط IP. تمام برنامهها و کاربرانی که از همان کلید استفاده میکنند، سهمیه مشترک دارند. تغییر IP، استفاده از چند اتصال یا اجرای چند نسخه از برنامه، سهمیه تازه ایجاد نمیکند. سقفهای زیر همزمان برقرارند:
| محدوده | سقف | زمان انتظار پس از ۴۲۹ |
|---|---|---|
| هر secret · دقیقه | ۳۰ درخواست در ۶۰ ثانیه | تا پایان همین بازه؛ حداکثر ۱ دقیقه |
| هر secret · ساعت | ۱٬۰۰۰ درخواست در ۶۰ دقیقه | تا پایان همین بازه؛ حداکثر ۶۰ دقیقه |
| هر secret · روز | ۱۰٬۰۰۰ درخواست در ۲۴ ساعت | تا پایان همین بازه؛ حداکثر ۱۴۴۰ دقیقه (۲۴ ساعت) |
| همه POSTها، شامل VIP و RCON | ۱۰ درخواست در دقیقه | حداکثر ۱ دقیقه؛ جزو سهمیه اصلی هم حساب میشوند |
| RCON | ۶ درخواست در دقیقه | حداکثر ۱ دقیقه؛ جزو سهمیه POST هم حساب میشود |
| همزمانی | ۲ عملیات برای هر سرور؛ ۸ عملیات در هر پردازش | ۲ ثانیه بعد دوباره بررسی کنید |
| حفاظت عمومی IP | ۱۵۰ درخواست در دقیقه | حداکثر ۱ دقیقه؛ جدا از سهمیه secret |
درخواستی که بهدلیل اتمام سهمیه رد شده، شمارنده یا زمان پایان همان سهمیه را تغییر نمیدهد. اما اگر درخواست سهمیه داشته باشد و بعداً خطای ورودی، دسترسی یا همزمانی بگیرد، در سهمیه حساب میشود؛ بنابراین خطاها را در حلقه سریع تکرار نکنید.
۴۲۹ یعنی بن شدهام؟
خیر؛ ۴۲۹ بهتنهایی بن حساب کاربری یا مسدودسازی دائمی کلید نیست. درخواست فعلی اجرا نمیشود و بعد از پایان زمان انتظار میتوانید ادامه دهید. اگر چند سهمیه همزمان تمام شده باشد، طولانیترین زمان لازم اعلام میشود. ارسال دوباره در زمان انتظار، مدت محدودیت سهمیه secret یا سرور را تمدید نمیکند؛ ولی فشار زیاد همچنان ممکن است به محدودیت مستقل IP برسد.
بازهها از اولین درخواست پذیرفتهشده در همان سهمیه شروع میشوند؛ روزانه یعنی یک بازه ۲۴ساعته، نه الزاماً تا ساعت صفر تهران. زمان باقیمانده را حدس نزنید: هدر Retry-After و فیلد retryAfter به ثانیه هستند. برای مثال ۷۵ یعنی یک دقیقه و ۱۵ ثانیه صبر کنید. هدرهای سهمیه فقط بعد از شناسایی کلید معتبر در دسترساند؛ خطای عمومی IP ممکن است فقط Retry-After داشته باشد.
HTTP/1.1 429 Too Many Requests
Retry-After: 75
X-RateLimit-Minute-Limit: 30
X-RateLimit-Minute-Remaining: 0
X-RateLimit-Hour-Limit: 1000
X-RateLimit-Day-Limit: 10000{
"success": false,
"code": "RATE_LIMITED",
"limitWindow": "hour",
"error": "سهمیه درخواست شما تمام شده است. لطفاً ۷۵ ثانیه دیگر تلاش کنید.",
"retryAfter": 75
}فیلد limitWindow مشخص میکند محدودیت مربوط به کدام بخش است: minute، hour، day، write، rcon، concurrency یا ip. در پاسخهای بررسی سهمیه، هدرهای X-RateLimit-Minute-Remaining، X-RateLimit-Hour-Remaining و X-RateLimit-Day-Remaining تعداد درخواست باقیمانده را نشان میدهند. هدرهای همنام با پسوند -Reset زمان بازشدن بازه محدودکننده را به ثانیه Unix میدهند؛ -Limit سقف همان بازه است.
چطور بدون برخورد به محدودیت استفاده کنم؟
- تمام درخواستهای یک secret را در بکاند خود از یک صف مشترک بفرستید. برای دریافت خودکار، مجموعاً یک درخواست در هر ۱۰ تا ۳۰ ثانیه معمولاً کافی است؛ نه برای هر مسیر یا هر بازدیدکننده یک تایمر جدا. هر ۱۰ ثانیه یعنی ۶ درخواست در دقیقه و ۸۶۴۰ درخواست در ۲۴ ساعت، تا برای عملیات دستی هم جا بماند.
- رنک، VIP و لاگها را ۳۰ تا ۶۰ ثانیه در بکاند کش کنید و پاسخ همان درخواست همزمان را بین کاربران به اشتراک بگذارید. وقتی صفحه بسته است یا داده تازه لازم ندارید، درخواست دورهای نفرستید.
- فقط صفحه لازم را بگیرید؛ از limit تا ۵۰ استفاده کنید و صفحههای بعد را فقط در صورت hasMore بخوانید. همه صفحهها را همزمان یا پشت سر هم در یک حلقه سریع دریافت نکنید.
- وقتی Remaining صفر شد، تا Reset صبر کنید. در ۴۲۹، کل صف همان کلید را به اندازه Retry-After متوقف کنید و برای جلوگیری از شروع همزمان چند برنامه، کمی تأخیر تصادفی هم اضافه کنید.
- POST را کورکورانه دوباره نفرستید. برای تکرار همان عملیات، همان Idempotency-Key و همان بدنه را حفظ کنید. حتی خواندن مجدد نتیجه یک عملیات هم درخواست محسوب میشود.
در خطاهای ۵۰۲ و ۵۰۳ از تأخیر افزایشی محدود استفاده کنید، نه تلاش سریع و بیپایان. اگر Redis قطع باشد، اجرای API متوقف میشود و محدودیتها دور زده نمیشوند؛ فقط لغو یا مسدودسازی اضطراری با احراز هویت همچنان ممکن است.
خطا را چطور برطرف کنیم؟
| HTTP | معنی | اقدام پیشنهادی |
|---|---|---|
| 400 | ورودی نامعتبر | فیلدها، نوع عددها، SteamID64 و UUID را بررسی کنید؛ فیلد اضافه نفرستید. |
| 401 | کلید نامعتبر یا لغوشده | هدر Bearer و وضعیت کلید را بررسی کنید؛ secret از URL خوانده نمیشود. |
| 403 | دسترسی یا اشتراک کافی نیست | scope، پرداخت افزونه، مالکیت، فعال بودن سرور و برای logs ربات دیسکورد را بررسی کنید. |
| 404 | مسیر یا رکورد پیدا نشد | نام مسیر و رکورد هدف را بررسی کنید. |
| 409 | تعارض یا نتیجه نامشخص | اول وضعیت فعلی را بخوانید؛ برای یک عملیات، UUIDهای مختلف نسازید. |
| 413 | بدنه بیش از حد بزرگ | JSON را به کمتر از ۱۲ کیلوبایت کاهش دهید. |
| 429 | درخواست زیاد | تا پایان Retry-After صبر کنید؛ سقف سرور با تعویض کلید صفر نمیشود. |
| 500 / 502 / 503 | عملیات یا سرویس وابسته تأیید نشد | برای نوشتن، ابتدا نتیجه را بررسی کنید. در صورت تداوم، پشتیبانی را با نام مسیر و زمان خطا مطلع کنید، نه با secret. |
{
"success": false,
"error": "لطفاً ۳۰ ثانیه دیگر تلاش کنید.",
"retryAfter": 30
}به کد HTTP و success تکیه کنید، نه متن ثابت فارسی خطا. بعضی خطاها retryAfter ندارند؛ در آنها از تأخیر محدود و بررسی وضعیت استفاده کنید.
پرسشهای رایج
آیا سیستم API، ربات دیسکورد را هم فعال میکند؟
خیر. برای خواندن /logs، خود ربات دیسکورد هم باید روی سرور فعال باشد.
روز باقیمانده چطور حساب میشود؟
ماه مبنا ۳۰ روز است. سهم هزینه برابر round(499000 × روز / 30) است. در ارتقا، روز باقیمانده از زمان پایان ذخیرهشده سرور محاسبه میشود؛ مبلغ نهایی را فاکتور معتبر سایت تعیین میکند.
آیا اطلاعات سرور دیگری را هم میتوانم بگیرم؟
خیر. سرور از خود کلید تعیین میشود. تغییر ID، آدرس، نام دیتابیس یا بدنه درخواست دسترسی جدیدی ایجاد نمیکند.
برای ویرایش VIP، چند روز بفرستم؟
تاریخ نهایی پایان را به ثانیه Unix بفرستید، نه مدت روز. در Node.js برای محاسبه نمونه ۳۰ روز از اکنون: Math.floor(Date.now() / 1000) + 30 * 86400.
لغو کلید، فرمان در حال اجرای بازی را متوقف میکند؟
الزاماً نه. عملیات پیش از dispatch دوباره بررسی میشود، اما لغو کلید، فرمان یا تغییر شروعشده را به عقب برنمیگرداند.
چرا createdAt در همه لاگها نیست؟
فقط فیلدهای مجاز با مقدار ساده برگردانده میشوند. زمان یا فیلد ثبتنشده ممکن است حذف شده باشد؛ برنامه را به فیلدهای اختیاری وابسته نکنید.