substr($i, 0, -5), ...(json_decode(file_get_contents("./data/docs/" . $i), true) ?? []) ]; }, array_filter(scandir("./data/docs"), function ($i) { return !str_starts_with($i, ".") && str_ends_with($i, ".json"); })); $deletable = array_values(array_filter($documents, function ($i) { return strip_tags($i["contents"]) === "/delete"; })); foreach ($deletable as $item) { if (time() - $item["last"]["date"] > 86400) { unlink("./data/docs/" . $item["id"] . ".json"); } } $times["docs_cleanup"] = microtime(true) - $currentOpStart; $currentOpStart = microtime(true); foreach (array_filter(scandir("./data"), function ($i) { return !str_starts_with($i, ".") && $i !== "backup" && is_file("./data/" . $i); }) as $file) { $files[] = $file; } @mkdir("./data/backup"); foreach ($files as $file) { copy("./data/" . $file, "./data/backup/" . $file); } function getSystem(string $id) { global $times; echo("System: $id\n"); echo(" Base system info\n"); $currentOpStart = microtime(true); file_put_contents("./data/$id-general.json", file_get_contents("https://pluralkit.equestria.dev/v2/systems/$id")); $times["system-general-$id"] = microtime(true) - $currentOpStart; echo(" System members\n"); $currentOpStart = microtime(true); file_put_contents("./data/$id-members.json", file_get_contents("https://pluralkit.equestria.dev/v2/systems/$id/members")); $times["system-members-$id"] = microtime(true) - $currentOpStart; echo(" Fronters\n"); $currentOpStart = microtime(true); file_put_contents("./data/$id-fronters.json", file_get_contents("https://pluralkit.equestria.dev/v2/systems/$id/fronters")); $times["system-fronters-$id"] = microtime(true) - $currentOpStart; echo(" Switches\n"); $currentOpStart = microtime(true); echo(" Part 1/3\n"); $switches1 = json_decode(file_get_contents("https://pluralkit.equestria.dev/v2/systems/$id/switches"), true); $oldest = $switches1[count($switches1) - 1]["timestamp"]; echo(" Part 2/3\n"); $switches2 = json_decode(file_get_contents("https://pluralkit.equestria.dev/v2/systems/$id/switches?before=$oldest"), true); $oldest = $switches2[count($switches2) - 1]["timestamp"]; echo(" Part 3/3\n"); $switches3 = json_decode(file_get_contents("https://pluralkit.equestria.dev/v2/systems/$id/switches?before=$oldest"), true); file_put_contents("./data/$id-switches.json", json_encode([...$switches1, ...$switches2, ...$switches3], JSON_PRETTY_PRINT)); $times["system-switches-$id"] = microtime(true) - $currentOpStart; } getSystem("gdapd"); // Raindrops getSystem("ynmuc"); // Cloudburst echo("Calendar\n"); $currentOpStart = microtime(true); file_put_contents("./data/calendar.ics", file_get_contents($app["calendar"])); $times["calendar"] = microtime(true) - $currentOpStart; echo("Downloading images.\n"); if (!file_exists("./data/images")) mkdir("./data/images"); foreach (json_decode(file_get_contents("./data/gdapd-members.json"), true) as $member) { $currentOpStart2 = microtime(true); echo(" " . $member['id'] . "\n"); if (isset($member['avatar_url'])) { echo(" Profile picture\n"); exec("convert -resize 128x128 -quality 50 \"" . $member['avatar_url'] . "\" \"./data/images/pf-gdapd-" . $member['id'] . ".webp\""); } echo(" Pony Town character\n"); if (file_exists("../assets/uploads/pt-" . $member['name'] . ".png")) { exec("convert -resize 64x64 -quality 50 \"../assets/uploads/pt-" . $member['name'] . ".png\" \"./data/images/pt-gdapd-" . $member['id'] . ".png\""); } else { exec("convert -resize 64x64 -quality 50 \"../assets/uploads/pt.png\" \"./data/images/pt-gdapd-" . $member['id'] . ".png\""); } $times["images-gdapd-" . $member['id']] = microtime(true) - $currentOpStart2; } foreach (json_decode(file_get_contents("./data/ynmuc-members.json"), true) as $member) { $currentOpStart2 = microtime(true); echo(" " . $member['id'] . "\n"); if (isset($member['avatar_url'])) { echo(" Profile picture\n"); exec("convert -resize 128x128 -quality 50 \"" . $member['avatar_url'] . "\" \"./data/images/pf-ynmuc-" . $member['id'] . ".webp\""); } echo(" Pony Town character\n"); if (file_exists("../assets/uploads/pt-" . $member['name'] . ".png")) { exec("convert -resize 64x64 -quality 50 \"../assets/uploads/pt-" . $member['name'] . ".png\" \"./data/images/pt-ynmuc-" . $member['id'] . ".png\""); } else { exec("convert -resize 64x64 -quality 50 \"../assets/uploads/pt.png\" \"./data/images/pt-ynmuc-" . $member['id'] . ".png\""); } $times["images-ynmuc-" . $member['id']] = microtime(true) - $currentOpStart2; } $currentOpStart = microtime(true); function isJson($string): bool { json_decode($string); return (json_last_error() === JSON_ERROR_NONE); } foreach ($files as $file) { if (trim(file_get_contents("./data/" . $file)) === "" || (isJson(trim(file_get_contents("./data/" . $file))) && isset(json_decode(trim(file_get_contents("./data/" . $file)), true)["message"])) && !str_ends_with($file, ".html")) { $restored[] = $file; copy("./data/backup/" . $file, "./data/" . $file); } } $times["restore"] = microtime(true) - $currentOpStart; echo("Backing up...\n"); if (date('i') === "00") { require_once "./backup.php"; echo("Backup completed\n"); } else { echo("Backup skipped\n"); } $time = array_sum($times); echo("Completed in " . $time . " seconds.\n"); file_put_contents("./data/refresh.json", json_encode([ "timestamp" => microtime(true), "duration" => $time, "restored" => $restored, "times" => $times ]));