feat: 增加 Sub2API 原生公告受控 CLI
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
export const remotePythonAnnouncementsScript = String.raw`
|
||||
|
||||
def announcements_payload():
|
||||
return json.loads(base64.b64decode(PAYLOAD_B64).decode("utf-8"))
|
||||
|
||||
def announcements_list(token, payload):
|
||||
query = [
|
||||
"page=" + quote(str(payload.get("page") or 1), safe=""),
|
||||
"page_size=" + quote(str(payload.get("pageSize") or 20), safe=""),
|
||||
"sort_by=" + quote(str(payload.get("sortBy") or "created_at"), safe=""),
|
||||
"sort_order=" + quote(str(payload.get("sortOrder") or "desc"), safe=""),
|
||||
]
|
||||
if payload.get("status"):
|
||||
query.append("status=" + quote(str(payload.get("status")), safe=""))
|
||||
if payload.get("search"):
|
||||
query.append("search=" + quote(str(payload.get("search")), safe=""))
|
||||
data = ensure_success(curl_api("GET", "/api/v1/admin/announcements?" + "&".join(query), bearer=token), "list announcements")
|
||||
items = extract_items(data)
|
||||
return {
|
||||
"ok": True, "mode": "read-only", "mutation": False, "writeAttempted": 0,
|
||||
"items": items,
|
||||
"total": data.get("total", len(items)) if isinstance(data, dict) else len(items),
|
||||
"page": data.get("page", payload.get("page")) if isinstance(data, dict) else payload.get("page"),
|
||||
"pageSize": data.get("page_size", payload.get("pageSize")) if isinstance(data, dict) else payload.get("pageSize"),
|
||||
"totalPages": data.get("total_pages") if isinstance(data, dict) else None,
|
||||
"valuesPrinted": False,
|
||||
}
|
||||
|
||||
def announcements_get(token, announcement_id):
|
||||
item = ensure_success(curl_api("GET", f"/api/v1/admin/announcements/{announcement_id}", bearer=token), "get announcement")
|
||||
return {"ok": isinstance(item, dict), "mode": "read-only", "mutation": False, "writeAttempted": 0, "announcement": item, "valuesPrinted": False}
|
||||
|
||||
def announcements_create(token, payload):
|
||||
announcement = payload.get("announcement") if isinstance(payload.get("announcement"), dict) else {}
|
||||
created = ensure_success(curl_api("POST", "/api/v1/admin/announcements", bearer=token, payload=announcement), "create announcement")
|
||||
announcement_id = created.get("id") if isinstance(created, dict) else None
|
||||
if not isinstance(announcement_id, int) or announcement_id <= 0:
|
||||
raise RuntimeError("create announcement response missing positive id")
|
||||
actual = ensure_success(curl_api("GET", f"/api/v1/admin/announcements/{announcement_id}", bearer=token), "read announcement after create")
|
||||
reconciled = isinstance(actual, dict) and actual.get("id") == announcement_id
|
||||
return {
|
||||
"ok": reconciled, "mode": "confirmed", "mutation": True, "writeAttempted": 1,
|
||||
"writeSucceeded": 1, "writeFailed": 0, "reconciled": reconciled,
|
||||
"announcement": actual, "valuesPrinted": False,
|
||||
}
|
||||
|
||||
def run_announcements():
|
||||
payload = announcements_payload()
|
||||
_, token, _ = login()
|
||||
action = payload.get("action")
|
||||
if action == "list":
|
||||
return announcements_list(token, payload)
|
||||
if action == "get":
|
||||
return announcements_get(token, payload.get("id"))
|
||||
if action == "create" and payload.get("confirm") is True:
|
||||
return announcements_create(token, payload)
|
||||
raise RuntimeError("unsupported announcements action")
|
||||
`;
|
||||
Reference in New Issue
Block a user