/*jshint esversion: 6 */ // ==UserScript== // @name Builded // @namespace https://git.swee.codes/swee/Builded // @version 0.0.1.2 // @description Vencord, but for Guilded // @author Swee // @match https://*.guilded.gg/* // @match https://builded.swee.codes/settings // @icon https://git.swee.codes/swee/Builded/raw/branch/main/Builded-solid.svg // @grant GM_setValue // @grant GM_getValue // @require https://code.jquery.com/jquery-3.7.1.min.js // @require https://github.com/pie6k/jquery.initialize/raw/refs/heads/master/jquery.initialize.min.js // @run-at document-end // ==/UserScript== function waitForElm(selector) { return new Promise(resolve => { if (document.querySelector(selector)) { return resolve(document.querySelector(selector)); } const observer = new MutationObserver(mutations => { if (document.querySelector(selector)) { observer.disconnect(); resolve(document.querySelector(selector)); } }); // If you get "parameter 1 is not of type 'Node'" error, see https://stackoverflow.com/a/77855838/492336 observer.observe(document.body, { childList: true, subtree: true }); }); } let settings_HTML = `

If you see this text, the userscript successfully rendered the settings page.

`; let settings_entry = `
Builded
Open Settings
` function openSettings() { let win = window.open("https://builded.swee.codes/settings", "ree", `titlebar=yes,menubar=no,height=500px,width=300px,menubar=no,status=no`); } if (location.host == "www.guilded.gg") { console.info("Guilded.GG detected."); $.initialize('.DesktopOptionsControl-persistent-menu', function() { console.info("Settings opened!") waitForElm('.PersistentActionMenuSection-container').then((elm) => { console.log('Injecting Builded settings...'); $(this)[0].innerHTML += settings_entry; }); }); } else { document.body.innerHTML += settings_HTML; } console.info("Builded Loaded <3");