BetterDiscordApp-rauenzi/js/main.min.js

1 line
124 KiB
JavaScript

var Core=function(e){var t={};function s(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,s),i.l=!0,i.exports}return s.m=e,s.c=t,s.d=function(e,t,n){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(s.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)s.d(n,i,function(t){return e[t]}.bind(null,i));return n},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="",s(s.s=6)}([function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("electron")},function(e,t){e.exports=require("path")},function(e,t){e.exports=require("module")},function(e,t){e.exports=require("events")},function(e,t){e.exports=require("request")},function(e,t,s){"use strict";s.r(t);var n={};s.r(n),s.d(n,"VoiceMode",function(){return Se}),s.d(n,"ClassNormalizer",function(){return Pe}),s.d(n,"DeveloperMode",function(){return ke}),s.d(n,"PublicServers",function(){return Ae}),s.d(n,"DarkMode",function(){return Oe}),s.d(n,"MinimalMode",function(){return $e}),s.d(n,"TwentyFourHour",function(){return Re}),s.d(n,"ColoredText",function(){return Ie}),s.d(n,"VoiceDisconnect",function(){return _e}),s.d(n,"EmoteMenu",function(){return Ke}),s.d(n,"EmoteAutocaps",function(){return Xe}),s.d(n,"EmoteModule",function(){return Ze}),s.d(n,"WindowPrefs",function(){return tt}),s.d(n,"CustomCSS",function(){return kt});var i={local:!1,localServer:"//localhost:8080",minified:!0,version:"0.3.0",branch:"master",repo:"rauenzi",minSupportedVersion:"0.3.0",bbdVersion:"0.2.17"},o={TwitchGlobal:{url:"https://twitchemotes.com/api_cache/v3/global.json",backup:"https://rauenzi.github.io/BetterDiscordApp/data/emotedata_twitch_global.json",variable:"TwitchGlobal",getEmoteURL:e=>`https://static-cdn.jtvnw.net/emoticons/v1/${e.id}/1.0`,getOldData:(e,t)=>({id:e.match(/\/([0-9]+)\//)[1],code:t,emoticon_set:0,description:null})},TwitchSubscriber:{url:"https://rauenzi.github.io/BetterDiscordApp/data/emotedata_twitch_subscriber.json",variable:"TwitchSubscriber",getEmoteURL:e=>`https://static-cdn.jtvnw.net/emoticons/v1/${e}/1.0`,getOldData:e=>e.match(/\/([0-9]+)\//)[1]},FrankerFaceZ:{url:"https://rauenzi.github.io/BetterDiscordApp/data/emotedata_ffz.json",variable:"FrankerFaceZ",getEmoteURL:e=>`https://cdn.frankerfacez.com/emoticon/${e}/1`,getOldData:e=>e.match(/\/([0-9]+)\//)[1]},BTTV:{url:"https://api.betterttv.net/emotes",variable:"BTTV",parser:e=>{const t={};for(let s=0,n=e.emotes.length;s<n;s++){const n=e.emotes[s];t[n.regex]=n.url}return t},getEmoteURL:e=>`${e}`,getOldData:e=>e},BTTV2:{url:"https://rauenzi.github.io/BetterDiscordApp/data/emotedata_bttv.json",variable:"BTTV2",oldVariable:"emotesBTTV2",getEmoteURL:e=>`https://cdn.betterttv.net/emote/${e}/1x`,getOldData:e=>e.match(/emote\/(.+)\//)[1]}},r=[{type:"category",id:"general",name:"General",collapsible:!0,settings:[{type:"switch",id:"download",name:"Download Emotes",note:"Download emotes once a week to stay up to date",value:!0},{type:"switch",id:"emoteMenu",name:"Emote Menu",note:"Show Twitch/Favourite emotes in emote menu",value:!0},{type:"switch",id:"hideEmojiMenu",name:"Hide Emoji Menu",note:"Hides Discord's emoji menu when using emote menu",value:!1,enableWith:"emoteMenu"},{type:"switch",id:"autoCaps",name:"Emote Autocapitalization",note:"Autocapitalize emote commands",value:!1},{type:"switch",id:"showNames",name:"Show Names",note:"Show emote names on hover",value:!0},{type:"switch",id:"modifiers",name:"Show Emote Modifiers",note:"Enable emote mods (flip, spin, pulse, spin2, spin3, 1spin, 2spin, 3spin, tr, bl, br, shake, shake2, shake3, flap)",value:!0},{type:"switch",id:"animateOnHover",name:"Animate On Hover",note:"Only animate the emote modifiers on hover",value:!1}]},{type:"category",id:"categories",name:"Categories",collapsible:!0,settings:[{type:"switch",id:"twitch",name:"Twitch",note:"Show Twitch global & subscriber emotes",value:!0},{type:"switch",id:"ffz",name:"FrankerFaceZ",note:"Show emotes from FFZ",value:!0},{type:"switch",id:"bttv",name:"BetterTTV",note:"Show emotes from BTTV",value:!0}]}],a=[{type:"category",id:"general",name:"General",collapsible:!0,settings:[{type:"switch",id:"emotes",name:"Emote System",note:"Enables BD's emote system",value:!0},{type:"switch",id:"publicServers",name:"Public Servers",note:"Display public servers button",value:!0},{type:"switch",id:"voiceDisconnect",name:"Voice Disconnect",note:"Disconnect from voice server when closing Discord",value:!1},{type:"switch",id:"twentyFourHour",name:"24 Hour Timestamps",note:"Hides channels when in minimal mode",value:!1},{type:"switch",id:"classNormalizer",name:"Normalize Classes",note:"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)",value:!0},{type:"switch",id:"showToasts",name:"Show Toasts",note:"Shows a small notification for important information",value:!0}]},{type:"category",id:"appearance",name:"Appearance",collapsible:!0,settings:[{type:"switch",id:"voiceMode",name:"Voice Mode",note:"Hides everything that isn't voice chat",value:!1},{type:"switch",id:"minimalMode",name:"Minimal Mode",note:"Hide elements and reduce the size of elements",value:!1},{type:"switch",id:"hideChannels",name:"Hide Channels",note:"Hides channels when in minimal mode",value:!1,enableWith:"minimalMode"},{type:"switch",id:"darkMode",name:"Dark Mode",note:"Make certain elements dark by default",value:!0},{type:"switch",id:"coloredText",name:"Colored Text",note:"Make text colour the same as role color",value:!1}]},{type:"category",id:"content",name:"Content Manager",collapsible:!0,settings:[{type:"switch",id:"contentErrors",name:"Show Content Errors",note:"Shows a modal with plugin/theme errors",value:!0},{type:"switch",id:"autoScroll",name:"Scroll To Settings",note:"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)",value:!0},{type:"switch",id:"autoReload",name:"Automatic Loading",note:"Automatically loads, reloads, and unloads plugins and themes",value:!0}]},{type:"category",id:"developer",name:"Developer Settings",collapsible:!0,shown:!1,settings:[{type:"switch",id:"developerMode",name:"Developer Mode",note:"Allows activating debugger when pressing F8",value:!1},{type:"switch",id:"copySelector",name:"Copy Selector",note:'Adds a "Copy Selector" option to context menus when developer mode is active',value:!1,enableWith:"developerMode"}]},{type:"category",id:"window",name:"Window Preferences",collapsible:!0,shown:!1,settings:[{type:"switch",id:"transparency",name:"Enable Transparency",note:"Enables the main window to be see-through (requires restart)",value:!1},{type:"switch",id:"frame",name:"Window Frame",note:"Adds the native os window frame to the main window",value:!1,hidden:!0}]},{type:"category",id:"customcss",name:"Custom CSS",collapsible:!0,shown:!1,settings:[{type:"switch",id:"customcss",name:"Custom CSS",note:"Enables the Custom CSS tab",value:!0},{type:"switch",id:"liveUpdate",name:"Live Update",note:"Updates the css as you type",value:!1},{type:"switch",id:"startDetached",name:"Start Detached",note:"Clicking the Custom CSS tab opens the editor in a separate window",value:!1,disableWith:"nativeOpen"},{type:"switch",id:"nativeOpen",name:"Open in Native Editor",note:"Clicking the Custom CSS tab opens your custom css in your native editor",value:!1,disableWith:"startDetached"}]}];class l{static byProperties(e,t=(e=>e)){return s=>{const n=t(s);return!!n&&e.every(e=>void 0!==n[e])}}static byPrototypeFields(e,t=(e=>e)){return s=>{const n=t(s);return!!n&&(!!n.prototype&&e.every(e=>void 0!==n.prototype[e]))}}static byCode(e,t=(e=>e)){return s=>{const n=t(s);return!!n&&-1!==n.toString([]).search(e)}}static byString(...e){return t=>{const s=t.toString([]);for(const t of e)if(!s.includes(t))return!1;return!0}}static byDisplayName(e){return t=>t&&t.displayName===e}static combine(...e){return t=>e.every(e=>e(t))}}class c{static find(e,t=!0){return this.getModule(e,t)}static findAll(e){return this.getModule(e,!1)}static findByUniqueProperties(e,t=!0){return t?this.getByProps(...e):this.getAllByProps(...e)}static findByDisplayName(e){return this.getByDisplayName(e)}static getModule(e,t=!0){const s=this.getAllModules(),n=[];for(const i in s){if(!s.hasOwnProperty(i))continue;const o=s[i],{exports:r}=o;let a=null;if(r&&(r.__esModule&&r.default&&e(r.default)&&(a=r.default),e(r)&&(a=r),a)){if(t)return a;n.push(a)}}return t||0==n.length?void 0:n}static getModules(e){return this.getModule(e,!1)}static getByDisplayName(e){return this.getModule(l.byDisplayName(e),!0)}static getByRegex(e,t=!0){return this.getModule(l.byCode(e),t)}static getByPrototypes(...e){return this.getModule(l.byPrototypeFields(e),!0)}static getAllByPrototypes(...e){return this.getModule(l.byPrototypeFields(e),!1)}static getByProps(...e){return this.getModule(l.byProperties(e),!0)}static getAllByProps(...e){return this.getModule(l.byProperties(e),!1)}static getByString(...e){return this.getModule(l.byString(...e),!0)}static getAllByString(...e){return this.getModule(l.byString(...e),!1)}static get require(){if(this._require)return this._require;const e="bbd-webpackmodules",t="function"==typeof window.webpackJsonp?window.webpackJsonp([],{[e]:(e,t,s)=>t.default=s},[e]).default:window.webpackJsonp.push([[],{[e]:(e,t,s)=>e.exports=s},[[e]]]);return delete t.m[e],delete t.c[e],this._require=t}static getAllModules(){return this.require.c}}const d={err:"error",error:"error",dbg:"debug",debug:"debug",log:"log",warn:"warn",info:"info"};class h{static stacktrace(e,t,s){console.error(`%c[${e}]%c ${t}\n\n%c`,"color: #3a71c1; font-weight: 700;","color: red; font-weight: 700;","color: red;",s)}static err(e,...t){h._log(e,t,"error")}static warn(e,...t){h._log(e,t,"warn")}static info(e,...t){h._log(e,t,"info")}static debug(e,...t){h._log(e,t,"debug")}static log(e,...t){h._log(e,t)}static _log(e,t,s="log"){s=h.parseType(s),Array.isArray(t)||(t=[t]),console[s](`%c[BandagedBD]%c [${e}]%c`,"color: #3E82E5; font-weight: 700;","color: #3a71c1;","",...t)}static parseType(e){return d.hasOwnProperty(e)?d[e]:"log"}}class u{static parseHTML(e,t=!1){const s=document.createElement("template");s.innerHTML=e;const n=s.content.cloneNode(!0);return t?n:n.childNodes.length>1?n.childNodes:n.childNodes[0]}static getTextArea(){return $(".channelTextArea-1LDbYG textarea")}static insertText(e,t){e.focus(),e.selectionStart=0,e.selectionEnd=e.value.length,document.execCommand("insertText",!1,t)}static escape(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}static testJSON(e){try{return JSON.parse(e)}catch(e){return!1}}static suppressErrors(e,t){return(...s)=>{try{return e(...s)}catch(e){h.stacktrace("SuppressedError","Error occurred in "+t,e)}}}static monkeyPatch(e,t,s){const{before:n,after:i,instead:o,once:r=!1,silent:a=!1,force:l=!1}=s,c=s.displayName||e.displayName||e.name||e.constructor.displayName||e.constructor.name;if(a||console.log("patch",t,"of",c),!e[t]){if(!l)return console.error(t,"does not exist for",c);e[t]=function(){}}const d=e[t],h=()=>{a||console.log("unpatch",t,"of",c),e[t]=d};return e[t]=function(){const s={thisObject:this,methodArguments:arguments,cancelPatch:h,originalMethod:d,callOriginalMethod:()=>s.returnValue=s.originalMethod.apply(s.thisObject,s.methodArguments)};if(o){const n=u.suppressErrors(o,"`instead` callback of "+e[t].displayName)(s);void 0!==n&&(s.returnValue=n)}else n&&u.suppressErrors(n,"`before` callback of "+e[t].displayName)(s),s.callOriginalMethod(),i&&u.suppressErrors(i,"`after` callback of "+e[t].displayName)(s);return r&&h(),s.returnValue},e[t].__monkeyPatched=!0,e[t].__originalMethod||(e[t].__originalMethod=d),e[t].displayName="patched "+(e[t].displayName||t),h}static onRemoved(e,t){const s=new MutationObserver(n=>{for(let i=0;i<n.length;i++){const o=n[i],r=Array.from(o.removedNodes),a=r.indexOf(e)>-1,l=r.some(t=>t.contains(e));(a||l)&&(s.disconnect(),t())}});s.observe(document.body,{subtree:!0,childList:!0})}static isEmpty(e){if(null==e||null==e||""==e)return!0;if("object"!=typeof e)return!1;if(Array.isArray(e))return 0==e.length;for(const t in e)if(e.hasOwnProperty(t))return!1;return!0}static memoizeObject(e){const t=new Proxy(e,{get:function(e,t){if(e.hasOwnProperty(t)){if(Object.getOwnPropertyDescriptor(e,t).get){const s=e[t];delete e[t],e[t]=s}return e[t]}},set:function(e,t,s){return e.hasOwnProperty(t)?h.error("MemoizedObject","Trying to overwrite existing property"):(e[t]=s,e[t])}});return Object.defineProperty(t,"hasOwnProperty",{value:function(e){return void 0!==this[e]}}),t}static extend(e,...t){for(let s=0;s<t.length;s++)for(const n in t[s])t[s].hasOwnProperty(n)&&("object"==typeof e[n]&&"object"==typeof t[s][n]?this.extend(e[n],t[s][n]):"object"==typeof t[s][n]?(e[n]={},this.extend(e[n],t[s][n])):e[n]=t[s][n]);return e}static formatString(e,t){for(const s in t){let n=t[s];Array.isArray(n)&&(n=JSON.stringify(n)),"object"==typeof n&&null!==n&&(n=n.toString()),e=e.replace(new RegExp(`{{${s}}}`,"g"),n)}return e}static findInTree(e,t,{walkable:s=null,ignore:n=[]}={}){if("string"==typeof t){if(e.hasOwnProperty(t))return e[t]}else if(t(e))return e;if("object"!=typeof e||null==e)return;let i=void 0;if(e instanceof Array){for(const o of e)if(void 0!==(i=this.findInTree(o,t,{walkable:s,ignore:n})))return i}else{const o=null==s?Object.keys(e):s;for(const r of o)if(e.hasOwnProperty(r)&&!n.includes(r)&&void 0!==(i=this.findInTree(e[r],t,{walkable:s,ignore:n})))return i}return i}static getNestedProp(e,t){return t.split(/\s?\.\s?/).reduce(function(e,t){return e&&e[t]},e)}static findInRenderTree(e,t,{walkable:s=["props","children","child","sibling"],ignore:n=[]}={}){return this.findInTree(e,t,{walkable:s,ignore:n})}static findInReactTree(e,t){return this.findInTree(e,t,{walkable:["props","children","return","stateNode"]})}static getReactInstance(e){return e.__reactInternalInstance$?e.__reactInternalInstance$:e[Object.keys(e).find(e=>e.startsWith("__reactInternalInstance"))]||null}static getOwnerInstance(e,{include:t,exclude:s=["Popout","Tooltip","Scroller","BackgroundFlash"],filter:n=(e=>e)}={}){if(void 0===e)return;const i=void 0===t,o=i?s:t;function r(e){const t=function(e){const t=e.type;return t&&(t.displayName||t.name)||null}(e);return null!==t&&!!(o.includes(t)^i)}let a=this.getReactInstance(e);for(a=a&&a.return;null!==a;a=a.return){if(null===a)continue;const e=a.stateNode;if(null!==a&&!(e instanceof HTMLElement)&&r(a)&&n(e))return e}return null}}var p=u.memoizeObject({get React(){return c.getByProps("createElement","cloneElement")},get ReactDOM(){return c.getByProps("render","findDOMNode")},get Flux(){return c.getByProps("connectStores")},get Events(){return c.getByPrototypes("setMaxListeners","emit")},get GuildStore(){return c.getByProps("getGuild")},get SortedGuildStore(){return c.getByProps("getSortedGuilds")},get SelectedGuildStore(){return c.getByProps("getLastSelectedGuildId")},get GuildSync(){return c.getByProps("getSyncedGuilds")},get GuildInfo(){return c.getByProps("getAcronym")},get GuildChannelsStore(){return c.getByProps("getChannels","getDefaultChannel")},get GuildMemberStore(){return c.getByProps("getMember")},get MemberCountStore(){return c.getByProps("getMemberCounts")},get GuildEmojiStore(){return c.getByProps("getEmojis")},get GuildActions(){return c.getByProps("markGuildAsRead")},get GuildPermissions(){return c.getByProps("getGuildPermissions")},get ChannelStore(){return c.getByProps("getChannels","getDMFromUserId")},get SelectedChannelStore(){return c.getByProps("getLastSelectedChannelId")},get ChannelActions(){return c.getByProps("selectChannel")},get PrivateChannelActions(){return c.getByProps("openPrivateChannel")},get ChannelSelector(){return c.getByProps("selectGuild","selectChannel")},get UserInfoStore(){return c.getByProps("getToken")},get UserSettingsStore(){return c.getByProps("guildPositions")},get AccountManager(){return c.getByProps("register","login")},get UserSettingsUpdater(){return c.getByProps("updateRemoteSettings")},get OnlineWatcher(){return c.getByProps("isOnline")},get CurrentUserIdle(){return c.getByProps("getIdleTime")},get RelationshipStore(){return c.getByProps("isBlocked","getFriendIDs")},get RelationshipManager(){return c.getByProps("addRelationship")},get MentionStore(){return c.getByProps("getMentions")},get UserStore(){return c.getByProps("getCurrentUser")},get UserStatusStore(){return c.getByProps("getStatus","getState")},get UserTypingStore(){return c.getByProps("isTyping")},get UserActivityStore(){return c.getByProps("getActivity")},get UserNameResolver(){return c.getByProps("getName")},get UserNoteStore(){return c.getByProps("getNote")},get UserNoteActions(){return c.getByProps("updateNote")},get EmojiInfo(){return c.getByProps("isEmojiDisabled")},get EmojiUtils(){return c.getByProps("getGuildEmoji")},get EmojiStore(){return c.getByProps("getByCategory","EMOJI_NAME_RE")},get InviteStore(){return c.getByProps("getInvites")},get InviteResolver(){return c.getByProps("findInvite")},get InviteActions(){return c.getByProps("acceptInvite")},get DiscordConstants(){return c.getByProps("Permissions","ActivityTypes","StatusTypes")},get DiscordPermissions(){return c.getByProps("Permissions","ActivityTypes","StatusTypes").Permissions},get PermissionUtils(){return c.getByProps("getHighestRole")},get ColorConverter(){return c.getByProps("hex2int")},get ColorShader(){return c.getByProps("darken")},get TinyColor(){return c.getByPrototypes("toRgb")},get ClassResolver(){return c.getByProps("getClass")},get ButtonData(){return c.getByProps("ButtonSizes")},get IconNames(){return c.getByProps("IconNames")},get NavigationUtils(){return c.getByProps("transitionTo","replaceWith","getHistory")},get MessageStore(){return c.getByProps("getMessages")},get MessageActions(){return c.getByProps("jumpToMessage","_sendMessage")},get MessageQueue(){return c.getByProps("enqueue")},get MessageParser(){return c.getByProps("createMessage","parse","unparse")},get hljs(){return c.getByProps("highlight","highlightBlock")},get SimpleMarkdown(){return c.getByProps("parseBlock","parseInline","defaultOutput")},get ExperimentStore(){return c.getByProps("getExperimentOverrides")},get ExperimentsManager(){return c.getByProps("isDeveloper")},get CurrentExperiment(){return c.getByProps("getExperimentId")},get ImageResolver(){return c.getByProps("getUserAvatarURL","getGuildIconURL")},get ImageUtils(){return c.getByProps("getSizedImageSrc")},get AvatarDefaults(){return c.getByProps("getUserAvatarURL","DEFAULT_AVATARS")},get WindowInfo(){return c.getByProps("isFocused","windowSize")},get TagInfo(){return c.getByProps("VALID_TAG_NAMES")},get DOMInfo(){return c.getByProps("canUseDOM")},get LocaleManager(){return c.getByProps("setLocale")},get Moment(){return c.getByProps("parseZone")},get LocationManager(){return c.getByProps("createLocation")},get Timestamps(){return c.getByProps("fromTimestamp")},get TimeFormatter(){return c.getByProps("dateFormat")},get Strings(){return c.getByProps("Messages").Messages},get StringFormats(){return c.getByProps("a","z")},get StringUtils(){return c.getByProps("toASCII")},get URLParser(){return c.getByProps("Url","parse")},get ExtraURLs(){return c.getByProps("getArticleURL")},get DNDActions(){return c.getByProps("beginDrag")},get DNDSources(){return c.getByProps("addTarget")},get DNDObjects(){return c.getByProps("DragSource")},get MediaDeviceInfo(){return c.getByProps("Codecs","SUPPORTED_BROWSERS")},get MediaInfo(){return c.getByProps("getOutputVolume")},get MediaEngineInfo(){return c.getByProps("MediaEngineFeatures")},get VoiceInfo(){return c.getByProps("EchoCancellation")},get VideoStream(){return c.getByProps("getVideoStream")},get SoundModule(){return c.getByProps("playSound")},get ElectronModule(){return c.getByProps("setBadge")},get Dispatcher(){return c.getByProps("dirtyDispatch")},get PathUtils(){return c.getByProps("hasBasename")},get NotificationModule(){return c.getByProps("showNotification")},get RouterModule(){return c.getByProps("Router")},get APIModule(){return c.getByProps("getAPIBaseURL")},get AnalyticEvents(){return c.getByProps("AnalyticEventConfigs")},get KeyGenerator(){return c.getByRegex(/"binary"/)},get Buffers(){return c.getByProps("Buffer","kMaxLength")},get DeviceStore(){return c.getByProps("getDevices")},get SoftwareInfo(){return c.getByProps("os")},get CurrentContext(){return c.getByProps("setTagsContext")},get GuildClasses(){const e=c.getByProps("wrapper","unreadMentionsBar"),t=c.getByProps("guildsError","selected"),s=c.getByProps("blobContainer");return Object.assign({},e,t,s)}});class m{static get patches(){return this._patches||(this._patches=[])}static getPatchesByCaller(e){if(!e)return[];const t=[];for(const s of this.patches)for(const n of s.children)n.caller===e&&t.push(n);return t}static unpatchAll(e){"string"==typeof e&&(e=this.getPatchesByCaller(e));for(const t of e)t.unpatch()}static resolveModule(e){return e instanceof Function||e instanceof Object&&!(e instanceof Array)?e:"string"==typeof e?p[e]:e instanceof Array?c.findByUniqueProperties(e):null}static makeOverride(e){return function(){let t=void 0;if(!e.children||!e.children.length)return e.originalFunction.apply(this,arguments);for(const t of e.children.filter(e=>"before"===e.type))try{t.callback(this,arguments)}catch(s){h.err("Patcher",`Could not fire before callback of ${e.functionName} for ${t.caller}`,s)}const s=e.children.filter(e=>"instead"===e.type);if(s.length)for(const n of s)try{const s=n.callback(this,arguments,e.originalFunction.bind(this));void 0!==s&&(t=s)}catch(t){h.err("Patcher",`Could not fire instead callback of ${e.functionName} for ${n.caller}`,t)}else t=e.originalFunction.apply(this,arguments);for(const s of e.children.filter(e=>"after"===e.type))try{const n=s.callback(this,arguments,t);void 0!==n&&(t=n)}catch(t){h.err("Patcher",`Could not fire after callback of ${e.functionName} for ${s.caller}`,t)}return t}}static rePatch(e){e.proxyFunction=e.module[e.functionName]=this.makeOverride(e)}static makePatch(e,t,s){const n={name:s,module:e,functionName:t,originalFunction:e[t],proxyFunction:null,revert:()=>{n.module[n.functionName]=n.originalFunction,n.proxyFunction=null,n.children=[]},counter:0,children:[]};return n.proxyFunction=e[t]=this.makeOverride(n),this.patches.push(n),n}static before(e,t,s,n,i={}){return this.pushChildPatch(e,t,s,n,Object.assign(i,{type:"before"}))}static after(e,t,s,n,i={}){return this.pushChildPatch(e,t,s,n,Object.assign(i,{type:"after"}))}static instead(e,t,s,n,i={}){return this.pushChildPatch(e,t,s,n,Object.assign(i,{type:"instead"}))}static pushChildPatch(e,t,s,n,i={}){const{type:o="after",forcePatch:r=!0}=i,a=this.resolveModule(t);if(!a)return null;if(!a[s]&&r&&(a[s]=function(){}),!(a[s]instanceof Function))return null;"string"==typeof t&&(i.displayName=t);const l=`${i.displayName||a.displayName||a.name||a.constructor.displayName||a.constructor.name}.${s}`,c=this.patches.find(e=>e.module==a&&e.functionName==s)||this.makePatch(a,s,l);c.proxyFunction||this.rePatch(c);const d={caller:e,type:o,id:c.counter,callback:n,unpatch:()=>{if(c.children.splice(c.children.findIndex(e=>e.id===d.id&&e.type===o),1),c.children.length<=0){const e=this.patches.findIndex(e=>e.module==a&&e.functionName==s);this.patches[e].revert(),this.patches.splice(e,1)}}};return c.children.push(d),c.counter++,d.unpatch}}const g=s(0),f=s(2),b=DiscordNative.globals.releaseChannel;var y=new class{constructor(){this.data={misc:{}},this.pluginData={}}initialize(){g.existsSync(this.baseFolder)||g.mkdirSync(this.baseFolder),g.existsSync(this.dataFolder)||g.mkdirSync(this.dataFolder),g.existsSync(this.BDFile)||g.writeFileSync(this.BDFile,JSON.stringify(this.data.misc,null,4)),g.existsSync(this.customCSS)||g.writeFileSync(this.customCSS,"");const e=g.readdirSync(this.dataFolder).filter(e=>!g.statSync(f.resolve(this.dataFolder,e)).isDirectory()&&e.endsWith(".json"));for(const t of e)this.data[t.split(".")[0]]=require(f.resolve(this.dataFolder,t))}get customCSS(){return this._customCSS||(this._customCSS=f.resolve(this.dataFolder,"custom.css"))}get baseFolder(){return this._baseFolder||(this._baseFolder=f.resolve(i.dataPath,"data"))}get dataFolder(){return this._dataFolder||(this._dataFolder=f.resolve(this.baseFolder,`${b}`))}get BDFile(){return this._BDFile||(this._BDFile=f.resolve(i.dataPath,"data",`${b}.json`))}getPluginFile(e){return f.resolve(i.dataPath,"plugins",e+".config.json")}_getFile(e){return"settings"==e||"plugins"==e||"themes"==e?f.resolve(this.dataFolder,`${e}.json`):f.resolve(this.dataFolder,"misc.json")}getBDData(e){return this.data.misc[e]||""}setBDData(e,t){this.data.misc[e]=t,g.writeFileSync(f.resolve(this.dataFolder,"misc.json"),JSON.stringify(this.data.misc,null,4))}getData(e){return this.data[e]||""}setData(e,t){this.data[e]=t,g.writeFileSync(f.resolve(this.dataFolder,`${e}.json`),JSON.stringify(t,null,4))}loadCustomCSS(){return g.readFileSync(this.customCSS).toString()}saveCustomCSS(e){return g.writeFileSync(this.customCSS,e)}getPluginData(e,t){return void 0!==this.pluginData[e]?this.pluginData[e][t]||void 0:g.existsSync(this.getPluginFile(e))?(this.pluginData[e]=JSON.parse(g.readFileSync(this.getPluginFile(e))),this.pluginData[e][t]||void 0):void 0}setPluginData(e,t,s){void 0!==s&&(void 0===this.pluginData[e]&&(this.pluginData[e]={}),this.pluginData[e][t]=s,g.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4)))}deletePluginData(e,t){void 0===this.pluginData[e]&&(this.pluginData[e]={}),delete this.pluginData[e][t],g.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4))}};const v=s(4);var w=new class extends v{constructor(){super(),this.setMaxListeners(20)}dispatch(e,...t){this.emit(e,...t)}},C=new class{constructor(){this.state={},this.collections=[],this.panels=[],this.registerCollection("settings","Settings",a)}initialize(){this.loadSettings()}registerCollection(e,t,s,n=null){if(this.collections.find(t=>t.id==e))return h.error("Settings","Already have a collection with id "+e);this.collections.push({type:"collection",id:e,name:t,settings:s,button:n}),this.setup()}removeCollection(e){const t=this.collections.findIndex(t=>t.id==e);if(!t<0)return h.error("Settings","No collection with id "+e);this.collections.splice(t,1)}registerPanel(e,t,s){if(this.panels.find(t=>t.id==e))return h.error("Settings","Already have a panel with id "+e);const{element:n,onClick:i,order:o=1}=s,r={id:e,order:o,label:t,section:t};i&&(r.clickListener=i),n&&(r.element=n instanceof p.React.Component?()=>p.React.createElement(n,{}):"function"==typeof n?n:()=>n),this.panels.push(r)}removePanel(e){const t=this.panels.findIndex(t=>t.id==e);if(!t<0)return h.error("Settings","No collection with id "+e);this.panels.splice(t,1)}getPath(e,t="",s=""){return{collection:3==e.length?e[0]:t,category:3==e.length?e[1]:2==e.length?e[0]:s,setting:e[e.length-1]}}setup(){for(let e=0;e<this.collections.length;e++){const t=this.collections[e],s=this.collections[e].settings;this.state[t.id]||(this.state[t.id]={});for(let e=0;e<s.length;e++){const n=s[e];if("category"!=n.type)this.state[t.id].hasOwnProperty(n.id)||(this.state[t.id][n.id]=n.value);else{this.state[t.id].hasOwnProperty(n.id)||(this.state[t.id][n.id]={});for(let e=0;e<n.settings.length;e++){const s=n.settings[e];if(this.state[t.id][n.id].hasOwnProperty(s.id)||(this.state[t.id][n.id][s.id]=s.value),s.enableWith){const e=this.getPath(s.enableWith.split("."),t.id,n.id);if(s.hasOwnProperty("disabled"))continue;Object.defineProperty(s,"disabled",{get:()=>!this.state[e.collection][e.category][e.setting]})}if(s.disableWith){const e=this.getPath(s.disableWith.split("."),t.id,n.id);if(s.hasOwnProperty("disabled"))continue;Object.defineProperty(s,"disabled",{get:()=>this.state[e.collection][e.category][e.setting]})}}}}}}saveSettings(){y.setData("settings",this.state)}loadSettings(){const e=y.getData("settings");if(!e)return this.saveSettings();for(const t in this.state){e[t]||Object.assign(e,{[t]:this.state[t]});for(const s in this.state[t]){e[t][s]||Object.assign(e[t],{[s]:this.state[t][s]});for(const n in this.state[t][s])null!=e[t][s][n]&&(this.state[t][s][n]=e[t][s][n])}}this.saveSettings()}onSettingChange(e,t,s,n){const i=this.collections.length+this.panels.length;this.state[e][t][s]=n,w.dispatch("setting-updated",e,t,s,n);const o=this.collections.length+this.panels.length;this.saveSettings(),i!=o&&setTimeout(this.forceUpdate.bind(this),50)}getSetting(e,t,s){return 2==arguments.length?this.collections[0].find(e=>e.id==arguments[0]).settings.find(e=>e.id==arguments[1]):this.collections.find(t=>t.id==e).find(e=>e.id==t).settings.find(e=>e.id==s)}get(e,t,s){return 2==arguments.length&&(s=t,t=e,e="settings"),!(!this.state[e]||!this.state[e][t])&&this.state[e][t][s]}set(e,t,s,n){return 3==arguments.length&&(n=s,s=t,t=e,e="settings"),this.onSettingChange(e,t,s,n)}on(e,t,s,n){const i=(i,o,r,a)=>{i===e&&o===t&&r===s&&n(a)};return w.on("setting-updated",i),()=>{w.off("setting-updated",i)}}};class S{static get bdHead(){return this.getElement("bd-head")}static get bdBody(){return this.getElement("bd-body")}static get bdScripts(){return this.getElement("bd-scripts")}static get bdStyles(){return this.getElement("bd-styles")}static get bdThemes(){return this.getElement("bd-themes")}static get bdCustomCSS(){return this.getElement("#customcss")}static initialize(){this.createElement("bd-head",{target:document.head}),this.createElement("bd-body",{target:document.body}),this.createElement("bd-scripts",{target:this.bdHead}),this.createElement("bd-styles",{target:this.bdHead}),this.createElement("bd-themes",{target:this.bdHead}),this.createElement("style",{id:"customcss",target:this.bdHead})}static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static getElement(e,t=document){return e instanceof Node?e:t.querySelector(e)}static createElement(e,t={}){const{className:s,id:n,target:i}=t,o=document.createElement(e);return s&&(o.className=s),n&&(o.id=n),i&&this.getElement(i).append(o),o}static removeStyle(e){e=this.escapeID(e);const t=this.getElement(`#${e}`,this.bdStyles);t&&t.remove()}static injectStyle(e,t){e=this.escapeID(e);const s=this.getElement(`#${e}`,this.bdStyles)||this.createElement("style",{id:e});s.textContent=t,this.bdStyles.append(s)}static removeTheme(e){e=this.escapeID(e);const t=this.getElement(`#${e}`,this.bdThemes);t&&t.remove()}static injectTheme(e,t){e=this.escapeID(e);const s=this.getElement(`#${e}`,this.bdThemes)||this.createElement("style",{id:e});s.textContent=t,this.bdThemes.append(s)}static updateCustomCSS(e){this.bdCustomCSS.textContent=e}static removeScript(e){e=this.escapeID(e);const t=this.getElement(`#${e}`,this.bdScripts);t&&t.remove()}static injectScript(e,t){return e=this.escapeID(e),new Promise(s=>{const n=this.getElement(`#${e}`,this.bdScripts)||this.createElement("script",{id:e});n.src=t,n.onload=s,this.bdScripts.append(n)})}}const E=p.React,P={},k=new Set,x=new Set;var D=new class{get named(){return P}get unknown(){return k}get listeners(){return x}initialize(){this.walkReactTree(document.querySelector("#app-mount")._reactRootContainer._internalRoot.current),m.after("ReactComponents",E,"createElement",(e,t,s)=>{this.walkRenderTree(s)}),m.instead("ReactComponents",E.Component.prototype,"componentWillMount",e=>{this.addComponent(e.constructor)}),m.instead("ReactComponents",E.Component.prototype,"UNSAFE_componentWillMount",e=>{this.addComponent(e.constructor)})}get(e,t){return new Promise(s=>{if(P[e])return s(P[e]);if(x.add({name:e,filter:t,resolve:s}),t)for(const s of k)t(s)&&(s.displayName=e,k.delete(s),this.addNamedComponent(s))})}addNamedComponent(e){const t=e.displayName;if(!P[t]){P[t]=e;for(const s of x)s.name===t&&(s.resolve(e),x.delete(s))}}addUnknownComponent(e){if(!k.has(e)){for(const t of x)t.filter&&t.filter(e)&&(e.displayName=t.name,this.addNamedComponent(e));e.displayName||k.add(e)}}addComponent(e){return e.displayName?this.addNamedComponent(e):this.addUnknownComponent(e)}walkRenderTree(e){if(e){if("function"==typeof e.type&&this.addComponent(e.type),Array.isArray(e))for(const t of e)this.walkRenderTree(t);e.props&&e.props.children&&this.walkRenderTree(e.props.children)}}walkReactTree(e){e&&("function"==typeof e.type&&this.addComponent(e.type),e.child&&this.walkReactTree(e.child),e.sibling&&this.walkReactTree(e.sibling))}};const M=p.React;p.ReactDOM;class T extends M.Component{render(){return M.createElement("svg",{className:"bd-logo "+this.props.className,height:"100%",width:this.props.size||"16px",viewBox:"0 0 2000 2000",style:{fillRule:"evenodd",clipRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}},M.createElement("metadata",null),M.createElement("defs",null,M.createElement("filter",{id:"shadow1"},M.createElement("feDropShadow",{dx:"20",dy:"0",stdDeviation:"20",floodColor:"rgba(0,0,0,0.35)"})),M.createElement("filter",{id:"shadow2"},M.createElement("feDropShadow",{dx:"15",dy:"0",stdDeviation:"20",floodColor:"rgba(255,255,255,0.15)"})),M.createElement("filter",{id:"shadow3"},M.createElement("feDropShadow",{dx:"10",dy:"0",stdDeviation:"20",floodColor:"rgba(0,0,0,0.35)"}))),M.createElement("g",null,M.createElement("path",{style:{filter:"url(#shadow3)"},fill:"#171717",opacity:"1",d:"M1195.44+135.442L1195.44+135.442L997.6+136.442C1024.2+149.742+1170.34+163.542+1193.64+179.742C1264.34+228.842+1319.74+291.242+1358.24+365.042C1398.14+441.642+1419.74+530.642+1422.54+629.642L1422.54+630.842L1422.54+632.042C1422.54+773.142+1422.54+1228.14+1422.54+1369.14L1422.54+1370.34L1422.54+1371.54C1419.84+1470.54+1398.24+1559.54+1358.24+1636.14C1319.74+1709.94+1264.44+1772.34+1193.64+1821.44C1171.04+1837.14+1025.7+1850.54+1000+1863.54L1193.54+1864.54C1539.74+1866.44+1864.54+1693.34+1864.54+1296.64L1864.54+716.942C1866.44+312.442+1541.64+135.442+1195.44+135.442Z"}),M.createElement("path",{style:{filter:"url(#shadow2)"},fill:"#3E82E5",opacity:"1",d:"M1695.54+631.442C1685.84+278.042+1409.34+135.442+1052.94+135.442L361.74+136.442L803.74+490.442L1060.74+490.442C1335.24+490.442+1335.24+835.342+1060.74+835.342L1060.74+1164.84C1150.22+1164.84+1210.53+1201.48+1241.68+1250.87C1306.07+1353+1245.76+1509.64+1060.74+1509.64L361.74+1863.54L1052.94+1864.54C1409.24+1864.54+1685.74+1721.94+1695.54+1368.54C1695.54+1205.94+1651.04+1084.44+1572.64+999.942C1651.04+915.542+1695.54+794.042+1695.54+631.442Z"}),M.createElement("path",{style:{filter:"url(#shadow1)"},fill:"#FFFFFF",opacity:"1",d:"M1469.25+631.442C1459.55+278.042+1183.05+135.442+826.65+135.442L135.45+135.442L135.45+1004C135.45+1004+135.427+1255.21+355.626+1255.21C575.825+1255.21+575.848+1004+575.848+1004L577.45+490.442L834.45+490.442C1108.95+490.442+1108.95+835.342+834.45+835.342L664.65+835.342L664.65+1164.84L834.45+1164.84C923.932+1164.84+984.244+1201.48+1015.39+1250.87C1079.78+1353+1019.47+1509.64+834.45+1509.64L135.45+1509.64L135.45+1864.54L826.65+1864.54C1182.95+1864.54+1459.45+1721.94+1469.25+1368.54C1469.25+1205.94+1424.75+1084.44+1346.35+999.942C1424.75+915.542+1469.25+794.042+1469.25+631.442Z"})))}}var N=new class{initialize(){u.suppressErrors(this.patchSocial.bind(this),"BD Social Patch")(),u.suppressErrors(this.patchGuildPills.bind(this),"BD Guild Pills Patch")(),u.suppressErrors(this.patchGuildListItems.bind(this),"BD Guild List Items Patch")(),u.suppressErrors(this.patchGuildSeparator.bind(this),"BD Guild Separator Patch")()}patchSocial(){if(this.socialPatch)return;const e=c.getByDisplayName("TabBar"),t=c.getByDisplayName("Anchor");e&&t&&(this.socialPatch=m.after("ThemeHelper",e.prototype,"render",(e,s,n)=>{const i=n.props.children;if(!i||!i.length)return;if("Separator"!==i[i.length-2].type.displayName)return;if(!i[i.length-1].type.toString().includes("socialLinks"))return;const o=i[i.length-1].type;i[i.length-1].type=function(){const e=o(...arguments);return e.props.children.push(p.React.createElement(t,{className:"bd-social-link",href:"https://github.com/rauenzi/BetterDiscordApp",rel:"author",title:"BandagedBD",target:"_blank"},p.React.createElement(T,{size:"16px",className:"bd-social-logo"}))),e}}))}patchGuildListItems(){if(this.guildListItemsPatch)return;const e=p.GuildClasses.listItem.split(" ")[0],t=p.GuildClasses.blobContainer.split(" ")[0],s=u.getReactInstance(document.querySelector(`.${e} .${t}`).parentElement).return.type;s&&(this.guildListItemsPatch=m.after("ThemeHelper",s.prototype,"render",(e,t,s)=>{const n=e.props;return s.props.className+=" bd-guild",n.unread&&(s.props.className+=" bd-unread"),n.selected&&(s.props.className+=" bd-selected"),n.audio&&(s.props.className+=" bd-audio"),n.video&&(s.props.className+=" bd-video"),n.badge&&(s.props.className+=" bd-badge"),n.animatable&&(s.props.className+=" bd-animatable"),s}))}patchGuildPills(){if(this.guildPillPatch)return;const e=c.getModule(e=>e.default&&!e.default.displayName&&e.default.toString&&e.default.toString().includes("translate3d"));e&&(this.guildPillPatch=m.after("ThemeHelper",e,"default",(e,t,s)=>{const n=t[0];return n.unread&&(s.props.className+=" bd-unread"),n.selected&&(s.props.className+=" bd-selected"),n.hovered&&(s.props.className+=" bd-hovered"),s}))}patchGuildSeparator(){if(this.guildSeparatorPatch)return;const e=c.getByDisplayName("Guilds"),t=c.getByProps("renderListItem");if(!t||!e)return;const s=function(){const e=t.Separator(...arguments);return e.props.className+=" bd-guild-separator",e};this.guildSeparatorPatch=m.after("ThemeHelper",e.prototype,"render",(e,t,n)=>{const i=u.findInReactTree(n,e=>e.type&&!e.type.displayName&&"function"==typeof e.type&&u.isEmpty(e.props));i&&(i.type=s)})}};class B extends Error{constructor(e,t,s,n){super(s),this.name=e,this.file=t,this.error=n}}class j extends Error{constructor(e){super(e),this.name="MetaError"}}const L=c.getByProps("channels").channels.split(" ")[0],F=c.getByProps("membersWrap").membersWrap.split(" ")[0];class A{static get shouldShowToasts(){return C.get("settings","general","showToasts")}static async success(e,t={}){return this.show(e,Object.assign(t,{type:"success"}))}static async info(e,t={}){return this.show(e,Object.assign(t,{type:"info"}))}static async warning(e,t={}){return this.show(e,Object.assign(t,{type:"warning"}))}static async error(e,t={}){return this.show(e,Object.assign(t,{type:"error"}))}static async default(e,t={}){return this.show(e,Object.assign(t,{type:""}))}static show(e,t={}){const{type:s="",icon:n=!0,timeout:i=3e3,forceShow:o=!1}=t;if(!this.shouldShowToasts&&!o)return;this.ensureContainer();const r=document.createElement("div");r.classList.add("bd-toast"),s&&r.classList.add("toast-"+s),s&&n&&r.classList.add("icon"),r.innerText=e,document.querySelector(".bd-toasts").appendChild(r),setTimeout(()=>{r.classList.add("closing"),setTimeout(()=>{r.remove(),document.querySelectorAll(".bd-toasts .bd-toast").length||document.querySelector(".bd-toasts").remove()},300)},i)}static ensureContainer(){if(document.querySelector(".bd-toasts"))return;const e=document.querySelector(`.${L} + div`),t=e.querySelector(`.${F}`),s=e?e.querySelector("form"):null,n=e?e.getBoundingClientRect().left:310,i=t?t.getBoundingClientRect().left:0,o=i?i-e.getBoundingClientRect().left:e.offsetWidth,r=s?s.offsetHeight:80,a=document.createElement("div");a.classList.add("bd-toasts"),a.style.setProperty("left",n+"px"),a.style.setProperty("width",o+"px"),a.style.setProperty("bottom",r+"px"),document.querySelector("#app-mount").appendChild(a)}}const O=s(2),R=s(0),z=s(3).Module;z.globalPaths.push(O.resolve(s(1).remote.app.getAppPath(),"node_modules"));const I=/[^\S\r\n]*?\n[^\S\r\n]*?\*[^\S\r\n]?/,_=/^\\@/,H=function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e};class q{get name(){return""}get moduleExtension(){return""}get extension(){return""}get contentFolder(){return""}get prefix(){return"content"}get collection(){return"settings"}get category(){return"content"}get id(){return"autoReload"}emit(e,...t){return w.emit(`${this.prefix}-${e}`,...t)}constructor(){this.timeCache={},this.contentList=[],this.state={}}initialize(){return this.originalRequire=z._extensions[this.moduleExtension],z._extensions[this.moduleExtension]=this.getContentRequire(),C.on(this.collection,this.category,this.id,e=>{e?this.watchContent():this.unwatchContent()}),this.loadAllContent()}initializeContent(){}getContentModification(e,t){return t}startContent(){}stopContent(){}loadState(){const e=y.getData(`${this.prefix}s`);e&&Object.assign(this.state,e)}saveState(){y.setData(`${this.prefix}s`,this.state)}watchContent(){if(this.watcher)return h.error(this.name,"Already watching content.");h.log(this.name,"Starting to watch content."),this.watcher=R.watch(this.contentFolder,{persistent:!1},async(e,t)=>{if(!e||!t||!t.endsWith(this.extension))return;await new Promise(e=>setTimeout(e,50));try{R.statSync(O.resolve(this.contentFolder,t))}catch(e){if("ENOENT"!==e.code)return;delete this.timeCache[t],this.unloadContent(t,!0)}if(!R.statSync(O.resolve(this.contentFolder,t)).isFile())return;const s=R.statSync(O.resolve(this.contentFolder,t));s&&s.mtime&&s.mtime.getTime()&&"number"==typeof s.mtime.getTime()&&this.timeCache[t]!=s.mtime.getTime()&&(this.timeCache[t]=s.mtime.getTime(),"rename"==e&&this.loadContent(t,!0),"change"==e&&this.reloadContent(t,!0))})}unwatchContent(){if(!this.watcher)return h.error(this.name,"Was not watching content.");this.watcher.close(),delete this.watcher,h.log(this.name,"No longer watching content.")}extractMeta(e){const t=e.split("\n")[0];if(t.includes("//META"))return this.parseOldMeta(e);if(t.includes("/**"))return this.parseNewMeta(e);throw new j("META was not found.")}parseOldMeta(e){const t=e.split("\n")[0],s=t.substring(t.lastIndexOf("//META")+6,t.lastIndexOf("*//")),n=u.testJSON(s);if(!n)throw new j("META could not be parsed.");if(!n.name)throw new j("META missing name data.");return n}parseNewMeta(e){const t=e.split("/**",2)[1].split("*/",1)[0],s={};let n="",i="";for(const e of t.split(I))if(0!==e.length)if("@"===e.charAt(0)&&" "!==e.charAt(1)){s[n]=i;const t=e.indexOf(" ");n=e.substr(1,t-1),i=e.substr(t+1)}else i+=" "+e.replace("\\n","\n").replace(_,"@");return s[n]=i.trim(),delete s[""],s}getContentRequire(){const e=this,t=this.originalRequire;return function(s,n){const i=O.resolve(e.contentFolder,O.basename(n));if(!R.existsSync(i)||n!==R.realpathSync(i))return Reflect.apply(t,this,arguments);let o=R.readFileSync(n,"utf8");o=H(o);const r=e.extractMeta(o);r.id=r.name,r.filename=O.basename(n),o=e.getContentModification(s,o,r),s._compile(o,n)}}loadContent(e,t=!1){if(void 0===e)return;try{require(O.resolve(this.contentFolder,e))}catch(n){return new B(e,e,"Could not be compiled.",{message:n.message,stack:n.stack})}const s=require(O.resolve(this.contentFolder,e));if(this.contentList.find(e=>e.id==s.id))return new B(s.name,e,`There is already a plugin with name ${s.name}`);const n=this.initializeContent(s);return n||(this.contentList.push(s),t&&A.success(`${s.name} v${s.version} was loaded.`),this.emit("loaded",s.id),this.state[s.id]?this.startContent(s):this.state[s.id]=!1)}unloadContent(e,t=!0,s=!1){const n="string"==typeof e?this.contentList.find(t=>t.id==e||t.filename==e):e;return!!n&&(this.state[n.id]&&(s?this.stopContent(n):this.disableContent(n)),delete require.cache[require.resolve(O.resolve(this.contentFolder,n.filename))],this.contentList.splice(this.contentList.indexOf(n),1),this.emit("unloaded",n.id),t&&A.success(`${n.name} was unloaded.`),!0)}reloadContent(e,t=!0){const s="string"==typeof e?this.contentList.find(t=>t.id==e||t.filename==e):e,n=this.unloadContent(s,t,!0);return n?this.loadContent(s.filename,t):n}isLoaded(e){return!!this.contentList.find(t=>t.id==e||t.filename==e)}isEnabled(e){const t=this.contentList.find(t=>t.id==e||t.filename==e);return!!t&&this.state[t.id]}enableContent(e){const t="string"==typeof e?this.contentList.find(t=>t.id==e):e;t&&(this.state[t.id]||(this.state[t.id]=!0,this.startContent(t),this.saveState()))}disableContent(e){const t="string"==typeof e?this.contentList.find(t=>t.id==e):e;t&&this.state[t.id]&&(this.state[t.id]=!1,this.stopContent(t),this.saveState())}toggleContent(e){this.state[e]?this.disableContent(e):this.enableContent(e)}loadNewContent(){const e=R.readdirSync(this.contentFolder),t=this.contentList.filter(t=>!e.includes(t.filename)).map(e=>e.id);return{added:e.filter(e=>!this.contentList.find(t=>t.filename==e)&&e.endsWith(this.extension)&&R.statSync(O.resolve(this.contentFolder,e)).isFile()),removed:t}}updateList(){const e=this.loadNewContent();for(const t of e.added)this.loadContent(t);for(const t of e.removed)this.unloadContent(t)}loadAllContent(){this.loadState();const e=[],t=R.readdirSync(this.contentFolder);for(const s of t){if(!R.statSync(O.resolve(this.contentFolder,s)).isFile()||!s.endsWith(this.extension))continue;const t=this.loadContent(s,!1);t instanceof B&&e.push(t)}return this.saveState(),C.get(this.collection,this.category,this.id)&&this.watchContent(),e}}class U{static get shouldShowContentErrors(){return C.get("settings","content","contentErrors")}static get ModalStack(){return c.getByProps("push","update","pop","popWithKey")}static get AlertModal(){return c.getByPrototypes("handleCancel","handleSubmit","handleMinorConfirm")}static get TextElement(){return c.getByProps("Sizes","Weights")}static get ConfirmationModal(){return c.getModule(e=>e.defaultProps&&e.key&&"confirm-modal"==e.key())}static default(e,t){const s=u.parseHTML(`<div class="bd-modal-wrapper theme-dark">\n <div class="bd-backdrop backdrop-1wrmKB"></div>\n <div class="bd-modal modal-1UGdnR">\n <div class="bd-modal-inner inner-1JeGVc">\n <div class="header header-1R_AjF">\n <div class="title">${e}</div>\n </div>\n <div class="bd-modal-body">\n <div class="scroller-wrap fade">\n <div class="scroller">\n ${t}\n </div>\n </div>\n </div>\n <div class="footer footer-2yfCgX">\n <button type="button">Okay</button>\n </div>\n </div>\n </div>\n </div>`);s.querySelector(".footer button").addEventListener("click",()=>{s.addClass("closing"),setTimeout(()=>{s.remove()},300)}),s.querySelector(".bd-backdrop").addEventListener("click",()=>{s.addClass("closing"),setTimeout(()=>{s.remove()},300)}),document.querySelector("#app-mount").append(s)}static alert(e,t){if(this.ModalStack&&this.AlertModal)return this.default(e,t);this.ModalStack.push(function(s){return M.createElement(this.AlertModal,Object.assign({title:e,body:t},s))})}static showConfirmationModal(e,t,s={}){const n=this.TextElement,i=this.ConfirmationModal,o=this.ModalStack;if(!this.ModalStack||!this.ConfirmationModal||!this.TextElement)return this.alert(e,t);const{onConfirm:r,onCancel:a,confirmText:l,cancelText:c,danger:d=!1}=s;"string"==typeof t?t=n.default({color:n.Colors.PRIMARY,children:[t]}):Array.isArray(t)&&(t=n.default({color:n.Colors.PRIMARY,children:t})),t=[t];const h=()=>{};o.push(function(s){return M.createElement(i,Object.assign({header:e,children:t,red:d,confirmText:l||"Okay",cancelText:c||"Cancel",onConfirm:r||h,onCancel:a||h},s))})}static showContentErrors({plugins:e=[],themes:t=[]}){if(!e||!t||!this.shouldShowContentErrors)return;if(!e.length&&!t.length)return;const s=$('<div class="bd-modal-wrapper theme-dark">\n <div class="bd-backdrop backdrop-1wrmKB"></div>\n <div class="bd-modal bd-content-modal modal-1UGdnR">\n <div class="bd-modal-inner inner-1JeGVc">\n <div class="header header-1R_AjF"><div class="title">Content Errors</div></div>\n <div class="bd-modal-body">\n <div class="tab-bar-container">\n <div class="tab-bar TOP">\n <div class="tab-bar-item">Plugins</div>\n <div class="tab-bar-item">Themes</div>\n </div>\n </div>\n <div class="table-header">\n <div class="table-column column-name">Name</div>\n <div class="table-column column-message">Message</div>\n <div class="table-column column-error">Error</div>\n </div>\n <div class="scroller-wrap fade">\n <div class="scroller">\n\n </div>\n </div>\n </div>\n <div class="footer footer-2yfCgX">\n <button type="button">Okay</button>\n </div>\n </div>\n </div>\n </div>'),n=function(e){const t=$('<div class="errors">');for(const s of e){const e=$(`<div class="error">\n <div class="table-column column-name">${s.name?s.name:s.file}</div>\n <div class="table-column column-message">${s.message}</div>\n <div class="table-column column-error"><a class="error-link" href="">${s.error?s.error.message:""}</a></div>\n </div>`);t.append(e),s.error&&e.find("a").on("click",e=>{e.preventDefault(),h.stacktrace("ContentError",`Error details for ${s.name?s.name:s.file}.`,s.error)})}return t},i=[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(i[$(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 W="bd-settings-title h2-2gWE-o title-3sZWYQ size16-14cGz5 height20-mO2eIN weightSemiBold-NJexzi defaultColor-1_ajX0 defaultMarginh2-2LTaUL marginBottom20-32qID7",V="bd-settings-title bd-settings-group-title h5-18_1nd title-3sZWYQ size12-3R0845 height16-2Lv3qA weightSemiBold-NJexzi da-h5 da-title da-size12 da-height16 da-weightSemiBold marginBottom4-2qk4Hy da-marginBottom4 marginTop8-1DLZ1n da-marginTop8";class G extends M.Component{constructor(e){super(e)}render(){const e=this.props.isGroup?V:W,t=this.props.className?`${e} ${this.props.className}`:e;return M.createElement("h2",{className:t,onClick:()=>{this.props.onClick&&this.props.onClick()}},this.props.text,this.props.button&&M.createElement("button",{className:"bd-button bd-button-title",onClick:this.props.button.onClick},this.props.button.title),this.props.otherChildren)}}class J extends M.Component{render(){return M.createElement("svg",{viewBox:"0 0 12 12",style:{width:"18px",height:"18px"}},M.createElement("g",{className:"background",fill:"none",fillRule:"evenodd"},M.createElement("path",{d:"M0 0h12v12H0"}),M.createElement("path",{className:"fill",fill:"#dcddde",d:"M9.5 3.205L8.795 2.5 6 5.295 3.205 2.5l-.705.705L5.295 6 2.5 8.795l.705.705L6 6.705 8.795 9.5l.705-.705L6.705 6"})))}}class Z extends M.Component{render(){const e=this.props.size||"24px";return M.createElement("svg",{className:this.props.className||"",onClick:this.props.onClick,fill:"#dcddde",viewBox:"0 0 24 24",style:{width:e,height:e}},M.createElement("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"}),M.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}class Y extends M.Component{constructor(e){super(e),this.onChange=this.onChange.bind(this),this.showSettings=this.showSettings.bind(this),this.state={checked:this.props.enabled,settingsOpen:!1},this.hasSettings="function"==typeof this.props.content.plugin.getSettingsPanel,this.settingsPanel="",this.panelRef=M.createRef(),this.reload=this.reload.bind(this)}reload(){this.props.reload&&(this.props.content=this.props.reload(this.props.content.id),this.forceUpdate())}componentDidUpdate(){if(this.state.settingsOpen){this.settingsPanel instanceof Node&&this.panelRef.current.appendChild(this.settingsPanel);const e=(e,t)=>{const s=e.scrollTop,n=s+e.clientHeight,i=t.offsetTop,o=i+t.clientHeight;return i<s||o>n},t=$(this.panelRef.current),s=t.parents(".scroller-2FKFPG");if(!e(s[0],t[0]))return;s.animate({scrollTop:t.offset().top-s.offset().top+s.scrollTop()-30},300)}}getString(e){return"string"==typeof e?e:e.toString()}render(){const{content:e}=this.props,t=this.getString(e.name),s=this.getString(e.author),n=this.getString(e.description),i=this.getString(e.version),o=e.website,r=e.source;if(this.state.settingsOpen){try{this.settingsPanel=e.plugin.getSettingsPanel()}catch(t){h.stacktrace("Plugin Settings","Unable to get settings panel for "+e.name+".",t)}const s={id:`plugin-settings-${t}`,className:"plugin-settings",ref:this.panelRef};return"string"==typeof this.settingsPanel&&(s.dangerouslySetInnerHTML=this.settingsPanel),M.createElement("li",{className:"settings-open ui-switch-item"},M.createElement("div",{style:{float:"right",cursor:"pointer"},onClick:()=>{this.panelRef.current.innerHTML="",this.setState({settingsOpen:!1})}},M.createElement(J,null)),M.createElement("div",s,this.settingsPanel instanceof M.Component?this.settingsPanel:null))}return M.createElement("li",{"data-name":t,"data-version":i,className:"settings-closed ui-switch-item"},M.createElement("div",{className:"bda-header"},M.createElement("span",{className:"bda-header-title"},M.createElement("span",{className:"bda-name"},t)," v",M.createElement("span",{className:"bda-version"},i)," by ",M.createElement("span",{className:"bda-author"},s)),M.createElement("div",{className:"bda-controls"},!C.get("settings","content","autoReload")&&M.createElement(Z,{className:"bd-reload bd-reload-card",onClick:this.reload}),M.createElement("label",{className:"ui-switch-wrapper ui-flex-child",style:{flex:"0 0 auto"}},M.createElement("input",{checked:this.state.checked,onChange:this.onChange,className:"ui-switch-checkbox",type:"checkbox"}),M.createElement("div",{className:this.state.checked?"ui-switch checked":"ui-switch"})))),M.createElement("div",{className:"bda-description-wrap scroller-wrap fade"},M.createElement("div",{className:"bda-description scroller"},n)),(o||r||this.hasSettings)&&M.createElement("div",{className:"bda-footer"},M.createElement("span",{className:"bda-links"},o&&M.createElement("a",{className:"bda-link bda-link-website",href:o,target:"_blank"},"Website"),o&&r&&" | ",r&&M.createElement("a",{className:"bda-link bda-link-source",href:r,target:"_blank"},"Source")),this.hasSettings&&M.createElement("button",{onClick:this.showSettings,className:"bd-button bd-button-plugin-settings",disabled:!this.state.checked},"Settings")))}onChange(){this.setState({checked:!this.state.checked}),this.props.onChange&&this.props.onChange(this.props.content.id)}showSettings(){this.hasSettings&&this.setState({settingsOpen:!0})}}class K extends M.Component{constructor(e){super(e),this.state={checked:this.props.enabled,reloads:0},this.onChange=this.onChange.bind(this),this.reload=this.reload.bind(this)}reload(){this.props.reload&&(this.props.content=this.props.reload(this.props.content.id),this.forceUpdate())}render(){const{content:e}=this.props,t=e.name,s=e.description,n=e.version,i=e.author,o=e.website,r=e.source;return M.createElement("li",{"data-name":t,"data-version":n,className:"settings-closed ui-switch-item"},M.createElement("div",{className:"bda-header"},M.createElement("span",{className:"bda-header-title"},M.createElement("span",{className:"bda-name"},t)," v",M.createElement("span",{className:"bda-version"},n)," by ",M.createElement("span",{className:"bda-author"},i)),M.createElement("div",{className:"bda-controls"},!C.get("settings","content","autoReload")&&M.createElement(Z,{className:"bd-reload bd-reload-card",onClick:this.reload}),M.createElement("label",{className:"ui-switch-wrapper ui-flex-child",style:{flex:"0 0 auto"}},M.createElement("input",{checked:this.state.checked,onChange:this.onChange,className:"ui-switch-checkbox",type:"checkbox"}),M.createElement("div",{className:this.state.checked?"ui-switch checked":"ui-switch"})))),M.createElement("div",{className:"bda-description-wrap scroller-wrap fade"},M.createElement("div",{className:"bda-description scroller"},s)),(o||r)&&M.createElement("div",{className:"bda-footer"},M.createElement("span",{className:"bda-links"},o&&M.createElement("a",{className:"bda-link",href:o,target:"_blank"},"Website"),o&&r&&" | ",r&&M.createElement("a",{className:"bda-link",href:r,target:"_blank"},"Source"))))}onChange(){this.setState({checked:!this.state.checked}),this.props.onChange&&this.props.onChange(this.props.content.id)}}class X extends M.Component{reload(){this.props.refreshList&&this.props.refreshList(),this.forceUpdate()}render(){const{title:e,folder:t,contentList:n,contentState:i,onChange:o,reload:r}=this.props,a=!C.get("settings","content","autoReload"),l=t?{title:`Open ${e} Folder`,onClick:()=>{s(1).shell.openItem(t)}}:null;return[M.createElement(G,{key:"title",text:e,button:l,otherChildren:a&&M.createElement(Z,{className:"bd-reload",onClick:this.reload.bind(this)})}),M.createElement("ul",{key:"ContentList",className:"bda-slist"},n.sort((e,t)=>e.name.toLowerCase().localeCompare(t.name.toLowerCase())).map(e=>{const t=e.type?Y:K;return M.createElement(t,{showReloadIcon:a,key:e.id,enabled:i[e.id],content:e,onChange:o,reload:r})}))]}}class Q extends M.Component{render(){return M.createElement("div",{className:"bd-divider divider-3573oO marginTop8-1DLZ1n marginBottom40-2vIwTv"})}}const ee="flex-1xMQg5 flex-1O1GKY vertical-V37hAW flex-1O1GKY directionColumn-35P_nr justifyStart-2NDFzi alignStretch-DpGPf3 noWrap-3jynv6 switchItem-2hKKKK",te="flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY flex-1O1GKY directionRow-3v3tfG justifyStart-2NDFzi alignStart-H-X2h- noWrap-3jynv6",se="flexChild-faoVW3",ne="titleDefault-a8-ZSr title-31JmR4 da-titleDefault da-title",ie="flexChild-faoVW3 da-flexChild switchDisabled-3HsXAJ switch-3wwwcV da-switchDisabled da-switch valueUnchecked-2lU_20 value-2hFrkk sizeDefault-2YlOZr size-3rFEHg themeDefault-24hCdX",oe="flexChild-faoVW3 da-flexChild switchDisabled-3HsXAJ switch-3wwwcV da-switchDisabled da-switch valueChecked-m-4IJZ value-2hFrkk sizeDefault-2YlOZr size-3rFEHg themeDefault-24hCdX",re="flexChild-faoVW3 da-flexChild switchEnabled-V2WDBB switch-3wwwcV da-switchEnabled da-switch valueUnchecked-2lU_20 value-2hFrkk sizeDefault-2YlOZr size-3rFEHg themeDefault-24hCdX",ae="flexChild-faoVW3 da-flexChild switchEnabled-V2WDBB switch-3wwwcV da-switchEnabled da-switch valueChecked-m-4IJZ value-2hFrkk sizeDefault-2YlOZr size-3rFEHg themeDefault-24hCdX",le="checkboxEnabled-CtinEn checkbox-2tyjJg",ce="checkboxDisabled-1MA81A checkbox-2tyjJg",de="description-3_Ncsb formText-3fs7AJ note-1V3kyJ modeDefault-3a2Ph1 primary-jw0I4K",he="divider-3573oO dividerDefault-3rvLe-";class ue extends M.Component{constructor(e){super(e),this.state={checked:this.props.checked}}onChange(){this.props.disabled||(this.props.onChange(this.props.id,!this.state.checked),this.setState({checked:!this.state.checked}))}render(){const e=this.props.disabled?this.state.checked?oe:ie:this.state.checked?ae:re;return M.createElement("div",{className:ee,style:{flex:"1 1 auto"}},M.createElement("div",{className:te,style:{flex:"1 1 auto"}},M.createElement("div",{className:se,style:{flex:"1 1 auto"}},M.createElement("label",{htmlFor:this.props.id,className:ne},this.props.name||this.props.data.text)),M.createElement("div",{className:e,tabIndex:"0",style:{flex:"0 0 auto"}},M.createElement("input",{id:this.props.id,className:this.props.disabled?ce:le,type:"checkbox",tabIndex:"-1",checked:this.state.checked,onChange:e=>this.onChange(e)}))),M.createElement("div",{className:de,style:{flex:"1 1 auto"}},this.props.note||this.props.data.info),M.createElement("div",{className:he}))}}const pe="bd-settings-group";class me extends M.Component{constructor(e){if(super(e),this.props.button&&this.props.collapsible){const e=this.props.button.onClick;this.props.button.onClick=t=>{t.stopPropagation(),e(...arguments)}}this.props.hasOwnProperty("shown")||(this.props.shown=!0),this.container=M.createRef(),this.state={collapsed:this.props.collapsible&&!this.props.shown},this.onChange=this.onChange.bind(this)}toggleCollapse(){const e=this.container.current,t=this.state.collapsed?300:1;e.style.setProperty("height",e.scrollHeight+"px"),this.setState({collapsed:!this.state.collapsed},()=>setTimeout(()=>e.style.setProperty("height",""),t))}onChange(e,t){this.props.onChange&&(this.props.id?this.props.onChange(this.props.id,e,t):this.props.onChange(e,t),this.forceUpdate())}render(){const{settings:e}=this.props,t=this.props.collapsible?`collapsible ${this.state.collapsed&&"collapsed"}`:"",s=`${pe} ${t}`;return M.createElement("div",{className:s},M.createElement(G,{text:this.props.name,collapsible:this.props.collapsible,onClick:()=>this.toggleCollapse(),button:this.props.button,isGroup:!0}),M.createElement("div",{className:"bd-settings-container",ref:this.container},e.filter(e=>!e.hidden).map(e=>M.createElement(ue,{disabled:e.disabled,id:e.id,key:e.id,name:e.name,note:e.note,checked:e.value,onChange:this.onChange}))),this.props.showDivider&&M.createElement(Q,null))}}var ge=new class{constructor(){this.patchSections()}buildSettingsPanel(e,t,s,n,i=null){return t.forEach(e=>{e.settings.forEach(t=>t.value=s[e.id][t.id])}),this.getSettingsPanel(e,t,n,i)}getSettingsPanel(e,t,s,n=null){return[M.createElement(G,{text:e,button:n}),t.map(e=>M.createElement(me,Object.assign({},e,{onChange:s})))]}getContentPanel(e,t,s,n={}){return M.createElement(X,Object.assign({},{title:e,contentList:t,contentState:s},n))}get attribution(){return M.createElement("div",{className:"bd-version",style:{fontSize:"12px",fontWeight:"600",color:"#72767d",padding:"2px 10px"}},`BBD v${i.bbdVersion} by `,M.createElement("a",{href:"https://github.com/rauenzi/",target:"_blank"},"Zerebos"))}async patchSections(){m.after("SettingsManager",c.getByDisplayName("FluxContainer(GuildSettings)").prototype,"render",e=>{e._reactInternalFiber.return.return.return.return.return.return.memoizedProps.id="guild-settings"});const e=await D.get("UserSettings",e=>e.prototype&&e.prototype.generateSections);m.after("SettingsManager",e.prototype,"render",e=>{e._reactInternalFiber.return.return.return.return.return.return.return.memoizedProps.id="user-settings"}),m.after("SettingsManager",e.prototype,"generateSections",(e,t,s)=>{let n=s.findIndex(e=>"linux"==e.section.toLowerCase())+1;const i=e=>{s.splice(n,0,e),n++};i({section:"DIVIDER"}),i({section:"HEADER",label:"BandagedBD"});for(const e of C.collections)e.disabled||i({section:e.name,label:e.name,element:()=>this.buildSettingsPanel(e.name,e.settings,C.state[e.id],C.onSettingChange.bind(C,e.id),e.button?e.button:null)});for(const t of C.panels.sort((e,t)=>e.order>t.order))t.clickListener&&(t.onClick=n=>t.clickListener(e,n,s)),i(t);i({section:"CUSTOM",element:()=>this.attribution})}),this.forceUpdate()}forceUpdate(){const e=c.getByProps("standardSidebarView").standardSidebarView.split(" ")[0],t=document.querySelector(`.${e}`);u.getReactInstance(t).return.return.return.return.return.return.stateNode.forceUpdate()}};const fe=s(2),be=s(1).remote;var ye=new class extends q{get name(){return"PluginManager"}get moduleExtension(){return".js"}get extension(){return".plugin.js"}get contentFolder(){return fe.resolve(i.dataPath,"plugins")}get prefix(){return"plugin"}constructor(){super(),this.onSwitch=this.onSwitch.bind(this),this.observer=new MutationObserver(e=>{for(let t=0,s=e.length;t<s;t++)this.onMutation(e[t])})}initialize(){const e=super.initialize();return this.setupFunctions(),C.registerPanel("plugins","Plugins",{element:()=>ge.getContentPanel("Plugins",this.contentList,this.state,{folder:this.contentFolder,onChange:this.togglePlugin.bind(this),reload:this.reloadPlugin.bind(this),refreshList:this.updatePluginList.bind(this)})}),e}updatePluginList(){return this.updateList()}loadAllPlugins(){return this.loadAllContent()}enablePlugin(e){return this.enableContent(e)}disablePlugin(e){return this.disableContent(e)}togglePlugin(e){return this.toggleContent(e)}unloadPlugin(e){return this.unloadContent(e)}loadPlugin(e){const t=this.loadContent(e);t&&U.showContentErrors({themes:[t]})}reloadPlugin(e){const t=this.reloadContent(e);return t&&U.showContentErrors({plugins:[t]}),"string"==typeof e?this.contentList.find(t=>t.id==e||t.filename==e):e}initializeContent(e){if(!e.type)return new B(e.name,e.filename,"Plugin had no exports",{message:"Plugin had no exports or no name property.",stack:""});try{const t=new e.type;e.plugin=t,e.name=t.getName()||e.name,e.author=t.getAuthor()||e.author||"No author",e.description=t.getDescription()||e.description||"No description",e.version=t.getVersion()||e.version||"No version";try{"function"==typeof e.plugin.load&&e.plugin.load()}catch(t){return this.state[e.id]=!1,new B(e.name,e.filename,"load() could not be fired.",{message:t.message,stack:t.stack})}}catch(t){return new B(e.name,e.filename,"Could not be constructed.",{message:t.message,stack:t.stack})}}getContentModification(e,t,s){return e._compile(t,e.filename),u.isEmpty(e.exports)?t+=`\nmodule.exports = ${JSON.stringify(s)};\nmodule.exports.type = ${s.exports||s.name};`:(s.type=e.exports,e.exports=s,"")}startContent(e){return this.startPlugin(e)}stopContent(e){return this.stopPlugin(e)}startPlugin(e){const t="string"==typeof e?this.contentList.find(t=>t.id==e):e;if(!t)return;const s=t.plugin;try{s.start(),this.emit("started",t.id),A.show(`${t.name} v${t.version} has started.`)}catch(e){return this.state[t.id]=!1,A.error(`${t.name} v${t.version} could not be started.`),h.stacktrace(this.name,t.name+" could not be started.",e),new B(t.name,t.filename,"start() could not be fired.",{message:e.message,stack:e.stack})}}stopPlugin(e){const t="string"==typeof e?this.contentList.find(t=>t.id==e):e;if(!t)return;const s=t.plugin;try{s.stop(),this.emit("stopped",t.id),A.show(`${t.name} v${t.version} has stopped.`)}catch(e){return this.state[t.id]=!1,A.error(`${t.name} v${t.version} could not be stopped.`),h.stacktrace(this.name,t.name+" could not be stopped.",e),new B(t.name,t.filename,"stop() could not be fired.",{message:e.message,stack:e.stack})}}setupFunctions(){be.getCurrentWebContents().on("did-navigate-in-page",this.onSwitch.bind(this)),this.observer.observe(document,{childList:!0,subtree:!0})}onSwitch(){this.emit("page-switch");for(let e=0;e<this.contentList.length;e++){const t=this.contentList[e].plugin;if(this.state[this.contentList[e].id]&&"function"==typeof t.onSwitch)try{t.onSwitch()}catch(t){h.stacktrace(this.name,"Unable to fire onSwitch for "+this.contentList[e].name+".",t)}}}onMutation(e){for(let t=0;t<this.contentList.length;t++){const s=this.contentList[t].plugin;if(this.state[this.contentList[t].id]&&"function"==typeof s.observer)try{s.observer(e)}catch(e){h.stacktrace(this.name,"Unable to fire observer for "+this.contentList[t].name+".",e)}}}};const ve=s(2);var we=new class extends q{get name(){return"ThemeManager"}get moduleExtension(){return".css"}get extension(){return".theme.css"}get contentFolder(){return ve.resolve(i.dataPath,"themes")}get prefix(){return"theme"}initialize(){const e=super.initialize();return C.registerPanel("themes","Themes",{element:()=>ge.getContentPanel("Themes",this.contentList,this.state,{folder:this.contentFolder,onChange:this.toggleTheme.bind(this),reload:this.reloadTheme.bind(this),refreshList:this.updateThemeList.bind(this)})}),e}updateThemeList(){return this.updateList()}loadAllThemes(){return this.loadAllContent()}enableTheme(e){return this.enableContent(e)}disableTheme(e){return this.disableContent(e)}toggleTheme(e){return this.toggleContent(e)}unloadTheme(e){return this.unloadContent(e)}loadTheme(e){const t=this.loadContent(e);t&&U.showContentErrors({themes:[t]})}reloadTheme(e){const t=this.reloadContent(e);t&&U.showContentErrors({themes:[t]})}getContentModification(e,t,s){return s.css=t,`module.exports = ${JSON.stringify(s)};`}startContent(e){return this.addTheme(e)}stopContent(e){return this.removeTheme(e)}addTheme(e){const t="string"==typeof e?this.contentList.find(t=>t.id==e):e;t&&(S.injectTheme(t.id,t.css),A.show(`${t.name} v${t.version} has been applied.`))}removeTheme(e){const t="string"==typeof e?this.contentList.find(t=>t.id==e):e;t&&(S.removeTheme(t.id),A.show(`${t.name} v${t.version} has been removed.`))}};class Ce{get name(){return"Unnamed Builtin"}get collection(){return"settings"}get category(){return"general"}get id(){return"None"}async initialize(){C.get(this.collection,this.category,this.id)&&await this.enable(),w.on("setting-updated",(e,t,s,n)=>{e==this.collection&&t===this.category&&s===this.id&&(n?this.enable():this.disable())})}registerSetting(e,t,s,n,i){return 4==arguments.length?(e=this.collection,t=arguments[0],s=arguments[1],n=arguments[2],i=arguments[3]):3==arguments.length&&(e=this.collection,t=this.category,s=arguments[0],n=arguments[1],i=arguments[2]),C.on(e,t,s,e=>{e?n():i()})}get(e,t,s){return 2==arguments.length?(e=this.collection,t=arguments[0],s=arguments[1]):1==arguments.length&&(e=this.collection,t=this.category,s=arguments[0]),C.get(e,t,s)}async enable(){this.log("Enabled"),await this.enabled()}async disable(){this.log("Disabled"),await this.disabled()}async enabled(){}async disabled(){}log(...e){h.log(this.name,...e)}warn(...e){h.warn(this.name,...e)}error(...e){h.err(this.name,...e)}stacktrace(e,t){h.stacktrace(this.name,e,t)}after(e,t,s){return m.after(this.name,e,t,s)}unpatchAll(){return m.unpatchAll(this.name)}}var Se=new class extends Ce{get name(){return"VoiceMode"}get category(){return"appearance"}get id(){return"voiceMode"}enabled(){document.querySelector(".chat-3bRxxu").style.setProperty("visibility","hidden"),document.querySelector(".chat-3bRxxu").style.setProperty("min-width","0px"),document.querySelector(".channels-Ie2l6A").style.setProperty("flex-grow","100000")}disabled(){document.querySelector(".chat-3bRxxu").style.setProperty("visibility",""),document.querySelector(".chat-3bRxxu").style.setProperty("min-width",""),document.querySelector(".channels-Ie2l6A").style.setProperty("flex-grow","")}};const Ee=new RegExp("^(?!da-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$");var Pe=new class extends Ce{get id(){return"classNormalizer"}get category(){return"general"}get name(){return"ClassNormalizer"}enabled(){this.hasPatched||(this.patchClassModules(c.getModules(this.moduleFilter.bind(this))),this.normalizeElement(document.querySelector("#app-mount")),this.hasPatched=!0,this.patchDOMMethods())}disabled(){this.hasPatched&&(this.unpatchClassModules(c.getModules(this.moduleFilter.bind(this))),this.revertElement(document.querySelector("#app-mount")),this.hasPatched=!1)}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(!Ee.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 i=n.split(" ");for(const n of i){const i=n.match(Ee)[1];if(!i)continue;const o=i.split("-").map((e,t)=>t?e[0].toUpperCase()+e.slice(1):e).join("");t[s]+=` ${e}-${o}`}}}unpatchClassModule(e,t){for(const s in t){const n=t[s];if(this.shouldIgnore(n))continue;let i="";const o=n.split(" ");for(const t of o)t.startsWith(`${e}-`)||(i+=` ${t}`);t[s]=i.trim()}}normalizeElement(e){if(!(e instanceof Element))return;const t=e.classList;for(let s=0,n=t.length;s<n;s++){if(!Ee.test(t[s]))continue;const n=t[s].match(Ee)[1].split("-").map((e,t)=>t?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<t.length;e++)t[e].startsWith("da-")&&s.push(t[e]);e.classList.remove(...s)}patchDOMMethods(){const e=DOMTokenList.prototype.contains;DOMTokenList.prototype.contains=function(t){return t.split(" ").every(t=>e.call(this,t))}}},ke=new class extends Ce{get name(){return"DeveloperMode"}get category(){return"developer"}get id(){return"developerMode"}get selectorModeID(){return"copySelector"}get selectorMode(){return this.get(this.selectorModeID)}constructor(){super(),this.enableSelectors=this.enableSelectors.bind(this),this.disableSelectors=this.disableSelectors.bind(this)}enabled(){$(window).on("keydown.bdDevmode",e=>{119!==e.which&&118!=e.which||this.log("Debugger Activated")}),this.selectorMode&&this.enableSelectors(),this.selectorCancel=this.registerSetting(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=$('<div class="contextMenu-HLZMGh bd-context-menu"></div>')).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=$("<div/>",{class:"itemGroup-1tL0uz"}),n=$("<div/>",{class:"item-1Yvehc",click:()=>{p.ElectronModule.copy(this.lastSelector),t.hide()}}).append($("<span/>",{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(".")}`}};class xe extends M.Component{constructor(e){super(e),this.props.server.iconUrl||(this.props.server.iconUrl=this.props.defaultAvatar()),this.state={imageError:!1,joined:this.props.joined},this.join=this.join.bind(this),this.handleError=this.handleError.bind(this)}render(){const{server:e}=this.props,t="string"==typeof this.state.joined?"Joining...":this.state.joined?"Joined":"Join",s=`bd-button${1==this.state.joined?" bd-button-success":""}`;return M.createElement("div",{className:`bd-server-card${e.pinned?" bd-server-card-pinned":""}`},M.createElement("img",{className:"bd-server-image",src:e.iconUrl,onError:this.handleError}),",",M.createElement("div",{className:"bd-server-content"},M.createElement("div",{className:"bd-server-header"},M.createElement("h5",{className:"bd-server-name"},e.name),M.createElement("h5",{className:"bd-server-member-count"},e.members," Members")),M.createElement("div",{className:"bd-scroller-wrap bd-server-description-container"},M.createElement("div",{className:"bd-scroller bd-server-description"},e.description)),M.createElement("div",{className:"bd-server-footer"},M.createElement("div",{className:"bd-server-tags"},e.categories.join(", ")),M.createElement("button",{type:"button",className:s,onClick:this.join},t))))}handleError(){this.props.server.iconUrl=this.props.defaultAvatar(),this.setState({imageError:!0})}async join(){if(this.state.joined)return;this.setState({joined:"joining"});const e=await this.props.join(this.props.server.identifier,this.props.server.nativejoin);this.setState({joined:e})}}const De=c.getByProps("getSortedGuilds"),Me=c.getByProps("getUserAvatarURL","DEFAULT_AVATARS"),Te=c.getByProps("acceptInvite"),Ne=s(1).remote.BrowserWindow;class Be{static get endPoint(){return"https://search.discordservers.com"}static get joinEndPoint(){return"https://j.discordservers.com"}static get connectEndPoint(){return"https://auth.discordservers.com/info"}static getDefaultAvatar(){return Me.DEFAULT_AVATARS[Math.floor(5*Math.random())]}static hasJoined(e){return De.guildPositions.includes(e)}static search({term:e="",category:t="",from:s=0}={}){return new Promise(n=>{const i=[];t&&i.push(`category=${t.replace(/ /g,"%20")}`),e&&i.push(`term=${e.replace(/ /g,"%20")}`),s&&i.push(`from=${s}`);const o=`?${i.join("&")}`;$.ajax({method:"GET",url:`${this.endPoint}${o}`,success:e=>{const t=e.size+e.from;n({servers:e.results,size:e.size,from:e.from,total:e.total,next:t>=e.total?null:t})},error:()=>n(null)})})}static join(e,t=!1){return new Promise(s=>{if(t)return Te.acceptInvite(e),s(!0);$.ajax({method:"GET",url:`${this.joinEndPoint}/${e}`,headers:{Accept:"application/json;","Content-Type":"application/json;","x-discord-token":this._accessToken},crossDomain:!0,xhrFields:{withCredentials:!0},success:()=>s(!0),error:()=>s(!1)})})}static checkConnection(){return new Promise(e=>{try{$.ajax({method:"GET",url:this.connectEndPoint,headers:{Accept:"application/json;","Content-Type":"application/json;"},crossDomain:!0,xhrFields:{withCredentials:!0},success:t=>{this._accessToken=t.access_token,e(t)},error:()=>e(!1)})}catch(t){e(!1)}})}static connect(){return new Promise(e=>{const t=new Ne(this.windowOptions),s=`https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=${this.connectEndPoint}`;t.webContents.on("did-navigate",(s,n)=>{n==this.connectEndPoint&&(t.close(),e())}),t.loadURL(s)})}static get windowOptions(){return{width:380,height:450,backgroundColor:"#282b30",show:!0,resizable:!0,maximizable:!1,minimizable:!1,alwaysOnTop:!0,frame:!1,center:!0,webPreferences:{nodeIntegration:!1}}}}const je=c.getByDisplayName("SettingsView");class Le extends M.Component{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"]}constructor(e){super(e),this.state={category:"All",query:"",loading:!0,user:null,results:{servers:[],size:0,from:0,total:0,next:null}},this.changeCategory=this.changeCategory.bind(this),this.searchKeyDown=this.searchKeyDown.bind(this),this.connect=this.connect.bind(this),this.loadNextPage=this.loadNextPage.bind(this)}componentDidMount(){this.checkConnection()}async checkConnection(){const e=await Be.checkConnection();if(!e)return this.setState({loading:!0,user:null});this.setState({user:e}),this.search()}async connect(){await Be.connect(),this.checkConnection()}searchKeyDown(e){this.state.loading||13!==e.which||this.search(e.target.value)}async search(e="",t=0){this.setState({query:e,loading:!0});const s=await Be.search({term:e,category:"All"==this.state.category?"":this.state.category,from:t});if(!s)return this.setState({results:{servers:[],size:0,from:0,total:0,next:null}});this.setState({loading:!1,results:s})}async changeCategory(e){this.state.loading||(await new Promise(t=>this.setState({category:e},t)),this.search())}loadNextPage(){this.state.loading||this.search(this.state.query,this.state.results.next)}async join(e,t=!1){return await Be.join(e,t)}get searchBox(){return M.createElement("input",{onKeyDown:this.searchKeyDown,type:"text",className:"bd-search",placeholder:"Search...",maxLength:"50"})}get title(){if(!this.state.user)return"Not connected to DiscordServers.com!";if(this.state.loading)return"Loading...";const e=this.state.results.from+1,t=this.state.results.total;let s=`Showing ${e}-${this.state.results.next?this.state.results.next:t} of ${t} results in ${this.state.category}`;return this.state.query&&(s+=` for ${this.state.query}`),s}get content(){const e=this.state.user?null:{title:"Connect",onClick:this.connect},t="All"!=this.state.category&&this.state.user?null:this.bdServer,s=this.state.results.servers.map(e=>M.createElement(xe,{key:e.identifier,server:e,joined:Be.hasJoined(e.identifier),defaultAvatar:Be.getDefaultAvatar}));return[M.createElement(G,{text:this.title,button:e}),t,s,this.state.results.next?this.nextButton:null,this.state.results.servers.length>0&&M.createElement(G,{text:this.title})]}get nextButton(){return M.createElement("button",{type:"button",className:"bd-button bd-button-next",onClick:this.loadNextPage},this.state.loading?"Loading":"Load More")}get connection(){const{user:e}=this.state;return e?M.createElement("div",{id:"bd-connection"},M.createElement("div",{className:"bd-footnote"},"Connected as: ",`${e.username}#${e.discriminator}`),M.createElement("button",{type:"button",className:"bd-button bd-button-reconnect",onClick:this.connect},"Reconnect")):M.createElement("div",{id:"bd-connection"})}get bdServer(){const e={name:"BetterDiscord",online:"7500+",members:"20000+",categories:["community","programming","support"],description:"Official BetterDiscord server for plugins, themes, support, etc",identifier:"86004744966914048",iconUrl:"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp",nativejoin:!0,invite_code:"0Tmfo5ZbORCRqbAd",pinned:!0};return M.createElement(xe,{server:e,pinned:!0,joined:Be.hasJoined(e.identifier),defaultAvatar:Be.getDefaultAvatar})}render(){const e=this.categoryButtons.map(e=>({section:e,label:e,element:()=>this.content}));return M.createElement(je,{onClose:this.props.close,onSetSection:this.changeCategory,section:this.state.category,sections:[{section:"HEADER",label:"Search"},{section:"CUSTOM",element:()=>this.searchBox},{section:"HEADER",label:"Categories"},...e,{section:"DIVIDER"},{section:"HEADER",label:M.createElement("a",{href:"https://discordservers.com",target:"_blank"},"Discordservers.com")},{section:"DIVIDER"},{section:"CUSTOM",element:()=>this.connection}],theme:"dark"})}}const Fe=c.getByProps("pushLayer");var Ae=new class extends Ce{get name(){return"PublicServers"}get category(){return"general"}get id(){return"publicServers"}enabled(){const e=p.GuildClasses.wrapper.split(" ")[0];$(`.${e} .scroller-2FKFPG >:first-child`).after(this.button)}disabled(){$("#bd-pub-li").remove()}openPublicServers(){Fe.pushLayer(()=>p.React.createElement(Le,{close:Fe.popLayer}))}get button(){return $("<div/>",{class:p.GuildClasses.listItem,id:"bd-pub-li"}).append($("<div/>",{class:"wrapper-25eVIn "+p.GuildClasses.circleButtonMask,text:"public",id:"bd-pub-button",click:()=>{this.openPublicServers()}}))}},Oe=new class extends Ce{get name(){return"DarkMode"}get category(){return"appearance"}get id(){return"darkMode"}enabled(){document.getElementById("app-mount").classList.add("bda-dark","bda-dark")}disabled(){document.getElementById("app-mount").classList.remove("bda-dark","bda-dark")}},$e=new class extends Ce{get name(){return"MinimalMode"}get category(){return"appearance"}get id(){return"minimalMode"}get hideChannelsID(){return"hideChannels"}get hideChannels(){return this.get(this.hideChannelsID)}constructor(){super(),this.enableHideChannels=this.enableHideChannels.bind(this),this.disableHideChannels=this.disableHideChannels.bind(this)}enabled(){document.body.classList.add("bd-minimal"),this.hideChannels&&this.enableHideChannels(),this.hideChannelCancel=this.registerSetting(this.hideChannelsID,this.enableHideChannels,this.disableHideChannels)}disabled(){document.body.classList.remove("bd-minimal"),this.hideChannels&&this.disableHideChannels(),this.hideChannelCancel&&this.hideChannelCancel()}enableHideChannels(){document.body.classList.add("bd-minimal-chan")}disableHideChannels(){document.body.classList.remove("bd-minimal-chan")}},Re=new class extends Ce{get name(){return"24Hour"}get category(){return"general"}get id(){return"twentyFourHour"}enabled(){this.inject24Hour()}disabled(){this.unpatchAll()}inject24Hour(){const e=new RegExp("([0-9]{1,2}):([0-9]{1,2})\\s(AM|PM)"),t=(t,s,n)=>{const i=n.match(e);if(i&&4===i.length)return"AM"===i[3]?n.replace(i[0],`${"12"===i[1]?"00":i[1].padStart(2,"0")}:${i[2]}`):n.replace(i[0],`${"12"===i[1]?"12":parseInt(i[1])+12}:${i[2]}`)};this.after(p.TimeFormatter,"calendarFormat",t),this.after(p.TimeFormatter,"dateFormat",t)}};const ze=c.getModule(e=>e.defaultProps&&e.defaultProps.hasOwnProperty("disableButtons"));var Ie=new class extends Ce{get name(){return"ColoredText"}get category(){return"appearance"}get id(){return"coloredText"}enabled(){this.injectColoredText()}disabled(){this.unpatchAll()}injectColoredText(){this.after(ze.prototype,"render",(e,t,s)=>{this.after(s.props,"children",{silent:!0,after:({returnValue:t})=>{const s=t.props.children[1],n=e.props.message.colorString;s&&n&&(s.props.style={color:n})}})})}removeColoredText(){document.querySelectorAll(".markup-2BOw-j").forEach(e=>{e.style.setProperty("color","")})}},_e=new class extends Ce{get name(){return"VoiceDisconnect"}get category(){return"general"}get id(){return"voiceDisconnect"}constructor(){super(),this.beforeUnload=this.beforeUnload.bind(this)}enabled(){window.addEventListener("beforeunload",this.beforeUnload)}disabled(){window.removeEventListener("beforeunload",this.beforeUnload)}beforeUnload(){p.ChannelActions.selectVoiceChannel(null,null)}};const He=c.getByDisplayName("TooltipDeprecated");class qe extends M.Component{constructor(e){super(e),this.state={shouldAnimate:!this.animateOnHover,isFavorite:this.props.isFavorite},this.onMouseEnter=this.onMouseEnter.bind(this),this.onMouseLeave=this.onMouseLeave.bind(this),this.onClick=this.onClick.bind(this)}get animateOnHover(){return C.get("emotes","general","animateOnHover")}get label(){return this.props.modifier?`${this.props.name}:${this.props.modifier}`:this.props.name}get modifierClass(){return this.props.modifier?` emote${this.props.modifier}`:""}onMouseEnter(){!this.state.shouldAnimate&&this.animateOnHover&&this.setState({shouldAnimate:!0})}onMouseLeave(){this.state.shouldAnimate&&this.animateOnHover&&this.setState({shouldAnimate:!1})}onClick(e){this.props.onClick&&this.props.onClick(e)}render(){return M.createElement(He,{color:"black",position:"top",text:this.label,delay:750},M.createElement("div",{className:"emotewrapper"+(this.props.jumboable?" jumboable":""),onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,onClick:this.onClick},M.createElement("img",{draggable:!1,className:"emote"+this.modifierClass+(this.props.jumboable?" jumboable":"")+(this.state.shouldAnimate?"":" stop-animation"),dataModifier:this.props.modifier,alt:this.label,src:this.props.url}),M.createElement("input",{className:"fav"+(this.state.isFavorite?" active":""),title:"Favorite!",type:"button",onClick:e=>{e.preventDefault(),e.stopPropagation(),this.state.isFavorite?w.emit("emotes-favorite-removed",this.label):w.emit("emotes-favorite-added",this.label,this.props.url),this.setState({isFavorite:!this.state.isFavorite})}})))}}const Ue={TwitchGlobal:{},TwitchSubscriber:{},BTTV:{},FrankerFaceZ:{},BTTV2:{}},We={TwitchGlobal:"twitch",TwitchSubscriber:"twitch",BTTV:"bttv",FrankerFaceZ:"ffz",BTTV2:"bttv"},Ve=[],Ge=["twitch","bttv","ffz"],Je=["flip","spin","pulse","spin2","spin3","1spin","2spin","3spin","tr","bl","br","shake","shake2","shake3","flap"];var Ze=new class extends Ce{get name(){return"Emotes"}get collection(){return"settings"}get category(){return"general"}get id(){return"emotes"}get categories(){return Object.keys(We).filter(e=>this.isCategoryEnabled(We[e]))}isCategoryEnabled(e){return super.get("emotes","categories",e)}get(e){return super.get("emotes","general",e)}get MessageContentComponent(){return c.getModule(e=>e.defaultProps&&e.defaultProps.hasOwnProperty("disableButtons"))}get Emotes(){return Ue}get TwitchGlobal(){return Ue.TwitchGlobal}get TwitchSubscriber(){return Ue.TwitchSubscriber}get BTTV(){return Ue.BTTV}get FrankerFaceZ(){return Ue.FrankerFaceZ}get BTTV2(){return Ue.BTTV2}get blacklist(){return Ve}get favorites(){return this.favoriteEmotes}getCategory(e){return Ue[e]}initialize(){super.initialize(),this.favoriteEmotes={};const e=y.getBDData("bdfavemotes");""!==e&&null!==e&&(this.favoriteEmotes=JSON.parse(window.atob(e))),this.saveFavorites(),this.addFavorite=this.addFavorite.bind(this),this.removeFavorite=this.removeFavorite.bind(this)}async enabled(){C.registerCollection("emotes","Emotes",r,{title:"Clear Emote Cache",onClick:()=>{this.clearEmoteData(),this.loadEmoteData(o)}}),w.on("emotes-favorite-added",this.addFavorite),w.on("emotes-favorite-removed",this.removeFavorite)}disabled(){w.off("emotes-favorite-added",this.addFavorite),w.off("emotes-favorite-removed",this.removeFavorite),C.removeCollection("emotes"),this.emptyEmotes(),this.cancelEmoteRender&&(this.cancelEmoteRender(),delete this.cancelEmoteRender)}addFavorite(e,t){this.favoriteEmotes.hasOwnProperty(e)||(this.favoriteEmotes[e]=t),this.saveFavorites()}removeFavorite(e){this.favoriteEmotes.hasOwnProperty(e)&&(delete this.favoriteEmotes[e],this.saveFavorites())}isFavorite(e){return this.favoriteEmotes.hasOwnProperty(e)}saveFavorites(){y.setBDData("bdfavemotes",window.btoa(JSON.stringify(this.favoriteEmotes)))}emptyEmotes(){for(const e in Ue)Object.assign(Ue,{[e]:{}})}patchMessageContent(){this.cancelEmoteRender||(this.cancelEmoteRender=this.after(this.MessageContentComponent.prototype,"render",(e,t,s)=>{this.after(s.props,"children",(e,t,s)=>{if(0==this.categories.length)return;const n=s.props.children[1];if(!n.props.children)return;const i=n.props.children[1];if(i&&i.length){for(let e=0;e<i.length;e++){const t=i[e];if("string"!=typeof t)continue;const s=t.split(/([^\s]+)([\s]|$)/g);for(let t=0,n=this.categories.length;t<n;t++)for(let n=0,o=s.length;n<o;n++){const o=s[n].split(":"),r=o[0];let a=o[1]?o[1]:"",l=a.slice(0);if(r.length<4||Ve.includes(r))continue;Je.includes(a)&&C.get(this.category,"general","modifiers")||(a=""),Ge.includes(l)?a=l:l="";let c=this.categories[t];if("twitch"===l?Ue.TwitchGlobal[r]?c="TwitchGlobal":Ue.TwitchSubscriber[r]&&(c="TwitchSubscriber"):"bttv"===l?Ue.BTTV[r]?c="BTTV":Ue.BTTV2[r]&&(c="BTTV2"):"ffz"===l&&Ue.FrankerFaceZ[r]&&(c="FrankerFaceZ"),!Ue[c][r]||!C.get(this.category,"categories",We[c]))continue;const d=i[e].match(new RegExp(`([\\s]|^)${u.escape(a?r+":"+a:r)}([\\s]|$)`));if(!d)continue;const h=i[e].substring(0,d.index+d[1].length),m=i[e].substring(d.index+d[0].length-d[2].length);i[e]=h;const g=p.React.createElement(qe,{name:r,url:Ue[c][r],modifier:a,isFavorite:this.isFavorite(r)});i.splice(e+1,0,m),i.splice(e+1,0,g)}}if(i.every(e=>"string"==typeof e&&""==e.replace(/\s*/,"")||(!(!e.type||"BDEmote"!=e.type.name)||!!(e.props&&e.props.children&&e.props.children.props&&e.props.children.props.emojiName))))for(const e of i)"object"==typeof e&&("BDEmote"==e.type.name?e.props.jumboable=!0:e.props&&e.props.children&&e.props.children.props&&e.props.children.props.emojiName&&(e.props.children.props.jumboable=!0))}})}))}async loadEmoteData(e){this.emotesLoaded=!1;const t=s(0),n=i.dataPath+"emote_data.json";if(t.existsSync(n)&&this.isCacheValid()){A.show("Loading emotes from cache.",{type:"info"}),this.log("Loading emotes from local cache.");const s=await new Promise(e=>{t.readFile(n,"utf8",(t,s)=>{this.log("Emotes loaded from cache."),t&&(s={}),e(s)})}),i=u.testJSON(s);let o=!!i;o&&Object.assign(Ue,i);for(const t in e)o=Object.keys(Ue[e[t].variable]).length>0;if(o)return A.show("Emotes successfully loaded.",{type:"success"}),this.emotesLoaded=!0,void w.dispatch("emotes-loaded");this.log("Cache was corrupt, downloading..."),t.unlinkSync(n)}if(C.get(this.category,"general","download")){A.show("Downloading emotes in the background do not reload.",{type:"info"});for(const t in e){await new Promise(e=>setTimeout(e,1e3));const s=await this.downloadEmotes(e[t]);Ue[e[t].variable]=s}A.show("All emotes successfully downloaded.",{type:"success"});try{t.writeFileSync(n,JSON.stringify(Ue),"utf8")}catch(e){this.stacktrace("Could not save emote data.",e)}this.emotesLoaded=!0,w.dispatch("emotes-loaded")}}downloadEmotes(e){const t=s(5),n={url:e.url,timeout:e.timeout?e.timeout:5e3,json:!0};return this.log(`Downloading: ${e.variable} (${e.url})`),new Promise((s,i)=>{t(n,(t,n,o)=>{if(t)return this.stacktrace("Could not download "+e.variable,t),e.backup?(e.url=e.backup,e.backup=null,e.backupParser&&(e.parser=e.backupParser),s(this.downloadEmotes(e))):i({});"function"==typeof e.parser&&(o=e.parser(o));for(const t in o)t.length<4||Ve.includes(t)?delete o[t]:o[t]=e.getEmoteURL(o[t]);s(o),this.log("Downloaded: "+e.variable)})})}getBlacklist(){return new Promise(e=>{$.getJSON("https://rauenzi.github.io/BetterDiscordApp/data/emotefilter.json",function(t){e(Ve.push(...t.blacklist))})})}isCacheValid(){const e=y.getBDData("emoteCacheDays")||y.setBDData("emoteCacheDays",7)||7,t=new Date(y.getBDData("emoteCacheDate")||null),s=new Date;return!(Math.round(Math.abs((s.getTime()-t.getTime())/864e5))>e)||(y.setBDData("emoteCacheDate",s.toJSON()),!1)}clearEmoteData(){const e=s(0),t=i.dataPath+"emote_data.json";e.existsSync(t)&&e.unlinkSync(t),y.setBDData("emoteCacheDate",(new Date).toJSON());for(const e in Ue)Object.assign(Ue,{[e]:{}})}};const Ye=(e,t,s={})=>{const{onContextMenu:n,onClick:i}=s,o=u.parseHTML(`<div class="emote-container">\n <img class="emote-icon" alt="${e}" src="${t}" title="${e}">\n </div>`);return n&&o.addEventListener("contextmenu",n),o.addEventListener("click",i),o};var Ke=new class extends Ce{get name(){return"EmoteMenu"}get collection(){return"emotes"}get category(){return"general"}get id(){return"emoteMenu"}get hideEmojisID(){return"hideEmojiMenu"}get hideEmojis(){return this.get(this.hideEmojisID)}constructor(){super(),this.lastTab="bda-qem-emojis",this.qmeHeader=u.parseHTML('<div id="bda-qem">\n <button class="active" id="bda-qem-twitch">Twitch</button>\n <button id="bda-qem-favourite">Favourite</button>\n <button id="bda-qem-emojis">Emojis</buttond>\n</div>');for(const e of this.qmeHeader.getElementsByTagName("button"))e.addEventListener("click",this.switchMenu.bind(this));this.teContainer=u.parseHTML('<div id="bda-qem-twitch-container">\n <div class="scroller-wrap scrollerWrap-2lJEkd fade">\n <div class="scroller scroller-2FKFPG">\n <div class="emote-menu-inner">\n\n </div>\n </div>\n </div>\n</div>'),this.teContainerInner=this.teContainer.querySelector(".emote-menu-inner"),this.faContainer=u.parseHTML('<div id="bda-qem-favourite-container">\n <div class="scroller-wrap scrollerWrap-2lJEkd fade">\n <div class="scroller scroller-2FKFPG">\n <div class="emote-menu-inner">\n\n </div>\n </div>\n </div>\n</div>'),this.faContainerInner=this.faContainer.querySelector(".emote-menu-inner"),this.observer=new MutationObserver(e=>{for(const t of e)this.observe(t)}),this.enableHideEmojis=this.enableHideEmojis.bind(this),this.disableHideEmojis=this.disableHideEmojis.bind(this),this.updateTwitchEmotes=this.updateTwitchEmotes.bind(this)}async enabled(){this.log("Starting to observe"),this.observer.observe(document.getElementById("app-mount"),{childList:!0,subtree:!0}),this.hideEmojiCancel=this.registerSetting(this.hideEmojisID,this.enableHideEmojis,this.disableHideEmojis),this.hideEmojis&&this.enableHideEmojis(),Ze.emotesLoaded&&this.updateTwitchEmotes(),w.on("emotes-loaded",this.updateTwitchEmotes)}disabled(){w.off("emotes-loaded",this.updateTwitchEmotes),this.observer.disconnect(),this.disableHideEmojis(),this.hideEmojiCancel&&this.hideEmojiCancel()}enableHideEmojis(){const e=document.querySelector(".emojiPicker-3m1S-j");e&&e.classList.add("bda-qme-hidden")}disableHideEmojis(){const e=document.querySelector(".emojiPicker-3m1S-j");e&&e.classList.remove("bda-qme-hidden")}insertEmote(e){const t=u.getTextArea();u.insertText(t[0]," "==t.val().slice(-1)?t.val()+e:t.val()+" "+e)}favContext(e){e.stopPropagation();const t=e.target.closest(".emote-container").children[0],s=$('<div id="removemenu" class="bd-context-menu context-menu theme-dark">Remove</div>');s.css({top:e.pageY-$("#bda-qem-favourite-container").offset().top,left:e.pageX-$("#bda-qem-favourite-container").offset().left}),$(t).parent().append(s),s.on("click",e=>{e.preventDefault(),e.stopPropagation(),$(t).remove(),Ze.removeFavorite($(t).attr("title")),this.updateFavorites(),$(document).off("mousedown.emotemenu")}),$(document).on("mousedown.emotemenu",function(e){"removemenu"!=e.target.id&&($("#removemenu").remove(),$(document).off("mousedown.emotemenu"))})}switchMenu(e){let t="string"==typeof e?e:e.target.id;"bda-qem-emojis"==t&&this.hideEmojis&&(t="bda-qem-favourite");const s=$("#bda-qem-twitch"),n=$("#bda-qem-favourite"),i=$("#bda-qem-emojis");switch(s.removeClass("active"),n.removeClass("active"),i.removeClass("active"),$(".emojiPicker-3m1S-j").hide(),$("#bda-qem-favourite-container").hide(),$("#bda-qem-twitch-container").hide(),t){case"bda-qem-twitch":s.addClass("active"),$("#bda-qem-twitch-container").show();break;case"bda-qem-favourite":n.addClass("active"),$("#bda-qem-favourite-container").show();break;case"bda-qem-emojis":i.addClass("active"),$(".emojiPicker-3m1S-j").show(),$(".emojiPicker-3m1S-j input").focus()}t&&(this.lastTab=t)}observe(e){if(!(e.addedNodes.length&&e.addedNodes[0]instanceof Element))return;const t=e.addedNodes[0];if(!t.classList.contains("popout-3sVMXz")||t.classList.contains("popoutLeft-30WmrD")||!t.getElementsByClassName("emojiPicker-3m1S-j").length)return;const s=$(t);this.hideEmojis?s.addClass("bda-qme-hidden"):s.removeClass("bda-qme-hidden"),s.prepend(this.qmeHeader),s.append(this.teContainer),s.append(this.faContainer),this.switchMenu(this.lastTab)}updateTwitchEmotes(){for(;this.teContainerInner.firstChild;)this.teContainerInner.firstChild.remove();for(const e in Ze.getCategory("TwitchGlobal")){if(!Ze.getCategory("TwitchGlobal").hasOwnProperty(e))continue;const t=Ze.getCategory("TwitchGlobal")[e],s=Ye(e,t,{onClick:this.insertEmote.bind(this,e)});this.teContainerInner.append(s)}}updateFavorites(){for(;this.faContainerInner.firstChild;)this.faContainerInner.firstChild.remove();for(const e in Ze.favorites){const t=Ze.favorites[e],s=Ye(e,t,{onClick:this.insertEmote.bind(this,e),onContextMenu:this.favContext.bind(this)});this.faContainerInner.append(s)}Ze.saveFavorites()}},Xe=new class extends Ce{get name(){return"EmoteAutocapitalize"}get collection(){return"emotes"}get category(){return"general"}get id(){return"autoCaps"}enabled(){$("body").off(".bdac"),$("body").on("keyup.bdac change.bdac paste.bdac",$(".channelTextArea-1LDbYG textarea:first"),()=>{const e=$(".channelTextArea-1LDbYG textarea:first").val();if(null==e)return;const t=e.split(" ").pop();if(t.length>3){if("danSgame"==t)return;const s=this.capitalize(t.toLowerCase());null!=s&&u.insertText(u.getTextArea()[0],e.replace(t,s))}})}disabled(){$("body").off(".bdac")}capitalize(e){const t=Ze.getCategory("TwitchGlobal");for(const s in t)if(t.hasOwnProperty(s)&&e==(s+"").toLowerCase())return s}};const Qe=s(0),et=s(2);var tt=new class extends Ce{get name(){return"WindowPrefs"}get category(){return"window"}get id(){return"transparency"}get WindowConfigFile(){if(this._windowConfigFile)return this._windowConfigFile;const e=s(1).remote.app,t=e.getAppPath(),n=e.getPath("userData"),i=et.resolve(n,e.getVersion(),"modules","discord_desktop_core","injector","config.json"),o=et.resolve(t,"..","app","config.json"),r=Qe.existsSync(o)?o:Qe.existsSync(i)?i:null;return this._windowConfigFile=r||null}enabled(){this.setWindowPreference("transparent",!0),this.setWindowPreference("backgroundColor",null)}disabled(){this.setWindowPreference("transparent",!1),this.setWindowPreference("backgroundColor","#2f3136")}getAllWindowPreferences(){return this.WindowConfigFile?require(this.WindowConfigFile):{}}getWindowPreference(e){if(this.WindowConfigFile)return this.getAllWindowPreferences()[e]}setWindowPreference(e,t){if(!this.WindowConfigFile)return;const n=this.getAllWindowPreferences();n[e]=t,delete s.c[this.WindowConfigFile],Qe.writeFileSync(this.WindowConfigFile,JSON.stringify(n,null,4))}};class st extends M.Component{constructor(e){super(e),this.onClick=this.onClick.bind(this),this.state={checked:this.props.checked||!1}}render(){return M.createElement("div",{className:"checkbox-item"},M.createElement("div",{className:"checkbox-label label-JWQiNe da-label"},this.props.text),M.createElement("div",{className:"checkbox-wrapper checkbox-3kaeSU da-checkbox checkbox-3EVISJ da-checkbox",onClick:this.onClick},M.createElement("div",{className:"checkbox-inner checkboxInner-3yjcPe da-checkboxInner"},M.createElement("input",{className:"checkbox checkboxElement-1qV33p da-checkboxElement",checked:this.state.checked,type:"checkbox"}),M.createElement("span",null)),M.createElement("span",null)))}onClick(){this.props.onChange(!this.state.checked),this.setState({checked:!this.state.checked})}}function nt(){return(nt=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var n in s)Object.prototype.hasOwnProperty.call(s,n)&&(e[n]=s[n])}return e}).apply(this,arguments)}const it=c.getByDisplayName("Tooltip"),ot=["abap","abc","actionscript","ada","apache_conf","asciidoc","assembly_x86","autohotkey","batchfile","bro","c_cpp","c9search","cirru","clojure","cobol","coffee","coldfusion","csharp","csound_document","csound_orchestra","csound_score","css","curly","d","dart","diff","dockerfile","dot","drools","dummy","dummysyntax","eiffel","ejs","elixir","elm","erlang","forth","fortran","ftl","gcode","gherkin","gitignore","glsl","gobstones","golang","graphqlschema","groovy","haml","handlebars","haskell","haskell_cabal","haxe","hjson","html","html_elixir","html_ruby","ini","io","jack","jade","java","javascript","json","jsoniq","jsp","jssm","jsx","julia","kotlin","latex","less","liquid","lisp","livescript","logiql","lsl","lua","luapage","lucene","makefile","markdown","mask","matlab","maze","mel","mushcode","mysql","nix","nsis","objectivec","ocaml","pascal","perl","pgsql","php","pig","powershell","praat","prolog","properties","protobuf","python","r","razor","rdoc","red","rhtml","rst","ruby","rust","sass","scad","scala","scheme","scss","sh","sjs","smarty","snippets","soy_template","space","sql","sqlserver","stylus","svg","swift","tcl","tex","text","textile","toml","tsx","twig","typescript","vala","vbscript","velocity","verilog","vhdl","wollok","xml","xquery","yaml","django"],rt=["chrome","clouds","crimson_editor","dawn","dreamweaver","eclipse","github","iplastic","solarized_light","textmate","tomorrow","xcode","kuroir","katzenmilch","sqlserver","ambiance","chaos","clouds_midnight","cobalt","gruvbox","gob","idle_fingers","kr_theme","merbivore","merbivore_soft","mono_industrial","monokai","pastel_on_dark","solarized_dark","terminal","tomorrow_night","tomorrow_night_blue","tomorrow_night_bright","tomorrow_night_eighties","twilight","vibrant_ink"];class at extends M.Component{static get defaultId(){return"bd-editor"}constructor(e){super(e);for(const e of this.props.controls)"checkbox"!=e.type&&"showSettings"==e.onClick&&(e.onClick=this.showSettings.bind(this));this.props.theme=this.props.theme.toLowerCase().replace(/ /g,"_"),rt.includes(this.props.theme)||(this.props.theme=at.defaultProps.theme),this.props.language=this.props.language.toLowerCase().replace(/ /g,"_"),ot.includes(this.props.language)||(this.props.language=at.defaultProps.language),this.onChange=this.onChange.bind(this)}static get defaultProps(){return{controls:[],theme:"bd-monokai",language:"css",id:this.defaultId,fontSize:14}}static get themes(){return rt}componentDidMount(){this.editor=ace.edit(this.props.id);const e=this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec;this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec=function(){e.apply(this,arguments);const t=new MutationObserver(e=>{for(const s of e){if(!(s.addedNodes.length&&s.addedNodes[0]instanceof Element))continue;const e=s.addedNodes[0];e.parentElement===document.body&&e.querySelector("#ace_settingsmenu")&&(e.id="ace_settingsmenu_container",t.disconnect())}});t.observe(document.body,{childList:!0})};const t=this.props.theme==at.defaultProps.theme?this.props.theme.split("-")[1]:this.props.theme;this.editor.setTheme(`ace/theme/${t}`),this.editor.session.setMode(`ace/mode/${this.props.language}`),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(this.props.fontSize),this.editor.on("change",this.onChange)}componentWillUnmount(){this.editor.destroy()}get value(){return this.editor.session.getValue()}set value(e){this.editor.setValue(e)}onChange(){this.props.onChange&&this.props.onChange(this.value)}showSettings(){return this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec(this.editor)}resize(){return this.editor.resize()}buildControl(e){return"checkbox"==e.type?this.makeCheckbox(e):this.makeButton(e)}makeCheckbox(e){return M.createElement(st,{text:e.label,onChange:e.onChange,checked:e.checked})}makeButton(e){return M.createElement(it,{color:"black",position:"top",text:e.tooltip},t=>M.createElement("button",nt({},t,{className:"btn btn-primary",onClick:t=>{e.onClick(t,this.value)}}),e.label))}render(){this.editor&&this.editor.resize&&this.editor.resize();const e=this.props.controls.filter(e=>"right"!=e.side).map(this.buildControl.bind(this)),t=this.props.controls.filter(e=>"right"==e.side).map(this.buildControl.bind(this));return M.createElement("div",{id:"bd-editor-panel",className:this.props.theme},M.createElement("div",{id:"bd-editor-controls"},M.createElement("div",{className:"controls-section controls-left"},e),M.createElement("div",{className:"controls-section controls-right"},t)),M.createElement("div",{className:"editor-wrapper"},M.createElement("div",{id:this.props.id,className:"editor "+this.props.theme},this.props.value)))}}class lt extends M.Component{render(){const e=this.props.size||"24px";return M.createElement("svg",{viewBox:"0 0 24 24",style:{width:e,height:e}},M.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),M.createElement("path",{d:"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm2 16H5V5h11.17L19 7.83V19zm-7-7c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM6 6h9v4H6z"}))}}class ct extends M.Component{render(){const e=this.props.size||"24px";return M.createElement("svg",{viewBox:"0 0 24 24",style:{width:e,height:e}},M.createElement("path",{d:"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"}),M.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))}}class dt extends M.Component{render(){const e=this.props.size||"20px";return M.createElement("svg",{viewBox:"0 0 20 20",style:{width:e,height:e}},M.createElement("path",{fill:"none",d:"M0 0h20v20H0V0z"}),M.createElement("path",{d:"M15.95 10.78c.03-.25.05-.51.05-.78s-.02-.53-.06-.78l1.69-1.32c.15-.12.19-.34.1-.51l-1.6-2.77c-.1-.18-.31-.24-.49-.18l-1.99.8c-.42-.32-.86-.58-1.35-.78L12 2.34c-.03-.2-.2-.34-.4-.34H8.4c-.2 0-.36.14-.39.34l-.3 2.12c-.49.2-.94.47-1.35.78l-1.99-.8c-.18-.07-.39 0-.49.18l-1.6 2.77c-.1.18-.06.39.1.51l1.69 1.32c-.04.25-.07.52-.07.78s.02.53.06.78L2.37 12.1c-.15.12-.19.34-.1.51l1.6 2.77c.1.18.31.24.49.18l1.99-.8c.42.32.86.58 1.35.78l.3 2.12c.04.2.2.34.4.34h3.2c.2 0 .37-.14.39-.34l.3-2.12c.49-.2.94-.47 1.35-.78l1.99.8c.18.07.39 0 .49-.18l1.6-2.77c.1-.18.06-.39-.1-.51l-1.67-1.32zM10 13c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3z"}))}}class ht extends M.Component{render(){const e=this.props.size||"24px";return M.createElement("svg",{viewBox:"0 0 24 24",style:{width:e,height:e}},M.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),M.createElement("path",{d:"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"}))}}class ut extends M.Component{constructor(e){super(e),this.hasUnsavedChanges=!1,this.onChange=this.onChange.bind(this),this.toggleLiveUpdate=this.toggleLiveUpdate.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.openDetached=this.props.openDetached?this.openDetached.bind(this):null,this.openNative=this.openNative.bind(this),this.updateEditor=this.updateEditor.bind(this),this.controls=[{label:M.createElement(Z,{size:"18px"}),tooltip:"Update",onClick:this.updateCss},{label:M.createElement(lt,{size:"18px"}),tooltip:"Save",onClick:this.saveCss},{label:M.createElement(ct,{size:"18px"}),tooltip:"Open in System Editor",onClick:this.openNative},{label:M.createElement(dt,{size:"18px"}),tooltip:"Editor Settings",onClick:"showSettings"},{label:"Live Update",type:"checkbox",onChange:this.toggleLiveUpdate,checked:C.get("settings","customcss","liveUpdate"),side:"right"}],this.openDetached&&this.controls.push({label:M.createElement(ht,{size:"18px"}),tooltip:"Detach Editor",onClick:this.openDetached,side:"right"})}componentDidMount(){w.on("customcss-updated",this.updateEditor)}componentWillUnmount(){w.off("customcss-updated",this.updateEditor)}updateEditor(e){this.editor&&(this.editor.value=e)}get value(){return this.editor.session.getValue()}set value(e){this.editor.setValue(e)}showSettings(){return this.editor.keyBinding.$defaultHandler.commands.showSettingsMenu.exec(this.editor)}resize(){return this.editor.resize()}setEditorRef(e){this.editor=e,this.props.editorRef&&void 0!==this.props.editorRef.current?this.props.editorRef.current=e:this.props.editorRef&&(this.props.editorRef=e)}onChange(){this.hasUnsavedChanges=!0,this.props.onChange&&this.props.onChange(...arguments)}render(){return M.createElement(at,{ref:this.setEditorRef.bind(this),readOnly:this.props.readOnly,id:this.props.id||"bd-customcss-editor",onChange:this.onChange,controls:this.controls,value:this.props.css})}toggleLiveUpdate(e){C.set("settings","customcss","liveUpdate",e)}updateCss(e,t){this.props.update&&this.props.update(t)}saveCss(e,t){this.hasUnsavedChanges=!1,this.props.save&&this.props.save(t)}openDetached(e,t){this.props.openDetached&&this.props.openDetached(t)}openNative(){this.props.openNative&&this.props.openNative()}}class pt{static get width(){return Math.max(document.documentElement.clientWidth,window.innerWidth||0)}static get height(){return Math.max(document.documentElement.clientHeight,window.innerHeight||0)}}class mt extends M.Component{constructor(e){super(e),this.state={modalOpen:!1},this.offX=0,this.offY=0,this.titlebar=M.createRef(),this.window=M.createRef(),this.close=this.close.bind(this),this.onDrag=this.onDrag.bind(this),this.onDragStart=this.onDragStart.bind(this),this.onDragStop=this.onDragStop.bind(this),this.onResizeStart=this.onResizeStart.bind(this)}componentDidMount(){this.window.current.addEventListener("mousedown",this.onResizeStart,!1),this.titlebar.current.addEventListener("mousedown",this.onDragStart,!1),document.addEventListener("mouseup",this.onDragStop,!1)}onResizeStart(){this.currentWidth=this.window.current.style.width,this.currentHeight=this.window.current.style.height}onDragStop(){if(document.removeEventListener("mousemove",this.onDrag,!0),this.props.onResize){const e=this.window.current.style.width,t=this.window.current.style.height;e==this.currentWidth&&t==this.currentHeight||this.props.onResize(),this.currentWidth=e,this.currentHeight=t}}onDragStart(e){const t=this.window.current;this.offY=e.clientY-parseInt(t.offsetTop),this.offX=e.clientX-parseInt(t.offsetLeft),document.addEventListener("mousemove",this.onDrag,!0)}onDrag(e){const t=this.window.current;t.style.position="fixed",t.style.top=e.clientY-this.offY+"px",t.style.left=e.clientX-this.offX+"px"}componentWillUnmount(){this.titlebar.current.removeEventListener("mousedown",this.onDragStart,!1),document.removeEventListener("mouseup",this.onDragStop,!1)}render(){const e=this.props.center?pt.height/2-this.props.height/2:this.props.top,t=this.props.center?pt.width/2-this.props.width/2:this.props.left,s=`floating-window${` ${this.props.className}`||""}${this.props.resizable?" resizable":""}${this.state.modalOpen?" modal-open":""}`,n={height:this.props.height,width:this.props.width,left:t||0,top:e||0};return M.createElement("div",{id:this.props.id,className:s,ref:this.window,style:n},M.createElement("div",{className:"floating-window-titlebar",ref:this.titlebar},M.createElement("span",{className:"title"},this.props.title),M.createElement("div",{className:"floating-window-buttons"},M.createElement("div",{className:"button close-button",onClick:this.close},M.createElement(J,null)))),M.createElement("div",{className:"floating-window-content"},this.props.children))}async close(){let e=!0;("function"==typeof this.props.confirmClose?this.props.confirmClose():this.props.confirmClose)&&(this.setState({modalOpen:!0}),e=await this.confirmClose(),this.setState({modalOpen:!1})),this.props.close&&e&&this.props.close()}confirmClose(){return new Promise(e=>{U.showConfirmationModal("Are You Sure?",this.props.confirmationText,{danger:!0,confirmText:"Close",onConfirm:()=>{e(!0)},onCancel:()=>{e(!1)}})})}}function gt(){return(gt=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var n in s)Object.prototype.hasOwnProperty.call(s,n)&&(e[n]=s[n])}return e}).apply(this,arguments)}const ft=M.createRef(),bt=M.createElement(class extends M.Component{constructor(e){super(e),this.state={windows:[]}}render(){return this.state.windows.map(e=>M.createElement(mt,gt({},e,{close:this.close.bind(this,e.id)}),e.children))}open(e){this.setState({windows:[...this.state.windows,e]})}close(e){this.setState({windows:this.state.windows.filter(t=>(t.id==e&&t.onClose&&t.onClose(),t.id!=e))})}static get id(){return"floating-windows"}static get root(){if(this._root)return this._root;const e=document.createElement("div");return e.id=this.id,document.body.append(e),this._root=e}},{ref:ft}),yt=u.findInReactTree(u.getReactInstance(document.querySelector(".app-19_DXt")),e=>e&&e.type&&e.type.displayName&&"App"==e.type.displayName);m.after("FloatingContainer",yt.type.prototype,"render",(e,t,s)=>{u.findInRenderTree(s,e=>e&&e[5]&&e[5].type&&"LayerContainer"==e[5].type.displayName,{walkable:["children","props"]}).push(bt)}),yt.stateNode.forceUpdate();var vt=ft.current;const wt=s(0),Ct=s(1),St=c.getByProps("updateAccount"),Et=c.getByProps("dirtyDispatch"),Pt=c.getByProps("ActionTypes").ActionTypes;var kt=new class extends Ce{get name(){return"Custom CSS"}get category(){return"customcss"}get id(){return"customcss"}get startDetached(){return C.get(this.collection,this.category,"startDetached")}get nativeOpen(){return C.get(this.collection,this.category,"nativeOpen")}constructor(){super(),this.savedCss="",this.insertedCss="",this.isDetached=!1}async enabled(){window.ace||S.injectScript("ace-script","https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js").then(()=>{window.require.original&&(window.require=window.require.original)}),C.registerPanel(this.id,this.name,{order:2,element:()=>[M.createElement(G,{text:"Custom CSS Editor"}),M.createElement(ut,{css:this.savedCss,save:this.saveCSS.bind(this),update:this.insertCSS.bind(this),openNative:this.openNative.bind(this),openDetached:this.openDetached.bind(this),onChange:this.onChange.bind(this)})],onClick:e=>{this.isDetached||(this.nativeOpen?this.openNative():this.startDetached?this.openDetached():e._reactInternalFiber.child.memoizedProps.children.props.onSetSection(this.name),this.setSection=e._reactInternalFiber.child.memoizedProps.children.props.onSetSection)}}),this.loadCSS(),this.insertCSS(this.savedCss),this.watchContent()}disabled(){C.removePanel(this.id),this.unwatchContent()}watchContent(){if(this.watcher)return this.error("Already watching content.");const e={};this.log("Starting to watch content."),this.watcher=wt.watch(y.customCSS,{persistent:!1},async(t,s)=>{if(!t||!s)return;await new Promise(e=>setTimeout(e,50));try{wt.statSync(y.customCSS)}catch(t){if("ENOENT"!==t.code)return;delete e[s],this.saveCSS("")}const n=wt.statSync(y.customCSS);if(n&&n.mtime&&n.mtime.getTime()&&"number"==typeof n.mtime.getTime()&&e[s]!=n.mtime.getTime()&&(e[s]=n.mtime.getTime(),"change"==t)){const e=y.loadCustomCSS();if(e==this.savedCss)return;this.savedCss=e,this.insertCSS(this.savedCss),w.emit("customcss-updated",this.savedCss)}})}unwatchContent(){if(!this.watcher)return this.error("Was not watching content.");this.watcher.close(),delete this.watcher,this.log("No longer watching content.")}onChange(e){C.get("settings","customcss","liveUpdate")&&(this.insertCSS(e),this.saveCSS(e))}loadCSS(){this.savedCss=y.loadCustomCSS()}insertCSS(e){void 0===e?e=this.insertedCss:this.insertedCss=e,S.updateCustomCSS(e)}saveCSS(e){void 0!==e&&(this.savedCss=e),y.saveCustomCSS(this.savedCss)}openNative(){Ct.shell.openExternal(`file://${y.customCSS}`)}openDetached(e){const t=M.createRef(),s=M.createElement(ut,{id:"bd-floating-editor",ref:t,css:e,save:this.saveCSS.bind(this),update:this.insertCSS.bind(this),openNative:this.openNative.bind(this),onChange:this.onChange.bind(this)});vt.open({onClose:()=>{this.isDetached=!1},onResize:()=>{t&&t.current&&t.current.resize&&t.current.resize()},title:"Custom CSS Editor",id:"floating-editor-window",height:470,width:410,center:!0,resizable:!0,children:s,confirmClose:()=>!(!t||!t.current)&&t.current.hasUnsavedChanges,confirmationText:"You have unsaved changes to your Custom CSS. Closing this window will lose all those changes."}),this.isDetached=!0,St.close(),Et.dirtyDispatch({type:Pt.LAYER_POP})}};const xt=p.GuildClasses;function Dt(){}Dt.prototype.setConfig=function(e){Object.assign(i,e)},Dt.prototype.init=async function(){if(i.version<i.minSupportedVersion)return void U.alert("Not Supported","BetterDiscord v"+i.version+" (your version) is not supported by the latest js ("+i.bbdVersion+").<br><br> Please download the latest version from <a href='https://github.com/rauenzi/BetterDiscordApp/releases/latest' target='_blank'>GitHub</a>");y.initialize(),D.initialize(),h.log("Startup","Initializing Settings"),C.initialize(),S.initialize(),await this.waitForGuilds(),N.initialize();for(const e in n)n[e].initialize();h.log("Startup","Loading Plugins");const e=ye.initialize();h.log("Startup","Loading Themes");const t=we.initialize();h.log("Startup","Removing Loading Icon"),document.getElementsByClassName("bd-loaderv2")[0].remove(),h.log("Startup","Collecting Startup Errors"),U.showContentErrors({plugins:e,themes:t})},Dt.prototype.waitForGuilds=function(){return new Promise(e=>{const t=function(){"complete"!=document.readyState&&setTimeout(t,100);const s=xt.wrapper.split(" ")[0],n=xt.listItem.split(" ")[0],o=xt.blobContainer.split(" ")[0];if(document.querySelectorAll(`.${s} .${n} .${o}`).length>0)return e(i.deferLoaded=!0);setTimeout(t,100)};t()})};var Mt=new Dt;const Tt={get React(){return p.React},get ReactDOM(){return p.ReactDOM},get WindowConfigFile(){if(this._windowConfigFile)return this._windowConfigFile;const e=s(1).remote.app,t=s(2),n=e.getAppPath(),i=e.getPath("userData"),o=t.resolve(i,e.getVersion(),"modules","discord_desktop_core","injector","config.json"),r=t.resolve(n,"..","app","config.json"),a=s(0),l=a.existsSync(r)?r:a.existsSync(o)?o: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),i=this.getAllWindowPreferences();i[e]=t,delete s.c[this.WindowConfigFile],n.writeFileSync(this.WindowConfigFile,JSON.stringify(i,null,4))},injectCSS:function(e,t){S.injectStyle(e,t)},clearCSS:function(e){S.removeStyle(e)},linkJS:function(e,t){return S.injectScript(e,t)},unlinkJS:function(e){S.removeScript(e)},alert:function(e,t){U.alert(e,t)},showConfirmationModal:function(e,t,s={}){return U.showConfirmationModal(e,t,s)},showToast:function(e,t={}){A.show(e,t)},findModule:function(e){return c.getModule(e)},findAllModules:function(e){return c.getModule(e,!1)},findModuleByProps:function(...e){return c.getByProps(...e)},findModuleByPrototypes:function(...e){return c.getByPrototypes(...e)},findModuleByDisplayName:function(e){return c.getByDisplayName(e)},getInternalInstance:function(e){if(e instanceof window.jQuery||e instanceof Element)return e instanceof jQuery&&(e=e[0]),u.getReactInstance(e)},loadData:function(e,t){return y.getPluginData(e,t)}};Tt.getData=Tt.loadData,Tt.saveData=function(e,t,s){return y.setPluginData(e,t,s)},Tt.setData=Tt.saveData,Tt.deleteData=function(e,t){return y.deletePluginData(e,t)},Tt.monkeyPatch=function(e,t,s){return u.monkeyPatch(e,t,s)},Tt.onRemoved=function(e,t){return u.onRemoved(e,t)},Tt.suppressErrors=function(e,t){return u.suppressErrors(e,t)},Tt.testJSON=function(e){return u.testJSON(e)},Tt.getBDData=function(e){return y.getBDData(e)},Tt.setBDData=function(e,t){return y.setBDData(e,t)};var Nt=Tt,Bt={en:{Settings:{PublicServers:{name:"Public Servers",description:"Display public servers button"},MinimalMode:{name:"Minimal Mode",description:"Hide elements and reduce the size of elements."},VoiceMode:{name:"Voice Mode",description:"Only show voice chat"},HideChannels:{name:"Hide Channels",description:"Hide channels in minimal mode"},DarkMode:{name:"Dark Mode",description:"Make certain elements dark by default"},VoiceDisconnect:{name:"Voice Disconnect",description:"Disconnect from voice server when closing Discord"},Timestamps:{name:"24 Hour Timestamps",description:"Replace 12hr timestamps with proper ones"},ColoredText:{name:"Colored Text",description:"Make text colour the same as role colour"},BDBlue:{name:"BandagedBD Blue",description:"Replace Discord blue with BD Blue"},DeveloperMode:{name:"Developer Mode",description:"Developer Mode"},ContentErrors:{name:"Content Error Modals",description:"Shows a modal with plugin/theme errors"},Toasts:{name:"Show Toasts",description:"Shows a small notification for important information"},Scroll:{name:"Scroll to Settings",description:"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)"},AnimateOnHover:{name:"Animate On Hover",description:"Only animate the emote modifiers on hover"},CopySelector:{name:"Copy Selector",description:'Adds a "Copy Selector" option to context menus when developer mode is active'},DownloadEmotes:{name:"Download Emotes",description:"Download emotes when the cache is expired"},NormalizeClasses:{name:"Normalize Classes",description:"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)"},AutomaticLoading:{name:"Automatic Loading",description:"Automatically loads, reloads, and unloads plugins and themes"},Transparency:{name:"Enable Transparency",description:"Enables the main window to be see-through (requires restart)"},Twitch:{name:"Twitch Emotes",description:"Show Twitch emotes"},FFZ:{name:"FrankerFaceZ Emotes",description:"Show FrankerFaceZ Emotes"},BTTV:{name:"BetterTTV Emotes",description:"Show BetterTTV Emotes"},EmoteMenu:{name:"Emote Menu",description:"Show Twitch/Favourite emotes in emote menu"},EmojiMenu:{name:"Emoji Menu",description:"Show Discord emoji menu"},AutoCaps:{name:"Auto Capitalization",description:"Autocapitalize emote commands"},ShowNames:{name:"Show Names",description:"Show emote names on hover"},Modifiers:{name:"Emote Modifiers",description:"Enable emote mods (flip, spin, pulse, spin2, spin3, 1spin, 2spin, 3spin, tr, bl, br, shake, shake2, shake3, flap)"}}},es:{Settings:{PublicServers:{name:"Public Sefasasfasfasfrvers",description:"Display public servers button"},MinimalMode:{name:"Minafimal Mode",description:"Hide elements and reduce the size of elements."}}}};const{Dispatcher:jt,DiscordConstants:Lt}=p,Ft={};let At="en";u.extend(Ft,Bt[At]),jt.subscribe(Lt.ActionTypes.USER_SETTINGS_UPDATE,({settings:e})=>{const t=e.locale;t&&t!=At&&function(e){At=e,u.extend(Ft,Bt[At])}(t.split("-")[0])});var Ot=new Proxy(Ft,{get:function(e,t){return e.hasOwnProperty(t)?e[t]:new Proxy({},{get:function(){return`String group "${t}" not found.`}})}});s.d(t,"default",function(){return Rt});const $t=document.createElement("div");$t.className="bd-loaderv2",$t.title="BandagedBD is loading...",document.body.appendChild($t),window.BdApi=Nt,window.pluginModule=ye,window.themeModule=we,window.bdEmotes=Ze.Emotes,window.bemotes=Ze.blacklist,window.settingsModule=C,window.DataStore=y,window.DomManager=S,window.utils=u,window.Components=D,window.BDEvents=w,window.bdConfig=i,window.Strings=Ot;class Rt{constructor(e){Mt.setConfig(e)}init(){Mt.init()}}!function(){const e=s(3),t=e._load;e._load=function(e){return"betterdiscord"!==e&&!e.startsWith("betterdiscord/")||"api"!=e.substr("betterdiscord/".length)?t.apply(this,arguments):Nt}}()}]).default;