Гайды
Гайды — вики-страницы по играм в Markdown («Как ставить моды в Deadlock», гайды по инструментам). Каждый гайд существует на одном языке (locale = en или ru), имеет числовой id, slug, уникальный внутри игры, и публичную историю правок. На сайте гайд лежит по адресу /games/{game}/guides/{slug}.
Чтение
GET /games/{game}/guides?locale=ru&limit=20
GET /games/{game}/guides/{slug}
Список отдаёт опубликованные гайды, новые первыми, в обычной курсорной обёртке. GET /games/{game}/guides/{slug} возвращает Markdown (body), очищенный HTML (bodyHtml, заголовки начинаются с h2) и права вызывающего (canEdit, canPublish, canModerate). Черновики и скрытые гайды видны только автору и редакторам, остальным — 404.
- curl
- TypeScript
- Python
#!/usr/bin/env bash
set -euo pipefail
BASE_URL="${GLITCHMUG_API:-https://api.glitchmug.com/v1}"
# Published guides of a game in one language, newest first
curl -fsS "$BASE_URL/games/deadlock/guides?locale=en&limit=20"
const baseUrl = process.env.GLITCHMUG_API ?? 'https://api.glitchmug.com/v1';
// Published guides of a game in one language, newest first
const res = await fetch(`${baseUrl}/games/deadlock/guides?locale=en&limit=20`);
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
const body = (await res.json()) as { data: { id: number; path: string; title: string }[] };
for (const g of body.data) console.log(g.id, g.path, g.title);
import json
import os
import urllib.request
base_url = os.environ.get("GLITCHMUG_API", "https://api.glitchmug.com/v1")
# Published guides of a game in one language, newest first
with urllib.request.urlopen(f"{base_url}/games/deadlock/guides?locale=en&limit=20") as res:
body = json.load(res)
for guide in body["data"]:
print(guide["id"], guide["path"], guide["title"])
Запись
POST /games/{game}/guides
PATCH /games/{game}/guides/{slug}
Для записи нужен API-ключ со scope mods:write или сессия сайта.
- Создать гайд может любой вошедший (10 в сутки). Он начинается как
draft, если не запроситьstatus: "published"при правеguide:publish(доверенные авторы и модераторы). - Автор правит свой гайд;
guide:edit(модераторы игры и выше) правит любой. 60 правок в час. - Смена
statusмеждуdraftиpublishedтребуетguide:publish. - Каждое создание, правка и откат добавляют версию в историю.
slugберётся из заголовка при создании и больше не меняется. - Слишком частые запросы:
429 guide_rate_limited.
- curl
- TypeScript
- Python
#!/usr/bin/env bash
set -euo pipefail
BASE_URL="${GLITCHMUG_API:-https://api.glitchmug.com/v1}"
# Needs scope mods:write. Without the guide:publish permission the guide starts as a draft.
curl -fsS -X POST "$BASE_URL/games/deadlock/guides" \
-H "Authorization: Bearer $GLITCHMUG_TOKEN" \
-H "Content-Type: application/json" \
-d '{"locale": "en", "title": "How to install mods", "summary": "Folders and tools.", "body": "## Steps\n\n1. Download the mod.", "status": "published"}'
const baseUrl = process.env.GLITCHMUG_API ?? 'https://api.glitchmug.com/v1';
// Needs scope mods:write. Without the guide:publish permission the guide starts as a draft.
const res = await fetch(`${baseUrl}/games/deadlock/guides`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.GLITCHMUG_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
locale: 'en',
title: 'How to install mods',
summary: 'Folders and tools.',
body: '## Steps\n\n1. Download the mod.',
status: 'published',
}),
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
const guide = await res.json();
console.log(guide.id, guide.status, guide.path);
import json
import os
import urllib.request
base_url = os.environ.get("GLITCHMUG_API", "https://api.glitchmug.com/v1")
# Needs scope mods:write. Without the guide:publish permission the guide starts as a draft.
req = urllib.request.Request(
f"{base_url}/games/deadlock/guides",
method="POST",
data=json.dumps(
{
"locale": "en",
"title": "How to install mods",
"summary": "Folders and tools.",
"body": "## Steps\n\n1. Download the mod.",
"status": "published",
}
).encode(),
headers={
"Authorization": f"Bearer {os.environ['GLITCHMUG_TOKEN']}",
"Content-Type": "application/json",
},
)
with urllib.request.urlopen(req) as res:
guide = json.load(res)
print(guide["id"], guide["status"], guide["path"])
История
GET /games/{game}/guides/{slug}/revisions
GET /games/{game}/guides/{slug}/revisions/{rev}
POST /games/{game}/guides/{slug}/revisions/{rev}/revert
История публична для видимых гайдов. revert (нужен guide:edit) возвращает заголовок, краткое описание и текст старой версии как новую версию; ничего не удаляется.
Модерация
POST /games/{game}/guides/{slug}/hide принимает код правила (и необязательную причину); POST …/unhide показывает гайд снова. Оба действия требуют guide:hide в игре и пишутся в журнал модерации.