diff --git a/.eslintrc b/.eslintrc index 3cf6e1ed..6deaeb12 100644 --- a/.eslintrc +++ b/.eslintrc @@ -19,7 +19,7 @@ "semi": 2, "space-infix-ops": ["error", {"int32Hint": false}], "quotes": ["error", "double", {"allowTemplateLiterals": true}], - "no-console": 0, + "no-console": 2, "brace-style": ["error", "stroustrup", {"allowSingleLine": true}], "keyword-spacing": 2, "no-else-return": 2, diff --git a/css/main.css b/css/main.css index 29ea7515..65dcde94 100644 --- a/css/main.css +++ b/css/main.css @@ -308,7 +308,7 @@ #bda-qem-twitch-container, #bda-qem-favourite-container { width: 346px; - height: 327px; + height: 329px; background-color: #FFF; border-radius: 0 0 5px 5px; } @@ -739,12 +739,12 @@ body .ace_closeButton { background: none; border: none; } - + body .ace_closeButton::before { content: "✖"; color: #36393f; } - + body .ace_closeButton:active { transform: translateY(2px); } @@ -1780,11 +1780,11 @@ body .ace_closeButton:active { border-color: #202020; } -.bda-dark #bda-qem-favourite-container .scroller::-webkit-scrollbar, -.bda-dark #bda-qem-favourite-container .scroller::-webkit-scrollbar-track, +.bda-dark #bda-qem-favourite-container .scroller::-webkit-scrollbar, +.bda-dark #bda-qem-favourite-container .scroller::-webkit-scrollbar-track, .bda-dark #bda-qem-favourite-container .scroller::-webkit-scrollbar-track-piece, -.bda-dark #bda-qem-twitch-container .scroller::-webkit-scrollbar, -.bda-dark #bda-qem-twitch-container .scroller::-webkit-scrollbar-track, +.bda-dark #bda-qem-twitch-container .scroller::-webkit-scrollbar, +.bda-dark #bda-qem-twitch-container .scroller::-webkit-scrollbar-track, .bda-dark #bda-qem-twitch-container .scroller::-webkit-scrollbar-track-piece, .bda-dark .emojiPicker-3m1S-j .scroller-3vODG7::-webkit-scrollbar, .bda-dark .emojiPicker-3m1S-j .scroller-3vODG7::-webkit-scrollbar-track, @@ -1793,7 +1793,7 @@ body .ace_closeButton:active { border-color: #303030 !important; } -.bda-dark #bda-qem-twitch-container .scroller::-webkit-scrollbar-thumb, +.bda-dark #bda-qem-twitch-container .scroller::-webkit-scrollbar-thumb, .bda-dark #bda-qem-favourite-container .scroller::-webkit-scrollbar-thumb, .bda-dark .emojiPicker-3g68GS .scroller-3vODG7::-webkit-scrollbar-thumb { border-color: #202020 !important; diff --git a/js/main.js b/js/main.js index 08f16667..e3625da9 100644 --- a/js/main.js +++ b/js/main.js @@ -155,7 +155,7 @@ __webpack_require__.r(__webpack_exports__); /*!**********************************!*\ !*** ./src/builtins/builtins.js ***! \**********************************/ -/*! exports provided: VoiceMode, ClassNormalizer, DeveloperMode, PublicServers, DarkMode, MinimalMode, TwentyFourHour, ColoredText */ +/*! exports provided: VoiceMode, ClassNormalizer, DeveloperMode, PublicServers, DarkMode, MinimalMode, TwentyFourHour, ColoredText, VoiceDisconnect, EmoteMenu */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -184,6 +184,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _coloredtext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./coloredtext */ "./src/builtins/coloredtext.js"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ColoredText", function() { return _coloredtext__WEBPACK_IMPORTED_MODULE_7__["default"]; }); +/* harmony import */ var _voicedisconnect__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./voicedisconnect */ "./src/builtins/voicedisconnect.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VoiceDisconnect", function() { return _voicedisconnect__WEBPACK_IMPORTED_MODULE_8__["default"]; }); + +/* harmony import */ var _emotemenu__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./emotemenu */ "./src/builtins/emotemenu.js"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EmoteMenu", function() { return _emotemenu__WEBPACK_IMPORTED_MODULE_9__["default"]; }); + + + @@ -576,6 +584,245 @@ __webpack_require__.r(__webpack_exports__); /***/ }), +/***/ "./src/builtins/emotemenu.js": +/*!***********************************!*\ + !*** ./src/builtins/emotemenu.js ***! + \***********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ "./src/structs/builtin.js"); +/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! data */ "./src/data/data.js"); +/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modules */ "./src/modules/modules.js"); + + + +const headerHTML = `
+ + +
`; +const twitchEmoteHTML = `
+
+
+
+ +
+
+
+
`; +const favoritesHTML = `
+
+
+
+ +
+
+
+
`; + +const makeEmote = (emote, url, options = {}) => { + const { + onContextMenu, + onClick + } = options; + const emoteContainer = $(`
+ ${emote} +
`)[0]; + if (onContextMenu) emoteContainer.addEventListener("contextmenu", onContextMenu); + emoteContainer.addEventListener("click", onClick); + return emoteContainer; +}; + +/* harmony default export */ __webpack_exports__["default"] = (new class EmoteMenu extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__["default"] { + get name() { + return "EmoteMenu"; + } + + get category() { + return "Modules"; + } + + get id() { + return "bda-es-0"; + } + + get hideEmojisID() { + return "bda-es-9"; + } + + get hideEmojis() { + return data__WEBPACK_IMPORTED_MODULE_1__["SettingsCookie"][this.hideEmojisID]; + } + + constructor() { + super(); + this.lastTab = "bda-qem-emojis"; + this.favoriteEmotes = {}; + this.qmeHeader = $(headerHTML)[0]; + + for (const button of this.qmeHeader.getElementsByTagName("button")) button.addEventListener("click", this.switchMenu.bind(this)); + + this.teContainer = $(twitchEmoteHTML)[0]; + this.teContainerInner = this.teContainer.querySelector(".emote-menu-inner"); + this.faContainer = $(favoritesHTML)[0]; + this.faContainerInner = this.faContainer.querySelector(".emote-menu-inner"); + this.observer = new MutationObserver(mutations => { + for (const mutation of mutations) this.observe(mutation); + }); + this.enableHideEmojis = this.enableHideEmojis.bind(this); + this.disableHideEmojis = this.disableHideEmojis.bind(this); + } + + initialize() { + super.initialize(); + const fe = modules__WEBPACK_IMPORTED_MODULE_2__["DataStore"].getBDData("bdfavemotes"); + if (fe !== "" && fe !== null) this.favoriteEmotes = JSON.parse(atob(fe)); + this.updateFavorites(); + } + + async enabled() { + await new Promise(resolve => { + modules__WEBPACK_IMPORTED_MODULE_2__["Events"].on("emotes-loaded", resolve); + }); + this.updateTwitchEmotes(); + this.log("Starting to observe"); + this.observer.observe(document.getElementById("app-mount"), { + childList: true, + subtree: true + }); + this.hideEmojiCancel = Object(_structs_builtin__WEBPACK_IMPORTED_MODULE_0__["onSettingChange"])(this.category, this.hideEmojisID, this.enableHideEmojis, this.disableHideEmojis); + if (this.hideEmojis) this.enableHideEmojis(); + } + + disabled() { + this.observer.disconnect(); + this.disableHideEmojis(); + if (this.hideEmojiCancel) this.hideEmojiCancel(); + } + + enableHideEmojis() { + $(".emojiPicker-3m1S-j").addClass("bda-qme-hidden"); + } + + disableHideEmojis() { + $(".emojiPicker-3m1S-j").removeClass("bda-qme-hidden"); + } + + insertEmote(emote) { + const ta = modules__WEBPACK_IMPORTED_MODULE_2__["Utilities"].getTextArea(); + modules__WEBPACK_IMPORTED_MODULE_2__["Utilities"].insertText(ta[0], ta.val().slice(-1) == " " ? ta.val() + emote : ta.val() + " " + emote); + } + + favContext(e) { + e.stopPropagation(); + const em = e.target.closest(".emote-container").children[0]; + const menu = $(`
Remove
`); + menu.css({ + top: e.pageY - $("#bda-qem-favourite-container").offset().top, + left: e.pageX - $("#bda-qem-favourite-container").offset().left + }); + $(em).parent().append(menu); + menu.on("click", e => { + e.preventDefault(); + e.stopPropagation(); + $(em).remove(); + delete this.favoriteEmotes[$(em).attr("title")]; + this.updateFavorites(); + $(document).off("mousedown.emotemenu"); + }); + $(document).on("mousedown.emotemenu", function (e) { + if (e.target.id == "removemenu") return; + $("#removemenu").remove(); + $(document).off("mousedown.emotemenu"); + }); + } + + switchMenu(e) { + let id = typeof e == "string" ? e : $(e.target).attr("id"); + if (id == "bda-qem-emojis" && this.hideEmojis) id = "bda-qem-favourite"; + const twitch = $("#bda-qem-twitch"); + const fav = $("#bda-qem-favourite"); + const emojis = $("#bda-qem-emojis"); + twitch.removeClass("active"); + fav.removeClass("active"); + emojis.removeClass("active"); + $(".emojiPicker-3m1S-j").hide(); + $("#bda-qem-favourite-container").hide(); + $("#bda-qem-twitch-container").hide(); + + switch (id) { + case "bda-qem-twitch": + twitch.addClass("active"); + $("#bda-qem-twitch-container").show(); + break; + + case "bda-qem-favourite": + fav.addClass("active"); + $("#bda-qem-favourite-container").show(); + break; + + case "bda-qem-emojis": + emojis.addClass("active"); + $(".emojiPicker-3m1S-j").show(); + $(".emojiPicker-3m1S-j input").focus(); + break; + } + + if (id) this.lastTab = id; + } + + observe(mutation) { + if (!mutation.addedNodes.length || !(mutation.addedNodes[0] instanceof Element)) return; + const node = mutation.addedNodes[0]; + if (!node.classList.contains("popout-3sVMXz") || node.classList.contains("popoutLeft-30WmrD") || !node.getElementsByClassName("emojiPicker-3m1S-j").length) return; + const e = $(node); + if (this.hideEmojis) e.addClass("bda-qme-hidden");else e.removeClass("bda-qme-hidden"); + e.prepend(this.qmeHeader); + e.append(this.teContainer); + e.append(this.faContainer); + this.switchMenu(this.lastTab); + } + + favorite(name, url) { + if (!this.favoriteEmotes.hasOwnProperty(name)) this.favoriteEmotes[name] = url; + this.updateFavorites(); + } + + updateTwitchEmotes() { + while (this.teContainerInner.firstChild) this.teContainerInner.firstChild.remove(); + + for (const emote in data__WEBPACK_IMPORTED_MODULE_1__["Emotes"].TwitchGlobal) { + if (!data__WEBPACK_IMPORTED_MODULE_1__["Emotes"].TwitchGlobal.hasOwnProperty(emote)) continue; + const url = data__WEBPACK_IMPORTED_MODULE_1__["Emotes"].TwitchGlobal[emote]; + const emoteElement = makeEmote(emote, url, { + onClick: this.insertEmote.bind(this, emote) + }); + this.teContainerInner.append(emoteElement); + } + } + + updateFavorites() { + while (this.faContainerInner.firstChild) this.faContainerInner.firstChild.remove(); + + for (const emote in this.favoriteEmotes) { + const url = this.favoriteEmotes[emote]; + const emoteElement = makeEmote(emote, url, { + onClick: this.insertEmote.bind(this, emote), + onContextMenu: this.favContext.bind(this) + }); + this.faContainerInner.append(emoteElement); + } + + modules__WEBPACK_IMPORTED_MODULE_2__["DataStore"].setBDData("bdfavemotes", btoa(JSON.stringify(this.favoriteEmotes))); + } + +}()); + +/***/ }), + /***/ "./src/builtins/minimalmode.js": /*!*************************************!*\ !*** ./src/builtins/minimalmode.js ***! @@ -709,7 +956,6 @@ __webpack_require__.r(__webpack_exports__); } render() { - // BdApi.alert("Broken", "Sorry but the Public Servers modules is currently broken, I recommend disabling this feature for now."); const root = this.root; if (!root) { @@ -740,6 +986,53 @@ __webpack_require__.r(__webpack_exports__); /***/ }), +/***/ "./src/builtins/voicedisconnect.js": +/*!*****************************************!*\ + !*** ./src/builtins/voicedisconnect.js ***! + \*****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ "./src/structs/builtin.js"); +/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ "./src/modules/modules.js"); + + +/* harmony default export */ __webpack_exports__["default"] = (new class DarkMode extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__["default"] { + get name() { + return "VoiceDisconnect"; + } + + get category() { + return "Modules"; + } + + get id() { + return "bda-dc-0"; + } + + constructor() { + super(); + this.beforeUnload = this.beforeUnload.bind(this); + } + + enabled() { + window.addEventListener("beforeunload", this.beforeUnload); + } + + disabled() { + window.removeEventListener("beforeunload", this.beforeUnload); + } + + beforeUnload() { + modules__WEBPACK_IMPORTED_MODULE_1__["DiscordModules"].ChannelActions.selectVoiceChannel(null, null); + } + +}()); + +/***/ }), + /***/ "./src/builtins/voicemode.js": /*!***********************************!*\ !*** ./src/builtins/voicemode.js ***! @@ -1287,6 +1580,7 @@ window.bdEmotes = data__WEBPACK_IMPORTED_MODULE_0__["Emotes"]; window.bemotes = data__WEBPACK_IMPORTED_MODULE_0__["EmoteBlacklist"]; window.bdPluginStorage = _modules_oldstorage__WEBPACK_IMPORTED_MODULE_6__["bdPluginStorage"]; window.BDEvents = _modules_emitter__WEBPACK_IMPORTED_MODULE_7__["default"]; +window.bdConfig = data__WEBPACK_IMPORTED_MODULE_0__["Config"]; class CoreWrapper { constructor(config) { _modules_core__WEBPACK_IMPORTED_MODULE_2__["default"].setConfig(config); @@ -1848,22 +2142,20 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utilities */ "./src/modules/utilities.js"); /* harmony import */ var data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! data */ "./src/data/data.js"); /* harmony import */ var _emotes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./emotes */ "./src/modules/emotes.js"); -/* harmony import */ var _emotemenu__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./emotemenu */ "./src/modules/emotemenu.js"); -/* harmony import */ var _pluginmanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./pluginmanager */ "./src/modules/pluginmanager.js"); -/* harmony import */ var _thememanager__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./thememanager */ "./src/modules/thememanager.js"); -/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./datastore */ "./src/modules/datastore.js"); -/* harmony import */ var _settingspanel__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./settingspanel */ "./src/modules/settingspanel.js"); -/* harmony import */ var builtins__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! builtins */ "./src/builtins/builtins.js"); +/* harmony import */ var _pluginmanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pluginmanager */ "./src/modules/pluginmanager.js"); +/* harmony import */ var _thememanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./thememanager */ "./src/modules/thememanager.js"); +/* harmony import */ var _settingspanel__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./settingspanel */ "./src/modules/settingspanel.js"); +/* harmony import */ var builtins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! builtins */ "./src/builtins/builtins.js"); +/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ui */ "./src/ui/ui.js"); +/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./emitter */ "./src/modules/emitter.js"); + + + + // import QuickEmoteMenu from "../builtins/emotemenu"; - // import VoiceMode from "./voicemode"; -// import DevMode from "./devmode"; - - - - // import PublicServers from "./publicservers"; @@ -1876,43 +2168,40 @@ Core.prototype.setConfig = function (config) { Core.prototype.init = async function () { if (data__WEBPACK_IMPORTED_MODULE_2__["Config"].version < data__WEBPACK_IMPORTED_MODULE_2__["Config"].minSupportedVersion) { - this.alert("Not Supported", "BetterDiscord v" + data__WEBPACK_IMPORTED_MODULE_2__["Config"].version + " (your version)" + " is not supported by the latest js (" + data__WEBPACK_IMPORTED_MODULE_2__["Config"].bbdVersion + ").

Please download the latest version from GitHub"); + ui__WEBPACK_IMPORTED_MODULE_8__["Modals"].alert("Not Supported", "BetterDiscord v" + data__WEBPACK_IMPORTED_MODULE_2__["Config"].version + " (your version)" + " is not supported by the latest js (" + data__WEBPACK_IMPORTED_MODULE_2__["Config"].bbdVersion + ").

Please download the latest version from GitHub"); return; } const latestLocalVersion = data__WEBPACK_IMPORTED_MODULE_2__["Config"].updater ? data__WEBPACK_IMPORTED_MODULE_2__["Config"].updater.LatestVersion : data__WEBPACK_IMPORTED_MODULE_2__["Config"].latestVersion; if (latestLocalVersion > data__WEBPACK_IMPORTED_MODULE_2__["Config"].version) { - this.alert("Update Available", ` + ui__WEBPACK_IMPORTED_MODULE_8__["Modals"].alert("Update Available", ` An update for BandagedBD is available (${latestLocalVersion})! Please Reinstall!

Download Installer `); } _utilities__WEBPACK_IMPORTED_MODULE_1__["default"].log("Startup", "Initializing Settings"); - this.initSettings(); + _settingspanel__WEBPACK_IMPORTED_MODULE_6__["default"].initialize(); _utilities__WEBPACK_IMPORTED_MODULE_1__["default"].log("Startup", "Initializing EmoteModule"); window.emotePromise = _emotes__WEBPACK_IMPORTED_MODULE_3__["default"].init().then(() => { _emotes__WEBPACK_IMPORTED_MODULE_3__["default"].initialized = true; _utilities__WEBPACK_IMPORTED_MODULE_1__["default"].log("Startup", "Initializing QuickEmoteMenu"); - _emotemenu__WEBPACK_IMPORTED_MODULE_4__["default"].init(); + _emitter__WEBPACK_IMPORTED_MODULE_9__["default"].dispatch("emotes-loaded"); // QuickEmoteMenu.init(); }); this.injectExternals(); await this.checkForGuilds(); _bdv2__WEBPACK_IMPORTED_MODULE_0__["default"].initialize(); _utilities__WEBPACK_IMPORTED_MODULE_1__["default"].log("Startup", "Updating Settings"); - _settingspanel__WEBPACK_IMPORTED_MODULE_8__["default"].initializeSettings(); + _settingspanel__WEBPACK_IMPORTED_MODULE_6__["default"].initializeSettings(); - for (const module in builtins__WEBPACK_IMPORTED_MODULE_9__) builtins__WEBPACK_IMPORTED_MODULE_9__[module].initialize(); + for (const module in builtins__WEBPACK_IMPORTED_MODULE_7__) builtins__WEBPACK_IMPORTED_MODULE_7__[module].initialize(); _utilities__WEBPACK_IMPORTED_MODULE_1__["default"].log("Startup", "Loading Plugins"); - const pluginErrors = _pluginmanager__WEBPACK_IMPORTED_MODULE_5__["default"].loadPlugins(); + const pluginErrors = _pluginmanager__WEBPACK_IMPORTED_MODULE_4__["default"].loadPlugins(); _utilities__WEBPACK_IMPORTED_MODULE_1__["default"].log("Startup", "Loading Themes"); - const themeErrors = _thememanager__WEBPACK_IMPORTED_MODULE_6__["default"].loadThemes(); - $("#customcss").detach().appendTo(document.head); - window.addEventListener("beforeunload", function () { - if (data__WEBPACK_IMPORTED_MODULE_2__["SettingsCookie"]["bda-dc-0"]) document.querySelector(".btn.btn-disconnect").click(); - }); // PublicServers.initialize(); + const themeErrors = _thememanager__WEBPACK_IMPORTED_MODULE_5__["default"].loadThemes(); + $("#customcss").detach().appendTo(document.head); // PublicServers.initialize(); _emotes__WEBPACK_IMPORTED_MODULE_3__["default"].autoCapitalize(); _utilities__WEBPACK_IMPORTED_MODULE_1__["default"].log("Startup", "Removing Loading Icon"); @@ -1922,15 +2211,11 @@ Core.prototype.init = async function () { if (data__WEBPACK_IMPORTED_MODULE_2__["SettingsCookie"]["fork-ps-1"]) { _utilities__WEBPACK_IMPORTED_MODULE_1__["default"].log("Startup", "Collecting Startup Errors"); - this.showContentErrors({ + ui__WEBPACK_IMPORTED_MODULE_8__["Modals"].showContentErrors({ plugins: pluginErrors, themes: themeErrors }); - } // if (!DataStore.getBDData(bbdVersion)) { - // BdApi.alert("BBD Updated!", ["Lots of things were fixed in this update like Public Servers, Minimal Mode, Dark Mode and 24 Hour Timestamps.", BdApi.React.createElement("br"), BdApi.React.createElement("br"), "Feel free to test them all out!"]); - // DataStore.setBDData(bbdVersion, true); - // } - + } }; Core.prototype.checkForGuilds = function () { @@ -1954,32 +2239,11 @@ Core.prototype.injectExternals = async function () { if (window.require.original) window.require = window.require.original; }; -Core.prototype.initSettings = function () { - _datastore__WEBPACK_IMPORTED_MODULE_7__["default"].initialize(); - if (!_datastore__WEBPACK_IMPORTED_MODULE_7__["default"].getSettingGroup("settings")) return this.saveSettings(); - const savedSettings = this.loadSettings(); - $("'),$("#customcss").text(this.editor.session.getValue()).detach().appendTo(document.head)}saveCss(){w.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}}class ge extends g.React.Component{constructor(e){super(e),this.props.lines=0,this.setInitialState(),this.attach=this.attach.bind(this),this.detachedEditor=g.React.createElement(me,{attach:this.attach}),this.onClick=this.onClick.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.detach=this.detach.bind(this)}setInitialState(){this.state={detached:this.props.detached||W.editorDetached}}componentDidMount(){this.editor=ace.edit("bd-customcss-editor"),this.editor.setTheme("ace/theme/monokai"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{i["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){this.editor.destroy()}componentDidUpdate(e,t){t.detached&&!this.state.detached&&g.ReactDOM.unmountComponentAtNode(this.detachedRoot)}codeMirror(){}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=w.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=atob(e)),t}updateLineCount(){const e=this.refs.editor.value.split("\n").length;e!=this.props.lines&&(this.refs.lines.textContent=Array.from(new Array(e),(e,t)=>t+1).join(".\n")+".",this.props.lines=e)}render(){const e=this,{detached:t}=e.state;return g.React.createElement("div",{className:"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default",style:{padding:"60px 40px 0px"}},t&&g.React.createElement("div",{id:"editor-detached"},g.React.createElement(ne,{text:"Custom CSS Editor"}),g.React.createElement("h3",null,"Editor Detached"),g.React.createElement("button",{className:"btn btn-primary",onClick:()=>{e.attach()}},"Attach")),!t&&g.React.createElement("div",null,g.React.createElement(ne,{text:"Custom CSS Editor"}),g.React.createElement("div",{className:"editor-wrapper"},g.React.createElement("div",{id:"bd-customcss-editor",className:"editor",ref:"editor"},e.css)),g.React.createElement("div",{id:"bd-customcss-attach-controls"},g.React.createElement("ul",{className:"checkbox-group"},g.React.createElement(pe,{id:"live-update",text:"Live Update",onChange:this.onChange,checked:i["bda-css-0"]})),g.React.createElement("div",{id:"bd-customcss-detach-controls-button"},g.React.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),g.React.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),g.React.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("detach")}},"Detach"),g.React.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on detach"),g.React.createElement("div",{className:"help-text"},"Press ",g.React.createElement("code",{className:"inline"},"ctrl"),"+",g.React.createElement("span",{className:"inline"},",")," with the editor focused to access the editor's settings.")))))}onClick(e){switch(e){case"update":this.updateCss();break;case"save":this.saveCss();break;case"detach":this.detach()}}onChange(e,t){switch(e){case"live-update":i["bda-css-0"]=t,je.saveSettings()}}updateCss(){0==$("#customcss").length&&$("head").append(''),$("#customcss").text(this.editor.session.getValue()).detach().appendTo(document.head)}saveCss(){w.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}detach(){this.setState({detached:!0});const e=this.detachedRoot;e?g.ReactDOM.render(this.detachedEditor,e):console.log("FAILED TO INJECT ROOT: .app")}get detachedRoot(){const e=$("#bd-customcss-detach-container");return e.length?e[0]:this.injectDetachedRoot()?this.detachedRoot:null}injectDetachedRoot(){return!!$(".app, .app-2rEoOp").length&&($("
",{id:"bd-customcss-detach-container"}).insertAfter($(".app, .app-2rEoOp")),!0)}attach(){this.setState({detached:!1})}}class fe{constructor(e){this.sideBarOnClick=this.sideBarOnClick.bind(this),this.onChange=e.onChange,this.sidebar=new X(this.sideBarOnClick)}get root(){const e=$("#bd-settingspane-container");return e.length?e[0]:this.injectRoot()?this.root:null}injectRoot(){if(!$(".layer-3QrUeG .standardSidebarView-3F1I7i, .layer-3QrUeG .ui-standard-sidebar-view").length)return!1;const e=$("
",{class:"contentRegion-3nDuYy content-region",id:"bd-settingspane-container"});return $(".layer-3QrUeG .standardSidebarView-3F1I7i, .layer-3QrUeG .ui-standard-sidebar-view").append(e),m.onRemoved(e[0],()=>{_.unmountComponentAtNode(e[0])}),!0}get coreSettings(){const e=this.getSettings("core");return[...new Set(e.map(e=>e.category))].map(t=>({title:t,settings:e.filter(e=>e.category==t)}))}get emoteSettings(){return this.getSettings("emote")}getSettings(e){return Object.keys(r).reduce((t,s)=>{const n=r[s];return n.cat===e&&n.implemented&&!n.hidden&&(n.text=s,t.push(n)),t},[])}sideBarOnClick(e){const t=this;switch($(".contentRegion-3nDuYy, .content-region").first().hide(),$(t.root).show(),e){case"core":t.renderCoreSettings();break;case"emotes":t.renderEmoteSettings();break;case"customcss":t.renderCustomCssEditor();break;case"plugins":t.renderPluginPane();break;case"themes":t.renderThemePane()}}renderSidebar(){const e=this;$("[class*='side-'] > [class*='item-']").off("click.v2settingspanel").on("click.v2settingspanel",()=>{_.unmountComponentAtNode(e.root),$(e.root).hide(),$(".contentRegion-3nDuYy, .content-region").first().show()}),e.sidebar.render()}get coreComponent(){return U.createElement(ee,{contentColumn:!0,fade:!0,dark:!0,children:[U.createElement(ie,{key:"cspanel",onChange:this.onChange,sections:this.coreSettings}),U.createElement(le,{key:"tools"})]})}get emoteComponent(){return U.createElement(ee,{contentColumn:!0,fade:!0,dark:!0,children:[U.createElement(ce,{key:"espanel",title:"Emote Settings",onChange:this.onChange,settings:this.emoteSettings,button:{title:"Clear Emote Cache",onClick:()=>{q.clearEmoteData(),q.init(),L.init()}}}),U.createElement(le,{key:"tools"})]})}get customCssComponent(){return U.createElement(ee,{contentColumn:!0,fade:!0,dark:!0,children:[U.createElement(ge,{key:"csseditor"}),U.createElement(le,{key:"tools"})]})}contentComponent(e){const t="plugins"==e?this.pluginsComponent:this.themesComponent,s=e.replace("s",""),n=this;return U.createElement(class extends U.Component{constructor(e){super(e),this.onChange=this.onChange.bind(this)}componentDidMount(){x.on(`${s}-reloaded`,this.onChange),x.on(`${s}-loaded`,this.onChange),x.on(`${s}-unloaded`,this.onChange)}componentWillUnmount(){x.off(`${s}-reloaded`,this.onChange),x.off(`${s}-loaded`,this.onChange),x.off(`${s}-unloaded`,this.onChange)}onChange(){n.sideBarOnClick(e)}render(){return t}})}get pluginsComponent(){const e=Object.keys(u).sort((e,t)=>e.toLowerCase().localeCompare(t.toLowerCase())).reduce((e,t)=>(e.push(U.createElement(ue,{key:t,plugin:u[t].plugin})),e),[]),t=U.createElement(te,{key:"plugin-list",className:"bda-slist",children:e}),n=!i["fork-ps-5"]&&U.createElement(de,{className:"bd-reload-header",size:"18px",onClick:async()=>{D.updatePluginList(),this.sideBarOnClick("plugins")}}),o=U.createElement("button",{key:"folder-button",className:"bd-pfbtn",onClick:()=>{s(1).shell.openItem(A.pluginsFolder)}},"Open Plugin Folder"),r=U.createElement(se,{key:"pcolumn",title:"Plugins",children:[n,o,t]});return U.createElement(ee,{contentColumn:!0,fade:!0,dark:!0,children:[r,U.createElement(le,{key:"tools"})]})}get themesComponent(){const e=Object.keys(d).sort((e,t)=>e.toLowerCase().localeCompare(t.toLowerCase())).reduce((e,t)=>(e.push(U.createElement(he,{key:t,theme:d[t]})),e),[]),t=U.createElement(te,{key:"theme-list",className:"bda-slist",children:e}),n=!i["fork-ps-5"]&&U.createElement(de,{className:"bd-reload-header",size:"18px",onClick:async()=>{T.updateThemeList(),this.sideBarOnClick("themes")}}),o=U.createElement("button",{key:"folder-button",className:"bd-pfbtn",onClick:()=>{s(1).shell.openItem(A.themesFolder)}},"Open Theme Folder"),r=U.createElement(se,{key:"tcolumn",title:"Themes",children:[n,o,t]});return U.createElement(ee,{contentColumn:!0,fade:!0,dark:!0,children:[r,U.createElement(le,{key:"tools"})]})}renderCoreSettings(){const e=this.root;e?_.render(this.coreComponent,e):console.log("FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i")}renderEmoteSettings(){const e=this.root;e?_.render(this.emoteComponent,e):console.log("FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i")}renderCustomCssEditor(){const e=this.root;e?_.render(this.customCssComponent,e):console.log("FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i")}renderPluginPane(){const e=this.root;e?_.render(this.contentComponent("plugins"),e):console.log("FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i")}renderThemePane(){const e=this.root;e?_.render(this.contentComponent("themes"),e):console.log("FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i")}}class be extends U.Component{constructor(e){super(e)}render(){const{sidebar:e,content:t,tools:s}=this.props.children;return U.createElement("div",{className:"standardSidebarView-3F1I7i ui-standard-sidebar-view"},U.createElement("div",{className:"sidebarRegion-VFTUkN sidebar-region"},U.createElement(ee,{key:"sidebarScroller",ref:"sidebarScroller",sidebar:!0,fade:e.fade||!0,dark:e.dark||!0,children:e.component})),U.createElement("div",{className:"contentRegion-3nDuYy content-region"},U.createElement("div",{className:"contentTransitionWrap-3hqOEW content-transition-wrap"},U.createElement("div",{className:"scrollerWrap-2lJEkd firefoxFixScrollFlex-cnI2ix contentRegionScrollerWrap-3YZXdm content-region-scroller-wrap scrollerThemed-2oenus themeGhost-28MSn0 scrollerTrack-1ZIpsv"},U.createElement("div",{className:"scroller-2FKFPG firefoxFixScrollFlex-cnI2ix contentRegionScroller-26nc1e content-region-scroller scroller",ref:"contentScroller"},U.createElement("div",{className:"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default"},t.component),s.component)))))}}class ye extends U.Component{constructor(e){super(e),this.props.server.iconUrl||(this.props.server.iconUrl=this.props.fallback),this.state={imageError:!1,joined:this.props.guildList.includes(this.props.server.identifier)}}render(){const{server:e}=this.props;return U.createElement("div",{className:`card-3Qj_Yx cardPrimary-1Hv-to marginBottom8-AtZOdT bd-server-card${e.pinned?" bd-server-card-pinned":""}`},U.createElement("img",{ref:"img",className:"bd-server-image",src:e.iconUrl,onError:this.handleError.bind(this)}),U.createElement("div",{className:"flexChild-faoVW3 bd-server-content"},U.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-header"},U.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name"},e.name),U.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count"},e.members," Members")),U.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6"},U.createElement("div",{className:"scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container"},U.createElement("div",{className:"scroller-2FKFPG scroller bd-server-description"},e.description))),U.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer"},U.createElement("div",{className:"flexChild-faoVW3 bd-server-tags",style:{flex:"1 1 auto"}},e.categories.join(", ")),this.state.joined&&U.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN colorGreen-29iAKY",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#3ac15c"}},U.createElement("div",{className:"ui-button-contents"},"Joined")),e.error&&U.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN disabled-9aF2ug",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#c13a3a"}},U.createElement("div",{className:"ui-button-contents"},"Error")),!e.error&&!this.state.joined&&U.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN",style:{minHeight:"12px",marginTop:"4px"},onClick:()=>{this.join()}},U.createElement("div",{className:"ui-button-contents"},"Join")))))}handleError(){this.props.server.iconUrl=this.props.fallback,this.setState({imageError:!0})}join(){this.props.join(this)}}class ve extends U.Component{constructor(e){super(e),this.setInitialState(),this.close=this.close.bind(this),this.changeCategory=this.changeCategory.bind(this),this.search=this.search.bind(this),this.searchKeyDown=this.searchKeyDown.bind(this),this.checkConnection=this.checkConnection.bind(this),this.join=this.join.bind(this),this.connect=this.connect.bind(this),this.GuildStore=b.getByProps("getGuilds"),this.AvatarDefaults=b.getByProps("getUserAvatarURL","DEFAULT_AVATARS"),this.InviteActions=b.getByProps("acceptInvite"),this.SortedGuildStore=b.getByProps("getSortedGuilds")}componentDidMount(){this.checkConnection()}setInitialState(){this.state={selectedCategory:-1,title:"Loading...",loading:!0,servers:[],next:null,connection:{state:0,user:null}}}close(){_.unmountComponentAtNode(document.getElementById(this.props.rootId))}search(e,t){const s=this;$.ajax({method:"GET",url:`${s.endPoint}${e}${e?"&schema=new":"?schema=new"}`,success:e=>{let n=e.results.reduce((e,t)=>(t.joined=!1,e.push(t),e),[]);t||(n=s.state.servers.concat(n));let o=e.size+e.from;e.next=`?from=${o}`,s.state.term&&(e.next+=`&term=${s.state.term}`),s.state.selectedCategory&&(e.next+=`&category=${s.categoryButtons[s.state.selectedCategory]}`),o>=e.total&&(o=e.total,e.next=null);let r=`Showing 1-${o} of ${e.total} results in ${s.categoryButtons[s.state.selectedCategory]}`;s.state.term&&(r+=` for ${s.state.term}`),s.setState({loading:!1,title:r,servers:n,next:e.next}),t&&(s.refs.sbv.refs.contentScroller.scrollTop=0)},error:()=>{s.setState({loading:!1,title:"Failed to load servers. Check console for details"})}})}join(e){if(e.props.pinned)return this.InviteActions.acceptInvite(e.props.invite_code);$.ajax({method:"GET",url:`${this.joinEndPoint}/${e.props.server.identifier}`,headers:{Accept:"application/json;","Content-Type":"application/json;","x-discord-token":this.state.connection.user.accessToken},crossDomain:!0,xhrFields:{withCredentials:!0},success:()=>{e.setState({joined:!0})}})}connect(){const e=this.windowOptions;e.x=Math.round(window.screenX+window.innerWidth/2-e.width/2),e.y=Math.round(window.screenY+window.innerHeight/2-e.height/2),this.joinWindow=new(window.require("electron").remote.BrowserWindow)(e);this.joinWindow.webContents.on("did-navigate",(e,t)=>{"https://auth.discordservers.com/info"==t&&(this.joinWindow.close(),this.checkConnection())}),this.joinWindow.loadURL("https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=https://auth.discordservers.com/info")}get windowOptions(){return{width:500,height:550,backgroundColor:"#282b30",show:!0,resizable:!1,maximizable:!1,minimizable:!1,alwaysOnTop:!0,frame:!1,center:!1,webPreferences:{nodeIntegration:!1}}}get bdServer(){const e=this.SortedGuildStore.guildPositions,t=this.AvatarDefaults.DEFAULT_AVATARS;return U.createElement(ye,{server:{name:"BetterDiscord",online:"7500+",members:"20000+",categories:["community","programming","support"],description:"Official BetterDiscord server for support etc",identifier:"86004744966914048",iconUrl:"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp",nativejoin:!0,invite_code:"0Tmfo5ZbORCRqbAd",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]})}get endPoint(){return"https://search.discordservers.com"}get joinEndPoint(){return"https://j.discordservers.com"}get connectEndPoint(){return"https://join.discordservers.com/connect"}checkConnection(){const e=this;try{$.ajax({method:"GET",url:"https://auth.discordservers.com/info",headers:{Accept:"application/json;","Content-Type":"application/json;"},crossDomain:!0,xhrFields:{withCredentials:!0},success:t=>{e.setState({selectedCategory:0,connection:{state:2,user:t}}),e.search("",!0)},error:()=>{e.setState({title:"Not connected to discordservers.com!",loading:!0,selectedCategory:-1,connection:{state:1,user:null}})}})}catch(t){e.setState({title:"Not connected to discordservers.com!",loading:!0,selectedCategory:-1,connection:{state:1,user:null}})}}render(){return U.createElement(be,{ref:"sbv",children:this.component})}get component(){return{sidebar:{component:this.sidebar},content:{component:this.content},tools:{component:U.createElement(le,{key:"pt",ref:"tools",onClick:this.close})}}}get sidebar(){return U.createElement("div",{className:"sidebar",key:"ps"},U.createElement("div",{className:"ui-tab-bar SIDE"},U.createElement("div",{className:"ui-tab-bar-header",style:{fontSize:"16px"}},"Public Servers"),U.createElement(Q.Separator,null),this.searchInput,U.createElement(Q.Separator,null),U.createElement(Q.Header,{text:"Categories"}),this.categoryButtons.map((e,t)=>U.createElement(Q.Item,{id:t,onClick:this.changeCategory,key:t,text:e,selected:this.state.selectedCategory===t})),U.createElement(Q.Separator,null),this.footer,this.connection))}get searchInput(){return U.createElement("div",{className:"ui-form-item"},U.createElement("div",{className:"ui-text-input flex-vertical",style:{width:"172px",marginLeft:"10px"}},U.createElement("input",{ref:"searchinput",onKeyDown:this.searchKeyDown,onChange:()=>{},type:"text",className:"input default",placeholder:"Search...",maxLength:"50"})))}searchKeyDown(e){const t=this;if(t.state.loading||13!==e.which)return;t.setState({loading:!0,title:"Loading...",term:e.target.value});let s=`?term=${e.target.value}`;0!==t.state.selectedCategory&&(s+=`&category=${t.categoryButtons[t.state.selectedCategory]}`),t.search(s,!0)}get categoryButtons(){return["All","FPS Games","MMO Games","Strategy Games","MOBA Games","RPG Games","Tabletop Games","Sandbox Games","Simulation Games","Music","Community","Language","Programming","Other"]}changeCategory(e){const t=this;t.state.loading||(t.refs.searchinput.value="",t.setState({loading:!0,selectedCategory:e,title:"Loading...",term:null}),0!==e?t.search(`?category=${t.categoryButtons[e]}`,!0):t.search("",!0))}get content(){const e=this,t=this.SortedGuildStore.guildPositions,s=this.AvatarDefaults.DEFAULT_AVATARS;return 1===e.state.connection.state?e.notConnected:[U.createElement("div",{ref:"content",key:"pc",className:"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default"},U.createElement(ne,{text:e.state.title}),e.bdServer,e.state.servers.map(n=>U.createElement(ye,{key:n.identifier,server:n,join:e.join,guildList:t,fallback:s[Math.floor(5*Math.random())]})),e.state.next&&U.createElement("button",{type:"button",onClick:()=>{e.state.loading||(e.setState({loading:!0}),e.search(e.state.next,!1))},className:"ui-button filled brand small grow",style:{width:"100%",marginTop:"10px",marginBottom:"10px"}},U.createElement("div",{className:"ui-button-contents"},e.state.loading?"Loading":"Load More")),e.state.servers.length>0&&U.createElement(ne,{text:e.state.title}))]}get notConnected(){return[U.createElement("div",{key:"ncc",ref:"content",className:"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default"},U.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},"Not connected to discordservers.com!",U.createElement("button",{onClick:this.connect,type:"button",className:"ui-button filled brand small grow",style:{display:"inline-block",minHeight:"18px",marginLeft:"10px",lineHeight:"14px"}},U.createElement("div",{className:"ui-button-contents"},"Connect"))),this.bdServer)]}get footer(){return U.createElement("div",{className:"ui-tab-bar-header"},U.createElement("a",{href:"https://discordservers.com",target:"_blank"},"Discordservers.com"))}get connection(){const{connection:e}=this.state;return 2!==e.state?U.createElement("span",null):U.createElement("span",null,U.createElement(Q.Separator,null),U.createElement("span",{style:{color:"#b9bbbe",fontSize:"10px",marginLeft:"10px"}},"Connected as: ",`${e.user.username}#${e.user.discriminator}`),U.createElement("div",{style:{padding:"5px 10px 0 10px"}},U.createElement("button",{style:{width:"100%",minHeight:"20px"},type:"button",className:"ui-button filled brand small grow"},U.createElement("div",{className:"ui-button-contents",onClick:this.connect},"Reconnect"))))}}class Ce extends U.Component{constructor(e){super(e)}componentDidMount(){$(window).on(`keyup.${this.props.id}`,e=>{27===e.which&&_.unmountComponentAtNode(this.refs.root.parentNode)}),$(`#${this.props.id}`).animate({opacity:1},{step:function(e){$(this).css("transform",`scale(${1.1-.1*e}) translateZ(0px)`)},duration:200,done:()=>{$(`#${this.props.id}`).css("opacity","").css("transform","")}})}componentWillUnmount(){$(window).off(`keyup.${this.props.id}`),$(`#${this.props.id}`).animate({opacity:0},{step:function(e){$(this).css("transform",`scale(${1.1-.1*e}) translateZ(0px)`)},duration:200,done:()=>{$(`#${this.props.rootId}`).remove()}}),$('[class*="layer-"]').removeClass("publicServersOpen").animate({opacity:1},{step:function(e){$(this).css("transform",`scale(${.07*e+.93}) translateZ(0px)`)},duration:200,done:()=>{$('[class*="layer-"]').css("opacity","").css("transform","")}})}componentWillMount(){$('[class*="layer-"]').addClass("publicServersOpen").animate({opacity:0},{step:function(e){$(this).css("transform",`scale(${.07*e+.93}) translateZ(0px)`)},duration:200})}render(){return U.createElement("div",{className:"layer bd-layer layer-3QrUeG",id:this.props.id,ref:"root",style:{opacity:0,transform:"scale(1.1) translateZ(0px)"}},this.props.children)}}var we=new class{constructor(){this.renderer=new fe({onChange:this.updateSettings.bind(this)})}renderSidebar(){this.renderer.renderSidebar()}updateSettings(e,t){x.dispatch("setting-updated","Modules",e,t),i[e]=t,"bda-es-4"==e&&(t?q.autoCapitalize():q.disableAutoCapitalize()),"fork-ps-5"==e&&(t?(A.watchContent("plugin"),A.watchContent("theme")):(A.unwatchContent("plugin"),A.unwatchContent("theme"))),"fork-wp-1"==e&&(k.setWindowPreference("transparent",t),t?k.setWindowPreference("backgroundColor",null):k.setWindowPreference("backgroundColor","#2f3136")),je.saveSettings()}initializeSettings(){i["bda-es-4"]&&q.autoCapitalize(),i["fork-ps-5"]&&(A.watchContent("plugin"),A.watchContent("theme")),je.saveSettings()}};function Ee(e,t,s,n){const o=(o,r,i)=>{e===o&&r===t&&(i?s():n())};return x.on("setting-updated",o),()=>{x.off("setting-updated",o)}}class ke{get name(){return"Unnamed Builtin"}get category(){return"Modules"}get id(){return"None"}async initialize(){i[this.id]&&await this.enable(),x.on("setting-updated",(e,t,s)=>{e===this.category&&t===this.id&&(s?this.enable():this.disable())})}async enable(){this.log("Enabled"),await this.enabled()}async disable(){this.log("Disabled"),await this.disabled()}async enabled(){}async disabled(){}log(...e){m.log(this.name,...e)}warn(...e){m.warn(this.name,...e)}error(...e){m.err(this.name,...e)}}var Se=new class extends ke{get name(){return"VoiceMode"}get category(){return"Modules"}get id(){return"bda-gs-4"}enabled(){$(".scroller.guild-channels ul").first().css("display","none"),$(".scroller.guild-channels header").first().css("display","none"),$(".app.flex-vertical, .app-2rEoOp").first().css("overflow","hidden"),$(".chat-3bRxxu").first().css("visibility","hidden").css("min-width","0px"),$(".flex-vertical.channels-wrap").first().css("flex-grow","100000"),$(".guild-header .btn.btn-hamburger").first().css("visibility","hidden")}disabled(){$(".scroller.guild-channels ul").first().css("display",""),$(".scroller.guild-channels header").first().css("display",""),$(".app.flex-vertical, .app-2rEoOp").first().css("overflow",""),$(".chat-3bRxxu").first().css("visibility","").css("min-width",""),$(".flex-vertical.channels-wrap").first().css("flex-grow",""),$(".guild-header .btn.btn-hamburger").first().css("visibility","")}};const xe=new RegExp("^(?!da-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$");var Pe=new class extends ke{get id(){return"fork-ps-4"}get category(){return"Modules"}get name(){return"ClassNormalizer"}disabled(){this.hasPatched&&(this.unpatchClassModules(b.getModules(this.moduleFilter.bind(this))),this.revertElement(document.querySelector("#app-mount")),this.hasPatched=!1)}enabled(){this.hasPatched||(this.patchClassModules(b.getModules(this.moduleFilter.bind(this))),this.normalizeElement(document.querySelector("#app-mount")),this.hasPatched=!0)}patchClassModules(e){for(const t of e)this.patchClassModule("da",t)}unpatchClassModules(e){for(const t of e)this.unpatchClassModule("da",t)}shouldIgnore(e){return!isNaN(e)||(!!(e.endsWith("px")||e.endsWith("ch")||e.endsWith("em")||e.endsWith("ms"))||(!!e.startsWith("layerContainer-")||(!(!e.startsWith("#")||7!=e.length&&4!=e.length)||!(!e.includes("calc(")&&!e.includes("rgba")))))}moduleFilter(e){if("object"!=typeof e||Array.isArray(e))return!1;if(e.__esModule)return!1;if(!Object.keys(e).length)return!1;for(const t in e){const s=e[t];if("string"!=typeof s)return!1;if(!this.shouldIgnore(s)){if(1===s.split("-").length)return!1;if(!xe.test(s.split(" ")[0]))return!1}}return!0}patchClassModule(e,t){for(const s in t){const n=t[s];if(this.shouldIgnore(n))continue;const o=n.split(" ");for(const n of o){const o=n.match(xe)[1];if(!o)continue;const r=o.split("-").map((e,t)=>t?e[0].toUpperCase()+e.slice(1):e).join("");t[s]+=` ${e}-${r}`}}}unpatchClassModule(e,t){for(const s in t){const n=t[s];if(this.shouldIgnore(n))continue;let o="";const r=n.split(" ");for(const t of r)t.startsWith(`${e}-`)||(o+=` ${t}`);t[s]=o.trim()}}normalizeElement(e){if(!(e instanceof Element))return;const t=e.classList;for(let s=0,n=t.length;st?e[0].toUpperCase()+e.slice(1):e).join("");e.classList.add(`da-${n}`)}for(const t of e.children)this.normalizeElement(t)}revertElement(e){if(!(e instanceof Element))return;e.children&&e.children.length&&this.revertElement(e.children[0]),e.nextElementSibling&&this.revertElement(e.nextElementSibling);const t=e.classList,s=[];for(let e=0;e{119!==e.which&&118!=e.which||this.log("Debugger Activated")}),this.selectorMode&&this.enableSelectors(),this.selectorCancel=Ee(this.category,this.selectorModeID,this.enableSelectors,this.disableSelectors)}disabled(){$(window).off("keydown.bdDevmode"),this.selectorMode&&this.disableSelectors(),this.selectorCancel&&this.selectorCancel()}enableSelectors(){$(document).on("contextmenu.bdDevmode",e=>{this.lastSelector=this.getSelector(e.toElement);setImmediate(()=>{let t=$(".contextMenu-HLZMGh");t.length<=0&&((t=$('
')).addClass($(".app, .app-2rEoOp").hasClass("theme-dark")?"theme-dark":"theme-light"),t.appendTo(".app, .app-2rEoOp"),t.css("top",e.clientY),t.css("left",e.clientX),$(document).on("click.bdDevModeCtx",()=>{t.remove(),$(document).off(".bdDevModeCtx")}),$(document).on("contextmenu.bdDevModeCtx",()=>{t.remove(),$(document).off(".bdDevModeCtx")}),$(document).on("keyup.bdDevModeCtx",e=>{27===e.keyCode&&(t.remove(),$(document).off(".bdDevModeCtx"))}));const s=$("
",{class:"itemGroup-1tL0uz"}),n=$("
",{class:"item-1Yvehc",click:()=>{g.ElectronModule.copy(this.lastSelector),t.hide()}}).append($("",{text:"Copy Selector"}));s.append(n),t.append(s),t.hasClass("undefined")&&t.css("top","-="+s.outerHeight())}),e.stopPropagation()})}disableSelectors(){$(document).off("contextmenu.bdDevmode"),$(document).off("contextmenu.bdDevModeCtx")}getRules(e,t=e.ownerDocument.styleSheets){return[...t].filter(e=>!e.href||!e.href.includes("BetterDiscordApp")).map(e=>[...e.cssRules||[]]).flat().filter(t=>t&&t.selectorText&&e.matches(t.selectorText)&&t.style.length&&t.selectorText.split(", ").length<8&&!t.selectorText.split(", ").includes("*"))}getSelector(e){if(e.id)return`#${e.id}`;const t=this.getRules(e),s=t[t.length-1];return s?s.selectorText:e.classList.length?`.${Array.from(e.classList).join(".")}`:`.${Array.from(e.parentElement.classList).join(".")}`}},Ne=new class extends ke{get name(){return"PublicServers"}get category(){return"Modules"}get id(){return"bda-gs-1"}enabled(){const e=W.guildClasses.wrapper.split(" ")[0];$(`.${e} .scroller-2FKFPG >:first-child`).after(this.button)}disabled(){$("#bd-pub-li").remove()}get component(){return g.React.createElement(n.Layer,{rootId:"pubslayerroot",id:"pubslayer"},g.React.createElement(n.Menu,{rootId:"pubslayerroot"}))}get root(){const e=document.getElementById("pubslayerroot");return e||(this.injectRoot()?this.root:null)}injectRoot(){return!!$(".layers, .layers-3iHuyZ").length&&($(".layers, .layers-3iHuyZ").append($("
",{id:"pubslayerroot"})),!0)}render(){const e=this.root;e?g.ReactDOM.render(this.component,e):console.log("FAILED TO LOCATE ROOT: .layers")}get button(){return $("
",{class:W.guildClasses.listItem,id:"bd-pub-li",style:i["bda-gs-1"]?"":"display: none;"}).append($("
",{class:"wrapper-25eVIn "+W.guildClasses.circleButtonMask,text:"public",id:"bd-pub-button",click:()=>{this.render()}}))}},Te=new class extends ke{get name(){return"DarkMode"}get category(){return"Modules"}get id(){return"bda-gs-5"}enabled(){$("#app-mount").addClass("bda-dark").addClass("bd-dark")}disabled(){$("#app-mount").removeClass("bda-dark").removeClass("bd-dark")}},$e=new class extends ke{get name(){return"MinimalMode"}get category(){return"Modules"}get id(){return"bda-gs-2"}get hideChannelsID(){return"bda-gs-3"}get hideChannels(){return i[this.hideChannelsID]}constructor(){super(),this.enableHideChannels=this.enableHideChannels.bind(this),this.disableHideChannels=this.disableHideChannels.bind(this)}enabled(){$("body").addClass("bd-minimal"),this.hideChannels&&this.enableHideChannels(),this.hideChannelCancel=Ee(this.category,this.hideChannelsID,this.enableHideChannels,this.disableHideChannels)}disabled(){$("body").removeClass("bd-minimal"),this.hideChannels&&this.disableHideChannels(),this.hideChannelCancel&&this.hideChannelCancel()}enableHideChannels(){$("body").addClass("bd-minimal-chan")}disableHideChannels(){$("body").removeClass("bd-minimal-chan")}},Be=new class extends ke{get name(){return"24Hour"}get category(){return"Modules"}get id(){return"bda-gs-6"}enabled(){this.inject24Hour()}disabled(){this.cancel24Hour&&this.cancel24Hour()}inject24Hour(){if(this.cancel24Hour)return;const e=new RegExp("([0-9]{1,2}):([0-9]{1,2})\\s(AM|PM)"),t=t=>{const s=t.returnValue.match(e);if(s&&4===s.length)return"AM"===s[3]?t.returnValue=t.returnValue.replace(s[0],`${"12"===s[1]?"00":s[1].padStart(2,"0")}:${s[2]}`):t.returnValue=t.returnValue.replace(s[0],`${"12"===s[1]?"12":parseInt(s[1])+12}:${s[2]}`)},s=m.monkeyPatch(g.TimeFormatter,"calendarFormat",{after:t}),n=m.monkeyPatch(g.TimeFormatter,"dateFormat",{after:t});this.cancel24Hour=()=>{s(),n()}}};const Me=b.getModule(e=>e.defaultProps&&e.defaultProps.hasOwnProperty("disableButtons"));var Oe=new class extends ke{get name(){return"ColoredText"}get category(){return"Modules"}get id(){return"bda-gs-7"}enabled(){this.injectColoredText()}disabled(){this.cancelColoredText&&this.cancelColoredText()}injectColoredText(){this.cancelColoredText||(this.cancelColoredText=m.monkeyPatch(Me.prototype,"render",{after:e=>{m.monkeyPatch(e.returnValue.props,"children",{silent:!0,after:({returnValue:t})=>{const s=t.props.children[1],n=e.thisObject.props.message.colorString;return s&&n&&(s.props.style={color:n}),t}})}}))}removeColoredText(){document.querySelectorAll(".markup-2BOw-j").forEach(e=>{e.style.setProperty("color","")})}};function Fe(){}Fe.prototype.setConfig=function(e){Object.assign(a,e)},Fe.prototype.init=async function(){if(a.version
Please download the latest version from GitHub");const e=a.updater?a.updater.LatestVersion:a.latestVersion;e>a.version&&this.alert("Update Available",`\n An update for BandagedBD is available (${e})! Please Reinstall!

\n Download Installer\n `),m.log("Startup","Initializing Settings"),this.initSettings(),m.log("Startup","Initializing EmoteModule"),window.emotePromise=q.init().then(()=>{q.initialized=!0,m.log("Startup","Initializing QuickEmoteMenu"),L.init()}),this.injectExternals(),await this.checkForGuilds(),W.initialize(),m.log("Startup","Updating Settings"),we.initializeSettings();for(const e in o)o[e].initialize();m.log("Startup","Loading Plugins");const t=D.loadPlugins();m.log("Startup","Loading Themes");const s=T.loadThemes();$("#customcss").detach().appendTo(document.head),window.addEventListener("beforeunload",function(){i["bda-dc-0"]&&document.querySelector(".btn.btn-disconnect").click()}),q.autoCapitalize(),m.log("Startup","Removing Loading Icon"),document.getElementsByClassName("bd-loaderv2")[0].remove(),m.log("Startup","Initializing Main Observer"),this.initObserver(),i["fork-ps-1"]&&(m.log("Startup","Collecting Startup Errors"),this.showContentErrors({plugins:t,themes:s}))},Fe.prototype.checkForGuilds=function(){return new Promise(e=>{const t=function(){const s=W.guildClasses.wrapper.split(" ")[0],n=W.guildClasses.listItem.split(" ")[0],o=W.guildClasses.blobContainer.split(" ")[0];if(document.querySelectorAll(`.${s} .${n} .${o}`).length>0)return e(a.deferLoaded=!0);setTimeout(t,100)};$(document).ready(function(){setTimeout(t,100)})})},Fe.prototype.injectExternals=async function(){await m.injectJs("https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js"),window.require.original&&(window.require=window.require.original)},Fe.prototype.initSettings=function(){if(w.initialize(),!w.getSettingGroup("settings"))return this.saveSettings();const e=this.loadSettings();$(''),$("#customcss").text(this.editor.session.getValue()).detach().appendTo(document.head)}saveCss(){w.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}}class Se extends g.React.Component{constructor(e){super(e),this.props.lines=0,this.setInitialState(),this.attach=this.attach.bind(this),this.detachedEditor=g.React.createElement(ke,{attach:this.attach}),this.onClick=this.onClick.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.detach=this.detach.bind(this)}setInitialState(){this.state={detached:this.props.detached||Oe.editorDetached}}componentDidMount(){this.editor=ace.edit("bd-customcss-editor"),this.editor.setTheme("ace/theme/monokai"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{i["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){this.editor.destroy()}componentDidUpdate(e,t){t.detached&&!this.state.detached&&g.ReactDOM.unmountComponentAtNode(this.detachedRoot)}codeMirror(){}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=w.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=atob(e)),t}updateLineCount(){const e=this.refs.editor.value.split("\n").length;e!=this.props.lines&&(this.refs.lines.textContent=Array.from(new Array(e),(e,t)=>t+1).join(".\n")+".",this.props.lines=e)}render(){const e=this,{detached:t}=e.state;return g.React.createElement("div",{className:"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default",style:{padding:"60px 40px 0px"}},t&&g.React.createElement("div",{id:"editor-detached"},g.React.createElement(te,{text:"Custom CSS Editor"}),g.React.createElement("h3",null,"Editor Detached"),g.React.createElement("button",{className:"btn btn-primary",onClick:()=>{e.attach()}},"Attach")),!t&&g.React.createElement("div",null,g.React.createElement(te,{text:"Custom CSS Editor"}),g.React.createElement("div",{className:"editor-wrapper"},g.React.createElement("div",{id:"bd-customcss-editor",className:"editor",ref:"editor"},e.css)),g.React.createElement("div",{id:"bd-customcss-attach-controls"},g.React.createElement("ul",{className:"checkbox-group"},g.React.createElement(Ee,{id:"live-update",text:"Live Update",onChange:this.onChange,checked:i["bda-css-0"]})),g.React.createElement("div",{id:"bd-customcss-detach-controls-button"},g.React.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),g.React.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),g.React.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("detach")}},"Detach"),g.React.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on detach"),g.React.createElement("div",{className:"help-text"},"Press ",g.React.createElement("code",{className:"inline"},"ctrl"),"+",g.React.createElement("span",{className:"inline"},",")," with the editor focused to access the editor's settings.")))))}onClick(e){switch(e){case"update":this.updateCss();break;case"save":this.saveCss();break;case"detach":this.detach()}}onChange(e,t){switch(e){case"live-update":i["bda-css-0"]=t,Je.saveSettings()}}updateCss(){0==$("#customcss").length&&$("head").append(''),$("#customcss").text(this.editor.session.getValue()).detach().appendTo(document.head)}saveCss(){w.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}detach(){this.setState({detached:!0});const e=this.detachedRoot;e?g.ReactDOM.render(this.detachedEditor,e):console.log("FAILED TO INJECT ROOT: .app")}get detachedRoot(){const e=$("#bd-customcss-detach-container");return e.length?e[0]:this.injectDetachedRoot()?this.detachedRoot:null}injectDetachedRoot(){return!!$(".app, .app-2rEoOp").length&&($("
",{id:"bd-customcss-detach-container"}).insertAfter($(".app, .app-2rEoOp")),!0)}attach(){this.setState({detached:!1})}}class xe{constructor(e){this.sideBarOnClick=this.sideBarOnClick.bind(this),this.onChange=e.onChange,this.sidebar=new K(this.sideBarOnClick)}get root(){const e=$("#bd-settingspane-container");return e.length?e[0]:this.injectRoot()?this.root:null}injectRoot(){if(!$(".layer-3QrUeG .standardSidebarView-3F1I7i, .layer-3QrUeG .ui-standard-sidebar-view").length)return!1;const e=$("
",{class:"contentRegion-3nDuYy content-region",id:"bd-settingspane-container"});return $(".layer-3QrUeG .standardSidebarView-3F1I7i, .layer-3QrUeG .ui-standard-sidebar-view").append(e),m.onRemoved(e[0],()=>{W.unmountComponentAtNode(e[0])}),!0}get coreSettings(){const e=this.getSettings("core");return[...new Set(e.map(e=>e.category))].map(t=>({title:t,settings:e.filter(e=>e.category==t)}))}get emoteSettings(){return this.getSettings("emote")}getSettings(e){return Object.keys(r).reduce((t,s)=>{const n=r[s];return n.cat===e&&n.implemented&&!n.hidden&&(n.text=s,t.push(n)),t},[])}sideBarOnClick(e){const t=this;switch($(".contentRegion-3nDuYy, .content-region").first().hide(),$(t.root).show(),e){case"core":t.renderCoreSettings();break;case"emotes":t.renderEmoteSettings();break;case"customcss":t.renderCustomCssEditor();break;case"plugins":t.renderPluginPane();break;case"themes":t.renderThemePane()}}renderSidebar(){const e=this;$("[class*='side-'] > [class*='item-']").off("click.v2settingspanel").on("click.v2settingspanel",()=>{W.unmountComponentAtNode(e.root),$(e.root).hide(),$(".contentRegion-3nDuYy, .content-region").first().show()}),e.sidebar.render()}get core2(){return this.coreSettings.map(e=>_.createElement(ue,Object.assign({},e,{onChange:this.onChange})))}get coreComponent(){return _.createElement(Q,{contentColumn:!0,fade:!0,dark:!0,children:[_.createElement(he,{key:"cspanel",onChange:this.onChange,sections:this.coreSettings}),_.createElement(me,{key:"tools"})]})}get emoteComponent(){return _.createElement(Q,{contentColumn:!0,fade:!0,dark:!0,children:[_.createElement(ge,{key:"espanel",title:"Emote Settings",onChange:this.onChange,settings:this.emoteSettings,button:{title:"Clear Emote Cache",onClick:()=>{U.clearEmoteData(),U.init()}}}),_.createElement(me,{key:"tools"})]})}get customCssComponent(){return _.createElement(Q,{contentColumn:!0,fade:!0,dark:!0,children:[_.createElement(Se,{key:"csseditor"}),_.createElement(me,{key:"tools"})]})}contentComponent(e){const t="plugins"==e?this.pluginsComponent:this.themesComponent,s=e.replace("s",""),n=this;return _.createElement(class extends _.Component{constructor(e){super(e),this.onChange=this.onChange.bind(this)}componentDidMount(){k.on(`${s}-reloaded`,this.onChange),k.on(`${s}-loaded`,this.onChange),k.on(`${s}-unloaded`,this.onChange)}componentWillUnmount(){k.off(`${s}-reloaded`,this.onChange),k.off(`${s}-loaded`,this.onChange),k.off(`${s}-unloaded`,this.onChange)}onChange(){n.sideBarOnClick(e)}render(){return t}})}get pluginsComponent(){const e=Object.keys(u).sort((e,t)=>e.toLowerCase().localeCompare(t.toLowerCase())).reduce((e,t)=>(e.push(_.createElement(be,{key:t,plugin:u[t].plugin})),e),[]),t=_.createElement(X,{key:"plugin-list",className:"bda-slist",children:e}),n=!i["fork-ps-5"]&&_.createElement(fe,{className:"bd-reload-header",size:"18px",onClick:async()=>{x.updatePluginList(),this.sideBarOnClick("plugins")}}),o=_.createElement("button",{key:"folder-button",className:"bd-pfbtn",onClick:()=>{s(1).shell.openItem(F.pluginsFolder)}},"Open Plugin Folder"),r=_.createElement(ee,{key:"pcolumn",title:"Plugins",children:[n,o,t]});return _.createElement(Q,{contentColumn:!0,fade:!0,dark:!0,children:[r,_.createElement(me,{key:"tools"})]})}get themesComponent(){const e=Object.keys(d).sort((e,t)=>e.toLowerCase().localeCompare(t.toLowerCase())).reduce((e,t)=>(e.push(_.createElement(we,{key:t,theme:d[t]})),e),[]),t=_.createElement(X,{key:"theme-list",className:"bda-slist",children:e}),n=!i["fork-ps-5"]&&_.createElement(fe,{className:"bd-reload-header",size:"18px",onClick:async()=>{D.updateThemeList(),this.sideBarOnClick("themes")}}),o=_.createElement("button",{key:"folder-button",className:"bd-pfbtn",onClick:()=>{s(1).shell.openItem(F.themesFolder)}},"Open Theme Folder"),r=_.createElement(ee,{key:"tcolumn",title:"Themes",children:[n,o,t]});return _.createElement(Q,{contentColumn:!0,fade:!0,dark:!0,children:[r,_.createElement(me,{key:"tools"})]})}renderCoreSettings(){const e=this.root;e?W.render(this.coreComponent,e):console.log("FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i")}renderEmoteSettings(){const e=this.root;e?W.render(this.emoteComponent,e):console.log("FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i")}renderCustomCssEditor(){const e=this.root;e?W.render(this.customCssComponent,e):console.log("FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i")}renderPluginPane(){const e=this.root;e?W.render(this.contentComponent("plugins"),e):console.log("FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i")}renderThemePane(){const e=this.root;e?W.render(this.contentComponent("themes"),e):console.log("FAILED TO LOCATE ROOT: .layer-3QrUeG .standardSidebarView-3F1I7i")}}class Pe extends _.Component{constructor(e){super(e)}render(){const{sidebar:e,content:t,tools:s}=this.props.children;return _.createElement("div",{className:"standardSidebarView-3F1I7i ui-standard-sidebar-view"},_.createElement("div",{className:"sidebarRegion-VFTUkN sidebar-region"},_.createElement(Q,{key:"sidebarScroller",ref:"sidebarScroller",sidebar:!0,fade:e.fade||!0,dark:e.dark||!0,children:e.component})),_.createElement("div",{className:"contentRegion-3nDuYy content-region"},_.createElement("div",{className:"contentTransitionWrap-3hqOEW content-transition-wrap"},_.createElement("div",{className:"scrollerWrap-2lJEkd firefoxFixScrollFlex-cnI2ix contentRegionScrollerWrap-3YZXdm content-region-scroller-wrap scrollerThemed-2oenus themeGhost-28MSn0 scrollerTrack-1ZIpsv"},_.createElement("div",{className:"scroller-2FKFPG firefoxFixScrollFlex-cnI2ix contentRegionScroller-26nc1e content-region-scroller scroller",ref:"contentScroller"},_.createElement("div",{className:"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default"},t.component),s.component)))))}}class De extends _.Component{constructor(e){super(e),this.props.server.iconUrl||(this.props.server.iconUrl=this.props.fallback),this.state={imageError:!1,joined:this.props.guildList.includes(this.props.server.identifier)}}render(){const{server:e}=this.props;return _.createElement("div",{className:`card-3Qj_Yx cardPrimary-1Hv-to marginBottom8-AtZOdT bd-server-card${e.pinned?" bd-server-card-pinned":""}`},_.createElement("img",{ref:"img",className:"bd-server-image",src:e.iconUrl,onError:this.handleError.bind(this)}),_.createElement("div",{className:"flexChild-faoVW3 bd-server-content"},_.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-header"},_.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name"},e.name),_.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count"},e.members," Members")),_.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6"},_.createElement("div",{className:"scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container"},_.createElement("div",{className:"scroller-2FKFPG scroller bd-server-description"},e.description))),_.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer"},_.createElement("div",{className:"flexChild-faoVW3 bd-server-tags",style:{flex:"1 1 auto"}},e.categories.join(", ")),this.state.joined&&_.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN colorGreen-29iAKY",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#3ac15c"}},_.createElement("div",{className:"ui-button-contents"},"Joined")),e.error&&_.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN disabled-9aF2ug",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#c13a3a"}},_.createElement("div",{className:"ui-button-contents"},"Error")),!e.error&&!this.state.joined&&_.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN",style:{minHeight:"12px",marginTop:"4px"},onClick:()=>{this.join()}},_.createElement("div",{className:"ui-button-contents"},"Join")))))}handleError(){this.props.server.iconUrl=this.props.fallback,this.setState({imageError:!0})}join(){this.props.join(this)}}class Ne extends _.Component{constructor(e){super(e),this.setInitialState(),this.close=this.close.bind(this),this.changeCategory=this.changeCategory.bind(this),this.search=this.search.bind(this),this.searchKeyDown=this.searchKeyDown.bind(this),this.checkConnection=this.checkConnection.bind(this),this.join=this.join.bind(this),this.connect=this.connect.bind(this),this.GuildStore=b.getByProps("getGuilds"),this.AvatarDefaults=b.getByProps("getUserAvatarURL","DEFAULT_AVATARS"),this.InviteActions=b.getByProps("acceptInvite"),this.SortedGuildStore=b.getByProps("getSortedGuilds")}componentDidMount(){this.checkConnection()}setInitialState(){this.state={selectedCategory:-1,title:"Loading...",loading:!0,servers:[],next:null,connection:{state:0,user:null}}}close(){W.unmountComponentAtNode(document.getElementById(this.props.rootId))}search(e,t){const s=this;$.ajax({method:"GET",url:`${s.endPoint}${e}${e?"&schema=new":"?schema=new"}`,success:e=>{let n=e.results.reduce((e,t)=>(t.joined=!1,e.push(t),e),[]);t||(n=s.state.servers.concat(n));let o=e.size+e.from;e.next=`?from=${o}`,s.state.term&&(e.next+=`&term=${s.state.term}`),s.state.selectedCategory&&(e.next+=`&category=${s.categoryButtons[s.state.selectedCategory]}`),o>=e.total&&(o=e.total,e.next=null);let r=`Showing 1-${o} of ${e.total} results in ${s.categoryButtons[s.state.selectedCategory]}`;s.state.term&&(r+=` for ${s.state.term}`),s.setState({loading:!1,title:r,servers:n,next:e.next}),t&&(s.refs.sbv.refs.contentScroller.scrollTop=0)},error:()=>{s.setState({loading:!1,title:"Failed to load servers. Check console for details"})}})}join(e){if(e.props.pinned)return this.InviteActions.acceptInvite(e.props.invite_code);$.ajax({method:"GET",url:`${this.joinEndPoint}/${e.props.server.identifier}`,headers:{Accept:"application/json;","Content-Type":"application/json;","x-discord-token":this.state.connection.user.accessToken},crossDomain:!0,xhrFields:{withCredentials:!0},success:()=>{e.setState({joined:!0})}})}connect(){const e=this.windowOptions;e.x=Math.round(window.screenX+window.innerWidth/2-e.width/2),e.y=Math.round(window.screenY+window.innerHeight/2-e.height/2),this.joinWindow=new(window.require("electron").remote.BrowserWindow)(e);this.joinWindow.webContents.on("did-navigate",(e,t)=>{"https://auth.discordservers.com/info"==t&&(this.joinWindow.close(),this.checkConnection())}),this.joinWindow.loadURL("https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=https://auth.discordservers.com/info")}get windowOptions(){return{width:500,height:550,backgroundColor:"#282b30",show:!0,resizable:!1,maximizable:!1,minimizable:!1,alwaysOnTop:!0,frame:!1,center:!1,webPreferences:{nodeIntegration:!1}}}get bdServer(){const e=this.SortedGuildStore.guildPositions,t=this.AvatarDefaults.DEFAULT_AVATARS;return _.createElement(De,{server:{name:"BetterDiscord",online:"7500+",members:"20000+",categories:["community","programming","support"],description:"Official BetterDiscord server for support etc",identifier:"86004744966914048",iconUrl:"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp",nativejoin:!0,invite_code:"0Tmfo5ZbORCRqbAd",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]})}get endPoint(){return"https://search.discordservers.com"}get joinEndPoint(){return"https://j.discordservers.com"}get connectEndPoint(){return"https://join.discordservers.com/connect"}checkConnection(){const e=this;try{$.ajax({method:"GET",url:"https://auth.discordservers.com/info",headers:{Accept:"application/json;","Content-Type":"application/json;"},crossDomain:!0,xhrFields:{withCredentials:!0},success:t=>{e.setState({selectedCategory:0,connection:{state:2,user:t}}),e.search("",!0)},error:()=>{e.setState({title:"Not connected to discordservers.com!",loading:!0,selectedCategory:-1,connection:{state:1,user:null}})}})}catch(t){e.setState({title:"Not connected to discordservers.com!",loading:!0,selectedCategory:-1,connection:{state:1,user:null}})}}render(){return _.createElement(Pe,{ref:"sbv",children:this.component})}get component(){return{sidebar:{component:this.sidebar},content:{component:this.content},tools:{component:_.createElement(me,{key:"pt",ref:"tools",onClick:this.close})}}}get sidebar(){return _.createElement("div",{className:"sidebar",key:"ps"},_.createElement("div",{className:"ui-tab-bar SIDE"},_.createElement("div",{className:"ui-tab-bar-header",style:{fontSize:"16px"}},"Public Servers"),_.createElement(Y.Separator,null),this.searchInput,_.createElement(Y.Separator,null),_.createElement(Y.Header,{text:"Categories"}),this.categoryButtons.map((e,t)=>_.createElement(Y.Item,{id:t,onClick:this.changeCategory,key:t,text:e,selected:this.state.selectedCategory===t})),_.createElement(Y.Separator,null),this.footer,this.connection))}get searchInput(){return _.createElement("div",{className:"ui-form-item"},_.createElement("div",{className:"ui-text-input flex-vertical",style:{width:"172px",marginLeft:"10px"}},_.createElement("input",{ref:"searchinput",onKeyDown:this.searchKeyDown,onChange:()=>{},type:"text",className:"input default",placeholder:"Search...",maxLength:"50"})))}searchKeyDown(e){const t=this;if(t.state.loading||13!==e.which)return;t.setState({loading:!0,title:"Loading...",term:e.target.value});let s=`?term=${e.target.value}`;0!==t.state.selectedCategory&&(s+=`&category=${t.categoryButtons[t.state.selectedCategory]}`),t.search(s,!0)}get categoryButtons(){return["All","FPS Games","MMO Games","Strategy Games","MOBA Games","RPG Games","Tabletop Games","Sandbox Games","Simulation Games","Music","Community","Language","Programming","Other"]}changeCategory(e){const t=this;t.state.loading||(t.refs.searchinput.value="",t.setState({loading:!0,selectedCategory:e,title:"Loading...",term:null}),0!==e?t.search(`?category=${t.categoryButtons[e]}`,!0):t.search("",!0))}get content(){const e=this,t=this.SortedGuildStore.guildPositions,s=this.AvatarDefaults.DEFAULT_AVATARS;return 1===e.state.connection.state?e.notConnected:[_.createElement("div",{ref:"content",key:"pc",className:"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default"},_.createElement(te,{text:e.state.title}),e.bdServer,e.state.servers.map(n=>_.createElement(De,{key:n.identifier,server:n,join:e.join,guildList:t,fallback:s[Math.floor(5*Math.random())]})),e.state.next&&_.createElement("button",{type:"button",onClick:()=>{e.state.loading||(e.setState({loading:!0}),e.search(e.state.next,!1))},className:"ui-button filled brand small grow",style:{width:"100%",marginTop:"10px",marginBottom:"10px"}},_.createElement("div",{className:"ui-button-contents"},e.state.loading?"Loading":"Load More")),e.state.servers.length>0&&_.createElement(te,{text:e.state.title}))]}get notConnected(){return[_.createElement("div",{key:"ncc",ref:"content",className:"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default"},_.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},"Not connected to discordservers.com!",_.createElement("button",{onClick:this.connect,type:"button",className:"ui-button filled brand small grow",style:{display:"inline-block",minHeight:"18px",marginLeft:"10px",lineHeight:"14px"}},_.createElement("div",{className:"ui-button-contents"},"Connect"))),this.bdServer)]}get footer(){return _.createElement("div",{className:"ui-tab-bar-header"},_.createElement("a",{href:"https://discordservers.com",target:"_blank"},"Discordservers.com"))}get connection(){const{connection:e}=this.state;return 2!==e.state?_.createElement("span",null):_.createElement("span",null,_.createElement(Y.Separator,null),_.createElement("span",{style:{color:"#b9bbbe",fontSize:"10px",marginLeft:"10px"}},"Connected as: ",`${e.user.username}#${e.user.discriminator}`),_.createElement("div",{style:{padding:"5px 10px 0 10px"}},_.createElement("button",{style:{width:"100%",minHeight:"20px"},type:"button",className:"ui-button filled brand small grow"},_.createElement("div",{className:"ui-button-contents",onClick:this.connect},"Reconnect"))))}}class $e extends _.Component{constructor(e){super(e)}componentDidMount(){$(window).on(`keyup.${this.props.id}`,e=>{27===e.which&&W.unmountComponentAtNode(this.refs.root.parentNode)}),$(`#${this.props.id}`).animate({opacity:1},{step:function(e){$(this).css("transform",`scale(${1.1-.1*e}) translateZ(0px)`)},duration:200,done:()=>{$(`#${this.props.id}`).css("opacity","").css("transform","")}})}componentWillUnmount(){$(window).off(`keyup.${this.props.id}`),$(`#${this.props.id}`).animate({opacity:0},{step:function(e){$(this).css("transform",`scale(${1.1-.1*e}) translateZ(0px)`)},duration:200,done:()=>{$(`#${this.props.rootId}`).remove()}}),$('[class*="layer-"]').removeClass("publicServersOpen").animate({opacity:1},{step:function(e){$(this).css("transform",`scale(${.07*e+.93}) translateZ(0px)`)},duration:200,done:()=>{$('[class*="layer-"]').css("opacity","").css("transform","")}})}componentWillMount(){$('[class*="layer-"]').addClass("publicServersOpen").animate({opacity:0},{step:function(e){$(this).css("transform",`scale(${.07*e+.93}) translateZ(0px)`)},duration:200})}render(){return _.createElement("div",{className:"layer bd-layer layer-3QrUeG",id:this.props.id,ref:"root",style:{opacity:0,transform:"scale(1.1) translateZ(0px)"}},this.props.children)}}class Be{static get ModalStack(){return b.getByProps("push","update","pop","popWithKey")}static get AlertModal(){return b.getByPrototypes("handleCancel","handleSubmit","handleMinorConfirm")}static get TextElement(){return b.getByProps("Sizes","Weights")}static get ConfirmationModal(){return b.getModule(e=>e.defaultProps&&e.key&&"confirm-modal"==e.key())}static default(e,t){const s=$(`
\n
\n \n
`);s.find(".footer button").on("click",()=>{s.addClass("closing"),setTimeout(()=>{s.remove()},300)}),s.find(".bd-backdrop").on("click",()=>{s.addClass("closing"),setTimeout(()=>{s.remove()},300)}),s.appendTo("#app-mount")}static alert(e,t){if(this.ModalStack&&this.AlertModal)return this.default(e,t);this.ModalStack.push(function(s){return _.createElement(this.AlertModal,Object.assign({title:e,body:t},s))})}static showConfirmationModal(e,t,s={}){const n=this.TextElement,o=this.ConfirmationModal,r=this.ModalStack;if(!this.ModalStack||!this.ConfirmationModal||!this.TextElement)return this.alert(e,t);const{onConfirm:i,onCancel:a,confirmText:l,cancelText:c,danger:d=!1}=s;"string"==typeof t?t=n({color:n.Colors.PRIMARY,children:[t]}):Array.isArray(t)&&(t=n({color:n.Colors.PRIMARY,children:t})),t=[t];const u=()=>{};r.push(function(s){return _.createElement(o,Object.assign({header:e,children:t,red:d,confirmText:l||"Okay",cancelText:c||"Cancel",onConfirm:i||u,onCancel:a||u},s))})}static showContentErrors({plugins:e=[],themes:t=[]}){if(!e||!t)return;if(!e.length&&!t.length)return;const s=$('
\n
\n \n
'),n=function(e){const t=$('
');for(const s of e){const e=$(`
\n
${s.name?s.name:s.file}
\n
${s.message}
\n \n
`);t.append(e),s.error&&e.find("a").on("click",e=>{e.preventDefault(),m.err("ContentManager",`Error details for ${s.name?s.name:s.file}.`,s.error)})}return t},o=[n(e),n(t)];s.find(".tab-bar-item").on("click",e=>{e.preventDefault(),s.find(".tab-bar-item").removeClass("selected"),$(e.target).addClass("selected"),s.find(".scroller").empty().append(o[$(e.target).index()])}),s.find(".footer button").on("click",()=>{s.addClass("closing"),setTimeout(()=>{s.remove()},300)}),s.find(".bd-backdrop").on("click",()=>{s.addClass("closing"),setTimeout(()=>{s.remove()},300)}),s.appendTo("#app-mount"),e.length?s.find(".tab-bar-item")[0].click():s.find(".tab-bar-item")[1].click()}}const Me={get React(){return g.React},get ReactDOM(){return g.ReactDOM},get WindowConfigFile(){if(this._windowConfigFile)return this._windowConfigFile;const e=s(1).remote.app,t=s(2),n=e.getAppPath(),o=e.getPath("userData"),r=t.resolve(o,e.getVersion(),"modules","discord_desktop_core","injector","config.json"),i=t.resolve(n,"..","app","config.json"),a=s(0),l=a.existsSync(i)?i:a.existsSync(r)?r:null;return this._windowConfigFile=l||null},getAllWindowPreferences:function(){return this.WindowConfigFile?require(this.WindowConfigFile):{}},getWindowPreference:function(e){if(this.WindowConfigFile)return this.getAllWindowPreferences()[e]},setWindowPreference:function(e,t){if(!this.WindowConfigFile)return;const n=s(0),o=this.getAllWindowPreferences();o[e]=t,delete s.c[this.WindowConfigFile],n.writeFileSync(this.WindowConfigFile,JSON.stringify(o,null,4))},injectCSS:function(e,t){$("head").append($("