import time import requests import argparse parser = argparse.ArgumentParser(description='Automated Server Restart Script') parser.add_argument('api_url', metavar='server_api_url', type=str, help='ServerAPI Base URL') parser.add_argument('token', metavar='token', type=str, help='ServerAPI Token') parser.add_argument('--webhook', metavar='discord_webhook', type=str, help='Discord Webhook URL') def send_discord_webhook(url, msg): request = {"content": msg} r = requests.post(url, json=request) def send_request(url, token, endpoint, request): headers = {"X-ServerAPI-Token": token} r = requests.post(f"{url}{endpoint}/", headers=headers, json=request) return r.ok def send_command(url, token, command, *args): request = {"command": command, "args": list(args)} return send_request(url, token, "custom", request) def send_broadcast(url, token, sender, msg): request = {"from": sender, "message": msg} return send_request(url, token, "broadcast", request) def main(): args = parser.parse_args() url = args.api_url token = args.token webhook = args.webhook print("Sending 5 minute warning") r = send_command(url, token, "broadcast", "There will be an automatic server restart in 5 minutes.") if not r: print("Failed to send 5 minute warning") quit(1) time.sleep(60*4) print("Sending 1 minute warning") r = send_command(url, token, "broadcast", "There will be an automatic server restart in 1 minute.") if not r: print("Failed to send 1 minute broadcast") quit(1) time.sleep(60) print("Sending final warnings") for i in range(0, 5): r = send_command(url, token, "broadcast", "The server is restarting get safe!") if not r: print("Failed to send final restart broadcast") quit(1) time.sleep(2) if webhook: send_discord_webhook(webhook, "Server is going offline for an automated restarted") print("Restarting") r = send_command(url, token, "restart") if not r: print("Failed to restart server") quit(1) if __name__ == "__main__": main()