module.exports = (Plugin, Api, Vendor) => { if (typeof BDFDB !== "object") global.BDFDB = {$: Vendor.$, BDv2Api: Api}; const {$} = Vendor; return class extends Plugin { initConstructor () { this.RANbuttonMarkup = `
`; this.RAMbuttonMarkup = ``; this.defaults = { settings: { includeMuted: {value:false, description:"Include muted Servers (means more API-Requests):"} } }; } onStart () { var libraryScript = null; if (typeof BDFDB !== "object" || typeof BDFDB.isLibraryOutdated !== "function" || BDFDB.isLibraryOutdated()) { libraryScript = document.querySelector('head script[src="https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.js"]'); if (libraryScript) libraryScript.remove(); libraryScript = document.createElement("script"); libraryScript.setAttribute("type", "text/javascript"); libraryScript.setAttribute("src", "https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.js"); document.head.appendChild(libraryScript); } this.startTimeout = setTimeout(() => {this.initialize();}, 30000); if (typeof BDFDB === "object" && typeof BDFDB.isLibraryOutdated === "function") this.initialize(); else libraryScript.addEventListener("load", () => {this.initialize();}); return true; } initialize () { if (typeof BDFDB === "object") { BDFDB.loadMessage(this); var observer = null; observer = new MutationObserver((changes, _) => { changes.forEach( (change, i) => { if (change.addedNodes) { change.addedNodes.forEach((node) => { var mentionspopout = null; if (node && node.tagName && (mentionspopout = node.querySelector(BDFDB.dotCN.recentmentionspopout)) != null) { let filter = node.querySelector(BDFDB.dotCN.recentmentionsmentionfilter); if (filter) { $(this.RAMbuttonMarkup).insertBefore(BDFDB.dotCN.recentmentionsmentionfilter, mentionspopout) .on("click", () => { var loadinterval = setInterval(() => { if (!mentionspopout || !mentionspopout.parentElement) clearInterval(loadinterval); var loadbutton = mentionspopout.querySelector(BDFDB.dotCNS.messagespopouthasmore + "button"); var closebuttons = mentionspopout.querySelectorAll(BDFDB.dotCN.messagespopoutclosebutton); if (!loadbutton) { closebuttons.forEach((btn) => {btn.click();}); clearInterval(loadinterval); } else { closebuttons.forEach((btn,i) => {if (closebuttons.length-1 > i) btn.click();}); loadbutton.click(); } },2000); }); mentionspopout.classList.add("RAM-added"); } } }); } } ); }); BDFDB.addObserver(this, BDFDB.dotCN.popouts, {name:"mentionsPopoutObserver",instance:observer}, {childList: true}); $(this.RANbuttonMarkup).insertBefore(document.querySelector(BDFDB.dotCN.guildseparator)) .on("click", "#RANbutton", () => { let servers = BDFDB.getData("includeMuted", this, "settings") ? BDFDB.readServerList() : BDFDB.readUnreadServerList(); BDFDB.clearReadNotifications(servers); }); $(BDFDB.dotCN.guilds).addClass("RAN-added"); return true; } else { console.error(this.name + ": Fatal Error: Could not load BD functions!"); return false; } } onStop () { if (typeof BDFDB === "object") { $("#RANbutton-frame, #RAMbutton").remove(); $(".RAN-added").removeClass("RAN-added"); BDFDB.unloadMessage(this); return true; } else { return false; } } // begin of own functions updateSettings (settingspanel) { var settings = {}; for (var input of settingspanel.querySelectorAll(BDFDB.dotCN.switchinner)) { settings[input.value] = input.checked; } BDFDB.saveAllData(settings, this, "settings"); } getSettingsPanel () { var settings = BDFDB.getAllData(this, "settings"); var settingshtml = `