API و توسعهدهندگان
اخبار
بخش اخبار هر سرور ترکیبی از پستهای داخلی تیم و مطالب منابع متصل (مثل کانال تلگرام) است. خواندن اخبار برای همه آزاد است و انتشار با کلید سرور انجام میشود.
| مسیر | دسترسی |
|---|---|
GET /servers/{server}/news | read (بدون کلید هم کار میکند) |
POST /servers/{server}/news | news:write |
PATCH /servers/{server}/news/{newsId} | news:write |
DELETE /servers/{server}/news/{newsId} | news:write |
خواندن اخبار#
Shell
curl "https://gameroute.ir/api/v1/servers/iran-craft/news?pageSize=5"| فیلد | توضیح |
|---|---|
id | شناسه خبر |
source | internal (پست تیم) یا نام منبع: telegram، discord، instagram |
title | عنوان یا null |
body | متن خبر (متن ساده، HTML حذف شده) |
imageUrl | نشانی کامل تصویر یا null |
link | پیوند بیشتر بخوانید یا null |
publishedAt | زمان انتشار |
پیشنیازهای انتشار#
- یک کلید سرور با دسترسی
news:writeبسازید (چطور؟). - سازنده کلید باید در تیم سرور مجوز «مدیریت اخبار» داشته باشد، و این در هر درخواست دوباره بررسی میشود.
- درخواست را از سرور یا اسکریپت خودتان بفرستید؛ مرورگرها اجازه ارسال مستقیم ندارند.
انتشار با کلید روی سرورهایی که هنوز در انتظار تأیید هستند هم کار میکند، ولی خبرها فقط بعد از تأیید سرور در سایت دیده میشوند.
انتشار خبر#
Shell
curl -X POST "https://gameroute.ir/api/v1/servers/iran-craft/news" \
-H "Authorization: Bearer $GAMEROUTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"فصل جدید شروع شد","body":"نقشه جدید و جوایز هفتگی از امشب فعال است.","link":"https://irancraft.ir/season-5"}'| فیلد | الزامی | قواعد |
|---|---|---|
body | بله | ۲ تا ۵۰۰۰ کاراکتر؛ برچسبهای HTML حذف میشوند |
title | خیر | ۲ تا ۱۲۰ کاراکتر |
link | خیر | نشانی کامل http یا https، تا ۵۰۰ کاراکتر |
imageUrl | خیر | فقط نشانی تصویری که قبلاً در پنل گیم روت بارگذاری شده؛ نشانی تصویر خارجی با خطای INVALID_MEDIA رد میشود |
فیلد ناشناخته با خطای VALIDATION رد میشود. پاسخ موفق 201 و خود خبر است.
ویرایش و حذف#
فقط پستهای داخلی (source: "internal") ویرایش و حذف میشوند؛ مطالبی که از تلگرام یا دیسکورد آمدهاند را منبع خودشان مدیریت میکند و تلاش برای تغییرشان خطای 404 میدهد.
Shell
# فقط فیلدهای فرستادهشده تغییر میکنند؛ null مقدار را پاک میکند
curl -X PATCH "https://gameroute.ir/api/v1/servers/iran-craft/news/cm3n2k8x40001" \
-H "Authorization: Bearer $GAMEROUTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"فصل پنجم شروع شد","link":null}'
curl -X DELETE "https://gameroute.ir/api/v1/servers/iran-craft/news/cm3n2k8x40001" \
-H "Authorization: Bearer $GAMEROUTE_API_KEY"حذف موفق پاسخ 204 بدون بدنه دارد.
نمونه: ارسال خبر از ربات#
JavaScript
// پیامهای کانال اطلاعیه را به اخبار گیم روت میفرستد
async function publish({ title, body, link }) {
const res = await fetch('https://gameroute.ir/api/v1/servers/iran-craft/news', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.GAMEROUTE_API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ title, body: body.slice(0, 5000), ...(link ? { link } : {}) }),
});
if (!res.ok) {
const { error } = await res.json();
throw new Error(`${error.code}: ${error.message}`);
}
return res.json();
}PHP
<?php
$payload = ['title' => 'فصل جدید', 'body' => 'از امشب نقشه جدید فعال است.'];
$ch = curl_init('https://gameroute.ir/api/v1/servers/iran-craft/news');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('GAMEROUTE_API_KEY'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
]);
$news = json_decode(curl_exec($ch), true);