گیم روت
API و توسعه‌دهندگان

اخبار

بخش اخبار هر سرور ترکیبی از پست‌های داخلی تیم و مطالب منابع متصل (مثل کانال تلگرام) است. خواندن اخبار برای همه آزاد است و انتشار با کلید سرور انجام می‌شود.

مسیردسترسی
GET /servers/{server}/newsread (بدون کلید هم کار می‌کند)
POST /servers/{server}/newsnews: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شناسه خبر
sourceinternal (پست تیم) یا نام منبع: telegram، discord، instagram
titleعنوان یا null
bodyمتن خبر (متن ساده، HTML حذف شده)
imageUrlنشانی کامل تصویر یا null
linkپیوند بیشتر بخوانید یا null
publishedAtزمان انتشار

پیش‌نیازهای انتشار#

  1. یک کلید سرور با دسترسی news:write بسازید (چطور؟).
  2. سازنده کلید باید در تیم سرور مجوز «مدیریت اخبار» داشته باشد، و این در هر درخواست دوباره بررسی می‌شود.
  3. درخواست را از سرور یا اسکریپت خودتان بفرستید؛ مرورگرها اجازه ارسال مستقیم ندارند.

انتشار با کلید روی سرورهایی که هنوز در انتظار تأیید هستند هم کار می‌کند، ولی خبرها فقط بعد از تأیید سرور در سایت دیده می‌شوند.

انتشار خبر#

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);