diff --git a/functions/api/reports/[id]/action.ts b/functions/api/reports/[id]/action.ts new file mode 100644 index 0000000..7accad7 --- /dev/null +++ b/functions/api/reports/[id]/action.ts @@ -0,0 +1,47 @@ +import { insertLogs } from "../../../gcloud.js"; +import { getBanList, setBanList } from "../../../roblox-open-cloud.js"; + +export async function onRequestPost(context: RequestContext) { + const actionMap = context.data.body; + const newActions: { [k: string]: { BanType: number } } = {}; + const logMap: { [k: string]: number } = {}; + + for (const [user, action] of Object.entries(actionMap)) { + if ( + isNaN(parseInt(user)) || + typeof action !== "number" || + action < 0 || + action > 2 + ) + return new Response('{"error":"Invalid action map"}', { + headers: { + "content-type": "application/json", + }, + }); + + if (action === 0) continue; + + Object.defineProperty(newActions, user, { + value: { + BanType: action, + }, + }); + + Object.defineProperty(logMap, user, { + value: action, + }); + } + + await insertLogs(logMap, context.params.id as string, context); + + const banList = (await getBanList(context)) as { + [k: string]: { BanType: number }; + }; + + Object.assign(banList, newActions); + await setBanList(context, banList); + + return new Response(null, { + status: 204, + }); +}