Blooket KGui Loader

A loader for the Blooket Council's KGui

// ==UserScript==
// @name        Blooket KGui Loader
// @description A loader for the Blooket Council's KGui
// @namespace   https://github.com/c0des1ayr
// @match       *://*.blooket.com/play*
// @exclude     *://play.blooket.com/play*
// @icon        https://play.blooket.com/favicon.ico
// @grant       GM.xmlHttpRequest
// @run-at      document-start
// @license     MIT
// @version     1.0.2
// @author      c0des1ayer
// @connect     cdn.jsdelivr.net
// @antifeature This script loads the latest version of an external script using a CDN, which may potentially be malicious in the future.
// ==/UserScript==

(async function() {
    'use strict';

    const scripts = [
        'https://cdn.jsdelivr.net/gh/Blooket-Council/Blooket-Cheats@latest/cheats/KGui.js'
    ];

    function fetchAndExecuteScript(url, callback) {
        GM.xmlHttpRequest({
            method: 'GET',
            url: url,
            onload: (response) => {
                if (response.status >= 200 && response.status < 300) {
                    const scriptText = response.responseText;
                    const script = document.createElement('script');
                    script.textContent = scriptText;
                    document.head.appendChild(script);
                    console.log(`Successfully executed script from: ${url}`);
                    callback && callback();
                } else {
                    console.error(`Failed to load script: ${url}. Status: ${response.status}`);
                }
            },
            onerror: (err) => {
                console.error(`Error fetching script: ${url}`, err);
            }
        });
    }

    function loadScriptsSequentially(urls) {
        if (urls.length === 0) return;
        const url = urls.shift();
        fetchAndExecuteScript(url, () => loadScriptsSequentially(urls));
    }

    loadScriptsSequentially([...scripts]);
})();