From 7322ea8ba92847d90ff2afe5ab2d8d17e2913954 Mon Sep 17 00:00:00 2001 From: Zack Rauen Date: Tue, 9 Jan 2018 21:13:44 -0500 Subject: [PATCH] patch react, react-dom and layer changes --- js/main.js | 63 +++++-- js/main.min.js | 473 +++++++++++++------------------------------------ 2 files changed, 180 insertions(+), 356 deletions(-) diff --git a/js/main.js b/js/main.js index 86e99d6..4f01d3f 100644 --- a/js/main.js +++ b/js/main.js @@ -1043,7 +1043,7 @@ class PublicServers { show() { let self = this; - $(".layers").append(self.layer); + $(".layers, .layers-20RVFW").append(self.layer); //self.search("", true); } @@ -2032,13 +2032,13 @@ SettingsPanel.prototype.inject = function(mutation) { SettingsPanel.prototype.injectNew = function(mutation) { let self = this; - if(!mutation.target.classList.contains("layers")) return; + if(!mutation.target.classList.contains("layers") && !mutation.target.classList.contains("layers-20RVFW")) return; if($(".guild-settings-base-section").length) { try { mutation.addedNodes[0].setAttribute('layer-id', 'server-settings'); }catch(err) {} } - if(!$(".user-settings-account").length) return; + if(!$(".socialLinks-1oZoF3").length) return; try { mutation.addedNodes[0].setAttribute('layer-id', 'user-settings'); }catch(err) {} @@ -3142,11 +3142,52 @@ window.bdtemp = { class V2 { constructor() { + // Webpack modules from Samogot + this.WebpackModules = (() => { + const req = webpackJsonp([], { + '__extra_id__': (module, exports, req) => exports.default = req + }, ['__extra_id__']).default; + delete req.m['__extra_id__']; + delete req.c['__extra_id__']; + const find = (filter, options = {}) => { + const {cacheOnly = true} = options; + for (let i in req.c) { + if (req.c.hasOwnProperty(i)) { + let m = req.c[i].exports; + if (m && m.__esModule && m.default && filter(m.default)) return m.default; + if (m && filter(m)) return m; + } + } + if (cacheOnly) { + console.warn('Cannot find loaded module in cache'); + return null; + } + console.warn('Cannot find loaded module in cache. Loading all modules may have unexpected side effects'); + for (let i = 0; i < req.m.length; ++i) { + try { + let m = req(i); + if (m && m.__esModule && m.default && filter(m.default)) return m.default; + if (m && filter(m)) return m; + } + catch (e) { + console.error(e); + } + } + console.warn('Cannot find module'); + return null; + }; + + const findByUniqueProperties = (propNames, options) => find(module => propNames.every(prop => module[prop] !== undefined), options); + const findByDisplayName = (displayName, options) => find(module => module.displayName === displayName, options); + + return {find, findByUniqueProperties, findByDisplayName}; + })(); + this.internal = { - 'react': require('react'), - 'react-dom': require('react-dom') + 'react': this.WebpackModules.findByUniqueProperties(['Component', 'PureComponent', 'Children', 'createElement', 'cloneElement']), + 'react-dom': this.WebpackModules.findByUniqueProperties(['findDOMNode']) }; - } +} get reactComponent() { return this.internal['react'].Component; @@ -4129,7 +4170,7 @@ class V2C_Layer extends BDV2.reactComponent { render() { return BDV2.react.createElement( "div", - { className: "layer", id: this.props.id, ref: "root" }, + { className: "layer layer-kosS71", id: this.props.id, ref: "root" }, this.props.children ); } @@ -4763,8 +4804,8 @@ class V2_PublicServers { } injectRoot() { - if (!$(".layers").length) return false; - $(".layers").append($("", { + if (!$(".layers, .layers-20RVFW").length) return false; + $(".layers, .layers-20RVFW").append($("", { id: 'pubslayerroot' })); return true; @@ -4854,8 +4895,8 @@ class V2_SettingsPanel { } injectRoot() { - if (!$(".layer .ui-standard-sidebar-view").length) return false; - $(".layer .ui-standard-sidebar-view").append($("
", { + if (!$(".layer .ui-standard-sidebar-view, .layer-kosS71 .ui-standard-sidebar-view").length) return false; + $(".layer .ui-standard-sidebar-view, .layer-kosS71 .ui-standard-sidebar-view").append($("
", { class: 'content-region', id: 'bd-settingspane-container' })); diff --git a/js/main.min.js b/js/main.min.js index 3dd4f3f..b5d1e4c 100644 --- a/js/main.min.js +++ b/js/main.min.js @@ -1,345 +1,128 @@ -(function(){let __fs=window.require("fs");let __process=window.require("process");let __platform=__process.platform;let __dataPath=(__platform==='win32'?__process.env.APPDATA:__platform==='darwin'?__process.env.HOME+'/Library/Preferences':process.env.HOME+'/.config')+'/BetterDiscord/';let __data={};if(__fs.existsSync(`${__dataPath}localStorage.json`)){try{__data=JSON.parse(__fs.readFileSync(`${__dataPath}localStorage.json`))}catch(err){console.log(err);}}else if(__fs.existsSync("localStorage.json")){try{__data=JSON.parse(__fs.readFileSync("localStorage.json"));}catch(err){console.log(err);}} -var __ls=__data;__ls.setItem=function(i,v){__ls[i]=v;this.save();};__ls.getItem=function(i){return __ls[i]||null;};__ls.save=function(){__fs.writeFileSync(`${__dataPath}/localStorage.json`,JSON.stringify(this),null,4);};var __proxy=new Proxy(__ls,{set:function(target,name,val,receiver){__ls[name]=val;__ls.save();},get:function(target,name,receiver){return __ls[name]||null;}});window.localStorage=__proxy;})();(()=>{let v2Loader=document.createElement('div');v2Loader.className="bd-loaderv2";v2Loader.title="BetterDiscord is loading...";document.body.appendChild(v2Loader);})();window.bdStorage={};window.bdStorage.get=function(i){return betterDiscordIPC.sendSync('synchronous-message',{'arg':'storage','cmd':'get','var':i});};window.bdStorage.set=function(i,v){betterDiscordIPC.sendSync('synchronous-message',{'arg':'storage','cmd':'set','var':i,'data':v});};window.bdPluginStorage={};window.bdPluginStorage.get=function(pn,i){return betterDiscordIPC.sendSync('synchronous-message',{'arg':'pluginstorage','cmd':'get','pn':pn,'var':i});};window.bdPluginStorage.set=function(pn,i,v){betterDiscordIPC.sendSync('synchronous-message',{'arg':'pluginstorage','cmd':'set','pn':pn,'var':i,'data':v});};betterDiscordIPC.on('asynchronous-reply',(event,arg)=>{console.log(event);console.log(arg);});var settingsPanel,emoteModule,utils,quickEmoteMenu,opublicServers,voiceMode,pluginModule,themeModule,customCssEditor,dMode;var jsVersion=1.792;var supportedVersion="0.2.81";var mainObserver;var twitchEmoteUrlStart="https://static-cdn.jtvnw.net/emoticons/v1/";var twitchEmoteUrlEnd="/1.0";var ffzEmoteUrlStart="https://cdn.frankerfacez.com/emoticon/";var ffzEmoteUrlEnd="/1";var bttvEmoteUrlStart="https://cdn.betterttv.net/emote/";var bttvEmoteUrlEnd="/1x";var mainCore;var settings={"Save logs locally":{"id":"bda-gs-0","info":"Saves chat logs locally","implemented":false,"hidden":false,"cat":"core"},"Public Servers":{"id":"bda-gs-1","info":"Display public servers button","implemented":true,"hidden":false,"cat":"core"},"Minimal Mode":{"id":"bda-gs-2","info":"Hide elements and reduce the size of elements.","implemented":true,"hidden":false,"cat":"core"},"Voice Mode":{"id":"bda-gs-4","info":"Only show voice chat","implemented":true,"hidden":false,"cat":"core"},"Hide Channels":{"id":"bda-gs-3","info":"Hide channels in minimal mode","implemented":true,"hidden":false,"cat":"core"},"Dark Mode":{"id":"bda-gs-5","info":"Make certain elements dark by default(wip)","implemented":true,"hidden":false,"cat":"core"},"Override Default Emotes":{"id":"bda-es-5","info":"Override default emotes","implemented":false,"hidden":false,"cat":"core"},"Voice Disconnect":{"id":"bda-dc-0","info":"Disconnect from voice server when closing Discord","implemented":true,"hidden":false,"cat":"core"},"Custom css live update":{"id":"bda-css-0","info":"","implemented":true,"hidden":true,"cat":"core"},"Custom css auto udpate":{"id":"bda-css-1","info":"","implemented":true,"hidden":true,"cat":"core"},"24 Hour Timestamps":{"id":"bda-gs-6","info":"Replace 12hr timestamps with proper ones","implemented":true,"hidden":false,"cat":"core"},"Coloured Text":{"id":"bda-gs-7","info":"Make text colour the same as role colour","implemented":true,"hidden":false,"cat":"core"},"BetterDiscord Blue":{"id":"bda-gs-b","info":"Replace Discord blue with BD Blue","implemented":true,"hidden":false,"cat":"core"},"Developer Mode":{"id":"bda-gs-8","info":"Developer Mode","implemented":true,"hidden":false,"cat":"core"},"Twitch Emotes":{"id":"bda-es-7","info":"Show Twitch emotes","implemented":true,"hidden":false,"cat":"emote"},"FrankerFaceZ Emotes":{"id":"bda-es-1","info":"Show FrankerFaceZ Emotes","implemented":true,"hidden":false,"cat":"emote"},"BetterTTV Emotes":{"id":"bda-es-2","info":"Show BetterTTV Emotes","implemented":true,"hidden":false,"cat":"emote"},"Emote Menu":{"id":"bda-es-0","info":"Show Twitch/Favourite emotes in emote menu","implemented":true,"hidden":false,"cat":"emote"},"Emoji Menu":{"id":"bda-es-9","info":"Show Discord emoji menu","implemented":true,"hidden":false,"cat":"emote"},"Emote Autocomplete":{"id":"bda-es-3","info":"Autocomplete emote commands","implemented":false,"hidden":false,"cat":"emote"},"Emote Auto Capitalization":{"id":"bda-es-4","info":"Autocapitalize emote commands","implemented":true,"hidden":false,"cat":"emote"},"Show Names":{"id":"bda-es-6","info":"Show emote names on hover","implemented":true,"hidden":false,"cat":"emote"},"Show emote modifiers":{"id":"bda-es-8","info":"Enable emote mods","implemented":true,"hidden":false,"cat":"emote"},};var links={"Jiiks.net":{"text":"Jiiks.net","href":"thtp://jiiks.net","target":"_blank"},"twitter":{"text":"Twitter","href":"http://twitter.com/jiiksi","target":"_blank"},"github":{"text":"Github","href":"http://github.com/jiiks","target":"_blank"}};var defaultCookie={"version":jsVersion,"bda-gs-0":false,"bda-gs-1":true,"bda-gs-2":false,"bda-gs-3":false,"bda-gs-4":false,"bda-gs-5":true,"bda-gs-6":false,"bda-gs-7":false,"bda-gs-8":false,"bda-es-0":true,"bda-es-1":true,"bda-es-2":true,"bda-es-3":false,"bda-es-4":false,"bda-es-5":true,"bda-es-6":true,"bda-es-7":true,"bda-gs-b":true,"bda-es-8":true,"bda-jd":true,"bda-es-8":true,"bda-dc-0":false,"bda-css-0":false,"bda-css-1":false,"bda-es-9":true};var bdchangelog={"changes":{"0a":{"title":"1.78 : Temp support for new settingspanel","text":"Added temp support for Discord's new settingspanel until v2.","img":""},"0b":{"title":"1.78 : Public Servers","text":"New look and flow for public servers","img":""},"0c":{"title":"1.78 : New loading icon","text":"New loading icon will now display in bottom right when BD is loading.","img":""},"0d":{"title":"1.78 : New CustomCSS editor look","text":"Updated CustomCSS editor with dark theme","img":""},"0e":{"title":"1.78 : BetterDiscord Blue","text":"Replace Discord blue with BetterDiscord blue!","img":""}},"fixes":{"0a":{"title":"1.792 : Fixed settingspanel injection","text":"Still has some minor bugs","img":""},"0b":{"title":"1.791 : Restored Buttons","text":"Restored Open Theme Folder and Open Plugin Folder buttons","img":""},"0c":{"title":"1.79 : Settings Saving","text":"Fixed settings not saving with new settings panel","img":""}}};var settingsCookie={};function Core(){} -Core.prototype.init=function(){var self=this;var lVersion=(typeof(version)==="undefined")?bdVersion:version;if(lVersion
Please download the latest version from BetterDiscord.net");return;} -utils=new Utils();var sock=new BdWSocket();sock.start();utils.getHash();emoteModule=new EmoteModule();quickEmoteMenu=new QuickEmoteMenu();voiceMode=new VoiceMode();dMode=new devMode();emoteModule.init();this.initSettings();this.initObserver();function gwDefer(){console.log(new Date().getTime()+" Defer");if($(".guilds-wrapper .guilds").children().length>0){console.log(new Date().getTime()+" Defer Loaded");var guilds=$(".guilds>li:first-child");var showChannelsButton=$("'+'
'+'
'+'
';if(bdchangelog.changes!=null){changeLog+=''+'

'+' New Stuff'+'

'+'
    ';for(var change in bdchangelog.changes){change=bdchangelog.changes[change];changeLog+=''+'
  • '+' '+change.title+''+'
    '+change.text+'
    '+'
  • ';} -changeLog+='
';} -if(bdchangelog.fixes!=null){changeLog+=''+'

'+' Fixed'+'

'+'
    ';for(var fix in bdchangelog.fixes){fix=bdchangelog.fixes[fix];changeLog+=''+'
  • '+' '+fix.title+''+'
    '+fix.text+'
    '+'
  • ';} -changeLog+='
';} -if(bdchangelog.upcoming!=null){changeLog+=''+'

'+' Coming Soon'+'

'+'
    ';for(var upc in bdchangelog.upcoming){upc=bdchangelog.upcoming[upc];changeLog+=''+'
  • '+' '+upc.title+''+'
    '+upc.text+'
    '+'
  • ';} -changeLog+='
';} -changeLog+=''+'
'+'
'+' '+'
'+' '+'';return changeLog;};Core.prototype.alert=function(title,text){var id='';for(var i=0;i<5;i++) -id+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(Math.floor(Math.random()*"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".length));var bdAlert=' ';$("body").append(bdAlert);utils.addBackdrop(id);};var emotesFfz={};var emotesBTTV={};var emotesTwitch={"emote":{"id":0}};var subEmotesTwitch={};function EmoteModule(){} -EmoteModule.prototype.init=function(){};EmoteModule.prototype.getBlacklist=function(){$.getJSON("https://cdn.rawgit.com/Jiiks/betterDiscordApp/"+_hash+"/data/emotefilter.json",function(data){bemotes=data.blacklist;});};EmoteModule.prototype.obsCallback=function(mutation){var self=this;for(var i=0;i-1){w=w.replace("[!s]","");parent.data("spoilered",false);parent.addClass("spoiler");} -var allowedClasses=["flip","spin","pulse","spin2","spin3","1spin","2spin","3spin","tr","bl","br","shake","shake2","shake3","flap"];var useEmoteClass=false;var emoteClass="";var skipffz=false;var sw=w;if(w.indexOf(":")>-1){var split=w.split(":");if(split[0]!=""&&split[1]!=""){if(allowedClasses.indexOf(split[1])>-1){sw=split[0];emoteClass=settingsCookie["bda-es-8"]?"emote"+split[1]:"";} -if(split[1]=="bttv"){sw=split[0];skipffz=true;}}} -if($.inArray(sw,bemotes)==-1){if(typeof emotesTwitch!=='undefined'&&settingsCookie["bda-es-7"]){if(emotesTwitch.hasOwnProperty(sw)&&sw.length>=4){if(text!=null){contents.splice(i+splice++,0,document.createTextNode(text));text=null;} -var url=twitchEmoteUrlStart+emotesTwitch[sw].id+twitchEmoteUrlEnd;contents.splice(i+splice++,0,self.createEmoteElement(sw,url,emoteClass));doInject=true;return;}} -if(typeof subEmotesTwitch!=='undefined'&&settingsCookie["bda-es-7"]){if(subEmotesTwitch.hasOwnProperty(sw)&&sw.length>=4){if(text!=null){contents.splice(i+splice++,0,document.createTextNode(text));text=null;} -var url=twitchEmoteUrlStart+subEmotesTwitch[sw]+twitchEmoteUrlEnd;contents.splice(i+splice++,0,self.createEmoteElement(sw,url,emoteClass));doInject=true;return;}} -if(typeof emotesBTTV!=='undefined'&&settingsCookie["bda-es-2"]){if(emotesBTTV.hasOwnProperty(sw)&&sw.length>=4){if(text!=null){contents.splice(i+splice++,0,document.createTextNode(text));text=null;} -var url=emotesBTTV[sw];contents.splice(i+splice++,0,self.createEmoteElement(sw,url,emoteClass));doInject=true;return;}} -if((typeof emotesFfz!=='undefined'&&settingsCookie["bda-es-1"])&&(!skipffz||!emotesBTTV2.hasOwnProperty(sw))){if(emotesFfz.hasOwnProperty(sw)&&sw.length>=4){if(text!=null){contents.splice(i+splice++,0,document.createTextNode(text));text=null;} -var url=ffzEmoteUrlStart+emotesFfz[sw]+ffzEmoteUrlEnd;contents.splice(i+splice++,0,self.createEmoteElement(sw,url,emoteClass));doInject=true;return;}} -if(typeof emotesBTTV2!=='undefined'&&settingsCookie["bda-es-2"]){if(emotesBTTV2.hasOwnProperty(sw)&&sw.length>=4){if(text!=null){contents.splice(i+splice++,0,document.createTextNode(text));text=null;} -var url=bttvEmoteUrlStart+emotesBTTV2[sw]+bttvEmoteUrlEnd;if(skipffz&&emotesFfz.hasOwnProperty(sw))sw=sw+":bttv";contents.splice(i+splice++,0,self.createEmoteElement(sw,url,emoteClass));doInject=true;return;}}} -if(text==null){text=w;}else{text+=""+w;} -if(index===a.length-1){contents.splice(i+splice,0,document.createTextNode(text));}});if(doInject){var oldHeight=parent.outerHeight();parent.html(contents);var scrollPane=$(".scroller.messages").first();scrollPane.scrollTop(scrollPane.scrollTop()+(parent.outerHeight()-oldHeight));}});} -inject();if(parent.children().hasClass("edited")){setTimeout(inject,250);}};EmoteModule.prototype.createEmoteElement=function(word,url,mod){var len=Math.round(word.length / 4);var name=word.substr(0,len)+"\uFDD9"+word.substr(len,len)+"\uFDD9"+word.substr(len*2,len)+"\uFDD9"+word.substr(len*3);var html=''+name+'';return $.parseHTML(html.replace(new RegExp("\uFDD9","g"),""))[0];};EmoteModule.prototype.autoCapitalize=function(){var self=this;$('body').delegate($(".channel-text-area-default textarea:first"),'keyup change paste',function(){if(!settingsCookie["bda-es-4"])return;var text=$(".channel-text-area-default textarea:first").val();if(text==undefined)return;var lastWord=text.split(" ").pop();if(lastWord.length>3){if(lastWord=="danSgame")return;var ret=self.capitalize(lastWord.toLowerCase());if(ret!==null&&ret!==undefined){$(".channel-text-area-default textarea:first").val(text.replace(lastWord,ret));}}});};EmoteModule.prototype.capitalize=function(value){var res=emotesTwitch;for(var p in res){if(res.hasOwnProperty(p)&&value==(p+'').toLowerCase()){return p;}}};class PublicServers{constructor(){this.v2p=new V2_PublicServers();} -get endPoint(){return'https://search.discordservers.com';} -get button(){let self=this;let btn=$("
",{class:'guild',id:'bd-pub-li',css:{'height':'20px','display':settingsCookie['bda-gs-1']?"":"none"}}).append($("
",{class:'guild-inner',css:{'height':'20px','border-radius':'4px'}}).append($("",{}).append($("
",{text:'public',id:'bd-pub-button',css:{'line-height':'20px','font-size':'12px'},click:()=>{self.v2p.render();}}))));return btn;} -init(){let self=this;let guilds=$(".guilds>:first-child");guilds.after(self.button);} -get layer(){let self=this;let layer=``;layer=$(layer);layer.on("blur",e=>{if(e.relatedTarget.id==='bd-pubs-search')return;layer.focus();console.log("blur:");console.log(e);});layer.on("keydown",e=>{if(e.which===13&&e.target.id==='bd-pubs-search'){let category=$("#bd-pubs-layer .ui-tab-bar-item.selected").text();if(category==='All')category='';self.search(self.query({'term':e.target.value,'category':category}),true);return;} -if(e.which!==27)return;self.hide();});layer.find('.btn-close').on('click',e=>{self.hide();});layer.find('.ui-tab-bar.SIDE .ui-tab-bar-item').on('click',e=>{let category=e.target.textContent;if(category==='All')category='';self.search(self.query({'term':$("#bd-pubs-search").val(),'category':category}),true);});return layer;} -serverCard(serverInfo){return`
${serverInfo.name}
${serverInfo.online}/${serverInfo.members}Members
${serverInfo.description}
${serverInfo.categories.join(" ,")}
`;} -get bdServerCard(){let serverInfo={'name':'BetterDiscord','icon':'https://cdn.discordapp.com/icons/86004744966914048/c8d49dc02248e1f55caeb897c3e1a26e.webp','online':'7500+','members':'20000+','description':'Official BetterDiscord support server'};return`
${serverInfo.name}
Too many members
${serverInfo.description}
`;} -getPanel(){console.log("pubs get panel");return'
';} -getPinnedServer(){console.log("pubs get pinned server");return'
';} -hidePinnedServer(){console.log("pubs hide pinned server");} -showPinnedServer(){console.log("pubs show pinned server");} -show(){let self=this;$(".layers").append(self.layer);} -hide(){$("#bd-pubs-layer").remove();} -loadServers(dataset,search,clear){console.log("pubs load servers");} -search(query,clear){let self=this;let $list=$("#bd-pubs-listing");if(clear){$list.empty();$("#bd-pubs-listing-container").hide();$("#bd-pubs-bg-spinner").show();} -$.ajax({method:'GET',url:`${self.endPoint}?${query}`,success:data=>{$list.append(self.bdServerCard);data.results.map(server=>{$list.append(self.serverCard(server));});$("#bd-pubs-listing-container").show();$("#bd-pubs-bg-spinner").hide();self.setSearchText(1,$(".bd-server-card").size(),data.total,null,$("#bd-pubs-search").val());}});} -setSearchText(start,end,total,category,term){if(!category)category=$("#bd-pubs-layer .ui-tab-bar-item.selected").text();let text=`Showing ${start}-${end}of ${total}results in ${category}`;if(term&&term.length)text+=`for:${term}`;$("#bd-pubs-results").text(text);} -get next(){let self=this;if(!self.next)return null;} -joinServer(code){console.log("pubs join");} -joinServerDirect(code){console.log("pubs join direct");} -escape(unsafe){console.log("pubs escape");} -query(params){return require('querystring').stringify(params);}} -function QuickEmoteMenu(){} -QuickEmoteMenu.prototype.init=function(){$(document).on("mousedown",function(e){if(e.target.id!="rmenu")$("#rmenu").remove();});this.favoriteEmotes={};var fe=bdStorage.get("bdfavemotes");if(fe!==""&&fe!==null){this.favoriteEmotes=JSON.parse(atob(fe));} -var qmeHeader="";qmeHeader+="
";qmeHeader+=" ";attachEditor+=" <\/div>";attachEditor+="<\/div>";this.attachEditor=attachEditor;$("#bd-customcss-innerpane").append(attachEditor);$("#bd-customcss-detached-update").on("click",function(){self.applyCustomCss(self.editor.getValue(),true,false);return false;});$("#bd-customcss-detached-save").on("click",function(){self.applyCustomCss(self.editor.getValue(),false,true);return false;});var detachEditor="";detachEditor+="
";detachEditor+="
";detachEditor+=" <\/div>";detachEditor+="<\/div>";this.detachedEditor=detachEditor;};CustomCssEditor.prototype.attach=function(){$("#editor-detached").hide();$("#app-mount").removeClass("bd-detached-editor");$("#bd-customcss-pane").append($("#bd-customcss-innerpane"));$("#bd-customcss-detached-detach").show();$("#bd-customcss-detach-container").remove();};CustomCssEditor.prototype.detach=function(){var self=this;this.attach();$("#editor-detached").show();$("#bd-customcss-detached-detach").hide();$("#app-mount").addClass("bd-detached-editor");$(".app").parent().append(this.detachedEditor);$("#bd-customcss-detach-editor").append($("#bd-customcss-innerpane"));};CustomCssEditor.prototype.applyCustomCss=function(css,forceupdate,forcesave){if($("#customcss").length==0){$("head").append('');} -if(forceupdate||settingsCookie["bda-css-0"]){$("#customcss").html(css);} -if(forcesave){window.bdStorage.set("bdcustomcss",btoa(css));}};var settingsButton=null;var panel=null;function SettingsPanel(){utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/codemirror.min.js");utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/mode/css/css.min.js");utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/addon/scroll/simplescrollbars.min.js");utils.injectCss("https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/addon/scroll/simplescrollbars.min.css");utils.injectCss("https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/theme/material.min.css");utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.4.2/Sortable.min.js");} -SettingsPanel.prototype.init=function(){var self=this;self.v2SettingsPanel=new V2_SettingsPanel();self.construct();var body=$("body");if(settingsCookie["bda-es-0"]){$("#twitchcord-button-container").show();}else{$("#twitchcord-button-container").hide();} -if(settingsCookie["bda-gs-2"]){body.addClass("bd-minimal");}else{body.removeClass("bd-minimal");} -if(settingsCookie["bda-gs-3"]){body.addClass("bd-minimal-chan");}else{body.removeClass("bd-minimal-chan");} -if(settingsCookie["bda-gs-4"]){voiceMode.enable();} -if(settingsCookie["bda-gs-5"]){$("#app-mount").addClass("bda-dark");} -if(settingsCookie["bda-es-6"]){emoteNamePopup=$("
");$(document).on("mouseover",".emote",function(){var x=$(this).offset();var title=$(this).attr("alt");$(emoteNamePopup).find(".tipsy-inner").text(title);$(emoteNamePopup).css('left',x.left-25);$(emoteNamePopup).css('top',x.top-37);$(".app").append($(emoteNamePopup));});$(document).on("mouseleave",".emote",function(){$(".tipsy").remove();});}else{$(document).off('mouseover','.emote');} -if(settingsCookie["bda-gs-8"]){dMode.enable();}else{dMode.disable();} -if(settingsCookie["bda-gs-b"]){$("body").addClass("bd-blue");}else{$("body").removeClass("bd-blue");}};var customCssInitialized=false;var lastTab="";SettingsPanel.prototype.changeTab=function(tab){var self=this;lastTab=tab;var controlGroups=$("#bd-control-groups");$(".bd-tab").removeClass("selected");$(".bd-pane").hide();$("#"+tab).addClass("selected");$("#"+tab.replace("tab","pane")).show();switch(tab){case"bd-settings-tab":$(".bda-slist-top").show();break;case"bd-emotes-tab":$(".bda-slist-top").show();break;case"bd-customcss-tab":$(".bda-slist-top").show();if(!customCssInitialized){customCssEditor.init();customCssInitialized=true;} -break;case"bd-themes-tab":$(".bda-slist-top:first").hide();break;case"bd-plugins-tab":$(".bda-slist-top:first").hide();break;default:$(".bda-slist-top").show();break;}};SettingsPanel.prototype.updateSetting=function(checkbox){var cb=$(checkbox).children().find('input[type="checkbox"]');var enabled=!cb.is(":checked");var id=cb.attr("id");cb.prop("checked",enabled);if(id=="bda-css-2"){$("#app-mount").removeClass("bd-hide-bd");customCssEditor.hideBackdrop=enabled;if(enabled){$("#app-mount").addClass("bd-hide-bd")}} -if(id=="bda-gs-8"&&enabled){mainCore.alert("Developer Mode Enabled","Use F8 to break/resume execution
More coming soon")} -settingsCookie[id]=enabled;this.updateSettings();};SettingsPanel.prototype.updateSettings=function(){if(settingsCookie["bda-es-0"]){$("#twitchcord-button-container").show();}else{$("#twitchcord-button-container").hide();} -if(settingsCookie["bda-gs-b"]){$("body").addClass("bd-blue");}else{$("body").removeClass("bd-blue");} -if(settingsCookie["bda-gs-2"]){$("body").addClass("bd-minimal");}else{$("body").removeClass("bd-minimal");} -if(settingsCookie["bda-gs-3"]){$("body").addClass("bd-minimal-chan");}else{$("body").removeClass("bd-minimal-chan");} -if(settingsCookie["bda-gs-1"]){$("#bd-pub-li").show();}else{$("#bd-pub-li").hide();} -if(settingsCookie["bda-gs-4"]){voiceMode.enable();}else{voiceMode.disable();} -$("#app-mount").removeClass("bda-dark");if(settingsCookie["bda-gs-5"]){$("#app-mount").addClass("bda-dark");} -if(settingsCookie["bda-es-6"]){emoteNamePopup=$("
");$(document).on("mouseover",".emote",function(){var x=$(this).offset();var title=$(this).attr("alt");$(emoteNamePopup).find(".tipsy-inner").text(title);$(emoteNamePopup).css('left',x.left-25);$(emoteNamePopup).css('top',x.top-32);$("div[data-reactid='.0.1.1']").append($(emoteNamePopup));});$(document).on("mouseleave",".emote",function(){$(".tipsy").remove();});}else{$(document).off('mouseover','.emote');} -if(settingsCookie["bda-gs-8"]){dMode.enable();}else{dMode.disable();} -mainCore.saveSettings();};SettingsPanel.prototype.construct=function(){var self=this;panel=$("
",{id:"bd-pane",class:"settings-inner",css:{"display":"none"}});var settingsInner='
Core
Emotes
Custom CSS
Plugins
Themes
';settingsInner+=' ';var _ccss=window.bdStorage.get("bdcustomcss");var ccss="";if(_ccss!==null&&_ccss!==""){ccss=atob(_ccss);} -customCssEditor.applyCustomCss(ccss,true,false);settingsInner+=' ';settingsInner+='
    ';$.each(bdplugins,function(){var plugin=this["plugin"];var hasSettings=false;if(typeof(plugin.getSettingsPanel)=="function"){hasSettings=plugin.getSettingsPanel()!=null&&plugin.getSettingsPanel()!="";} -settingsInner+='
  • '+plugin.getName()+' v'+plugin.getVersion()+' by '+plugin.getAuthor()+'
    '+plugin.getDescription()+'
  • ';});settingsInner+='
';settingsInner+=' ';settingsInner+='
';function showSettings(){$(".tab-bar-item").removeClass("selected");settingsButton.addClass("selected");$(".form .settings-right .settings-inner").first().hide();panel.show();if(lastTab==""){self.changeTab("bd-settings-tab");}else{self.changeTab(lastTab);}} -settingsButton=$("
",{class:"tab-bar-item",text:"BetterDiscord",id:"bd-settings-new",click:showSettings});panel.html(settingsInner);this.panel=panel;};SettingsPanel.prototype.inject=function(mutation){if(this.injectNew(mutation))return;if(mutation.type!="childList")return;if(mutation.addedNodes.length<=0)return;if($(mutation.addedNodes[0]).find(".user-settings-modal").length<=0)return;var self=this;this.panel.hide();var tabBar=$(".tab-bar.SIDE").first();$(".tab-bar.SIDE .tab-bar-item").click(function(){$(".form .settings-right .settings-inner").first().show();$("#bd-settings-new").removeClass("selected");self.panel.hide();});tabBar.append(settingsButton);$(".form .settings-right .settings-inner").last().after(self.panel);$("#bd-settings-new").removeClass("selected");};SettingsPanel.prototype.injectNew=function(mutation){let self=this;if(!mutation.target.classList.contains("layers"))return;if($(".guild-settings-base-section").length){try{mutation.addedNodes[0].setAttribute('layer-id','server-settings');}catch(err){}} -if(!$(".user-settings-account").length)return;try{mutation.addedNodes[0].setAttribute('layer-id','user-settings');}catch(err){} -if($("#bd-settings-sidebar").length)return;self.v2SettingsPanel.renderSidebar();return true;};SettingsPanel.prototype.versionInfo=function(){let self=this;let element=$("
",{class:'bd-versioninfo-wrapper'}).append($("",{text:`BetterDiscord v${(typeof(version)==="undefined"?bdVersion:version)}:${jsVersion}by`})).append($("",{text:'Jiiks',href:'https://google.com',target:'_blank'}));return element;} -SettingsPanel.prototype.tabBarNew=function(){let self=this;let _tabBar=$("
",{class:'tab-bar TOP',style:'border-bottom:none'});let items=[{'id':'bd-core','text':'Core'},{'id':'bd-emotes','text':'Emotes'},{'id':'bd-customcss','text':'Custom CSS'},{'id':'bd-plugins','text':'Plugins'},{'id':'bd-themes','text':'Themes'}];items.map(value=>{_tabBar.append($("
",{class:'tab-bar-item bd-tab',text:value.text,id:value.id,click:()=>self.changeTabNew(value.id)}));});return _tabBar;} -SettingsPanel.prototype.changeTabNew=function(id){$(".bd-tab").removeClass("selected");$(`#${id}`).addClass("selected");$(".bd-pane").hide();$(`#${id}-pane`).show();if(id==='bd-customcss'){if(!customCssInitialized){customCssEditor.init();customCssInitialized=true;}}} -SettingsPanel.prototype.updateSettingNew=function(id,checked){if(id=="bda-css-2"){$("#app-mount").removeClass("bd-hide-bd");customCssEditor.hideBackdrop=checked;if(checked){$("#app-mount").addClass("bd-hide-bd")}} -if(id=="bda-gs-8"&&checked){mainCore.alert("Developer Mode Enabled","Use F8 to break/resume execution
More coming soon")} -settingsCookie[id]=checked;this.updateSettings();};SettingsPanel.prototype.settingsSwitch=function(key){let self=this;let setting=settings[key];return $("
",{class:'ui-flex flex-vertical flex-justify-start flex-align-stretch flex-nowrap ui-switch-item'}).append($("
",{class:'ui-flex flex-horizontal flex-justify-start flex-align-stretch flex-nowrap'}).append($("

",{class:'ui-form-title h3 margin-reset margin-reset ui-flex-child',text:key})).append($("
",{class:'ui-switch'})))).append($("
",{class:'ui-form-text style-description margin-top-4',style:'flex: 1 1 auto',text:setting.info}));} -SettingsPanel.prototype.corePaneNew=function(){let self=this;let _pane=$("
",{class:'ui-form-item bd-pane',id:'bd-core-pane',style:'display:none'});Object.keys(settings).map(value=>{let setting=settings[value];if(setting.cat!=='core'||!setting.implemented||setting.hidden)return false;_pane.append(self.settingsSwitch(value))});return _pane;} -SettingsPanel.prototype.emotesPaneNew=function(){let self=this;let _pane=$("
",{class:'ui-form-item bd-pane',id:'bd-emotes-pane',style:'display:none'});Object.keys(settings).map(value=>{let setting=settings[value];if(setting.cat!=='emote'||!setting.implemented||setting.hidden)return false;_pane.append(self.settingsSwitch(value))});return _pane;} -SettingsPanel.prototype.customCssPaneNew=function(){let self=this;let _pane=$("
",{class:'ui-form-item bd-pane',id:'bd-customcss-pane',style:'display:none'});let attachBtn=$("
",{id:'editor-detached',style:'display:none'}).append($("

",{text:'Editor Detached'})).append($("

');$("#bda-import-settings").off("click").on("click",function(){var obj;try{obj=JSON.parse($("#bda-import-textarea").val());}catch(err){mainCore.alert("Invalid Data",err);return false;} -try{for(key in obj.settings){var val=obj.settings[key];if(settingsCookie.hasOwnProperty(key)){settingsCookie[key]=val;var cb=$("#"+key);cb.prop("checked",val);settingsPanel.updateSettings();}} -window.bdStorage.set("bdcustomcss",obj.customCss);var ccss=window.bdStorage.get("bdcustomcss");if(!customCssInitialized){customCssEditor.init();customCssInitialized=true;} -customCssEditor.applyCustomCss(ccss,settingsCookie["bda-css-0"],false);customCssEditor.editor.setValue(ccss);}catch(err){mainCore.alert("Invalid Data",err);return false;} -try{$.each(obj.plugins,function(plugin){var enabled=obj.plugins[plugin];if(bdplugins.hasOwnProperty(plugin)){pluginCookie[plugin]=enabled;var cb=$("#"+plugin.replace(" ","__"));if(cb.is(":checked")&&!enabled){bdplugins[plugin]["plugin"].stop();cb.prop("checked",false);} -if(!cb.is(":checked")&&enabled){bdplugins[plugin]["plugin"].start();cb.prop("checked",true);}}});pluginModule.savePluginData();}catch(err){mainCore.alert("Failed to load plugin data",err);return false;} -try{themeCookie=obj.themes;$.each(themeCookie,function(theme){var enabled=themeCookie[theme];var id="#ti"+theme;if(bdthemes.hasOwnProperty(theme)){if($(id).is(":checked")&&!enabled){$(id).prop("checked",false);$("#"+theme).remove();} -if(!$(id).is(":checked")&&enabled){$(id).prop("checked",true);$("head").append('');}}});themeModule.saveThemeData();}catch(err){mainCore.alert("Failed to load theme data",err);return false;} -return false;});};Utils.prototype.exportSettings=function(){var obj={settings:settingsCookie,customCss:window.bdStorage.get("bdcustomcss"),plugins:pluginCookie,themes:themeCookie,favEmotes:window.bdStorage.get("bdfavemotes")};mainCore.alert("Export Settings",'
');};Utils.prototype.addBackdrop=function(target){var backDrop=$("
",{class:"bda-backdrop","data-bdbackdrop":target,mouseup:function(){$('[data-bdalert="'+target+'"]').remove();$(this).remove();}});$("#app-mount").append(backDrop)};Utils.prototype.removeBackdrop=function(target){$('[data-bdbackdrop="'+target+'"]').remove();};function VoiceMode(){} -VoiceMode.prototype.obsCallback=function(){var self=this;if(settingsCookie["bda-gs-4"]){self.disable();setTimeout(function(){self.enable();},300);}};VoiceMode.prototype.enable=function(){$(".scroller.guild-channels ul").first().css("display","none");$(".scroller.guild-channels header").first().css("display","none");$(".app.flex-vertical").first().css("overflow","hidden");$(".chat.flex-vertical.flex-spacer").first().css("visibility","hidden").css("min-width","0px");$(".flex-vertical.channels-wrap").first().css("flex-grow","100000");$(".guild-header .btn.btn-hamburger").first().css("visibility","hidden");};VoiceMode.prototype.disable=function(){$(".scroller.guild-channels ul").first().css("display","");$(".scroller.guild-channels header").first().css("display","");$(".app.flex-vertical").first().css("overflow","");$(".chat.flex-vertical.flex-spacer").first().css("visibility","").css("min-width","");$(".flex-vertical.channels-wrap").first().css("flex-grow","");$(".guild-header .btn.btn-hamburger").first().css("visibility","");};var pluginCookie={};function PluginModule(){} -PluginModule.prototype.loadPlugins=function(){this.loadPluginData();$.each(bdplugins,function(){var plugin=this["plugin"];plugin.load();var name=plugin.getName();var enabled=false;if(pluginCookie.hasOwnProperty(name)){enabled=pluginCookie[name];}else{pluginCookie[name]=false;} -if(enabled){plugin.start();}});};PluginModule.prototype.handlePlugin=function(checkbox){var cb=$(checkbox).children().find('input[type="checkbox"]');var enabled=!cb.is(":checked");var id=cb.attr("id").replace("__"," ");cb.prop("checked",enabled);if(enabled){bdplugins[id]["plugin"].start();pluginCookie[id]=true;}else{bdplugins[id]["plugin"].stop();pluginCookie[id]=false;} -this.savePluginData();};PluginModule.prototype.handlePluginT=function(id,enabled){if(enabled){bdplugins[id]["plugin"].start();pluginCookie[id]=true;}else{bdplugins[id]["plugin"].stop();pluginCookie[id]=false;} -this.savePluginData();};PluginModule.prototype.showSettings=function(plugin){if(bdplugins[plugin]!=null){if(typeof bdplugins[plugin].plugin.getSettingsPanel==="function"){var panel=bdplugins[plugin].plugin.getSettingsPanel();$(".modal-inner").off("click.bdpsm").on("click.bdpsm",function(e){if($("#bd-psm-id").length){$(".bd-psm").remove();}else{$(".bd-psm").attr("id","bd-psm-id");}});$(".modal").append('
');$("#bd-psm-s").append(panel);}}};PluginModule.prototype.showSettingsT=function(plugin){if(bdplugins[plugin]===null)return;if(typeof bdplugins[plugin].plugin.getSettingsPanel!=="function")return;$("#bd-settingspane").off("click.bdpsm").on("click.bdpsm",function(e){if(e.target.id==='bd-psm-s')return;if(e.target.textContent&&e.target.textContent==='Settings')return;$(".bd-psm").remove();});let panel=bdplugins[plugin].plugin.getSettingsPanel();$(".bd-settings-panes").append('
');$("#bd-psm-s").append(panel);} -PluginModule.prototype.loadPluginData=function(){var cookie=$.cookie("bd-plugins");if(cookie!=undefined){pluginCookie=JSON.parse($.cookie("bd-plugins"));}};PluginModule.prototype.savePluginData=function(){$.cookie("bd-plugins",JSON.stringify(pluginCookie),{expires:365,path:'/'});};PluginModule.prototype.newMessage=function(){$.each(bdplugins,function(){if(!pluginCookie[this.plugin.getName()])return;if(typeof this.plugin.onMessage==="function"){this.plugin.onMessage();}});};PluginModule.prototype.channelSwitch=function(){$.each(bdplugins,function(){if(!pluginCookie[this.plugin.getName()])return;if(typeof this.plugin.onSwitch==="function"){this.plugin.onSwitch();}});};PluginModule.prototype.socketEvent=function(e,data){$.each(bdplugins,function(){if(!pluginCookie[this.plugin.getName()])return;if(typeof this.plugin.socketEvent==="function"){this.plugin.socketEvent(data);}});};PluginModule.prototype.rawObserver=function(e){$.each(bdplugins,function(){if(!pluginCookie[this.plugin.getName()])return;if(typeof this.plugin.observer==="function"){this.plugin.observer(e);}});};var themeCookie={};function ThemeModule(){} -ThemeModule.prototype.loadThemes=function(){this.loadThemeData();$.each(bdthemes,function(){var name=this["name"];var enabled=false;if(themeCookie.hasOwnProperty(name)){if(themeCookie[name]){enabled=true;}}else{themeCookie[name]=false;} -if(enabled){$("head").append('');}});};ThemeModule.prototype.handleTheme=function(checkbox){var cb=$(checkbox).children().find('input[type="checkbox"]');var enabled=!cb.is(":checked");var id=cb.attr("id").substring(2);cb.prop("checked",enabled);if(enabled){$("head").append('');themeCookie[id]=true;}else{$("#"+id).remove();themeCookie[id]=false;} -this.saveThemeData();};ThemeModule.prototype.handleThemeT=function(id,enabled){if(enabled){$("head").append('');themeCookie[id]=true;}else{$("#"+id).remove();themeCookie[id]=false;} -this.saveThemeData();};ThemeModule.prototype.loadThemeData=function(){var cookie=$.cookie("bd-themes");if(cookie!=undefined){themeCookie=JSON.parse($.cookie("bd-themes"));}};ThemeModule.prototype.saveThemeData=function(){$.cookie("bd-themes",JSON.stringify(themeCookie),{expires:365,path:'/'});};var bdSocket;var bdws;function BdWSocket(){bdws=this;} -BdWSocket.prototype.start=function(){var self=this;};BdWSocket.prototype.open=function(host){utils.log("Socket Host: "+host);try{bdSocket=new WebSocket(host);bdSocket.onopen=this.onOpen;bdSocket.onmessage=this.onMessage;bdSocket.onerror=this.onError;bdSocket.onclose=this.onClose;}catch(err){utils.log(err);}};BdWSocket.prototype.onOpen=function(){utils.log("Socket Open");var data={op:2,d:{token:JSON.parse(window.bdStorage.get('token')),properties:JSON.parse(window.bdStorage.get('superProperties')),v:3}};bdws.send(data);};BdWSocket.prototype.onMessage=function(e){var packet,data,type;try{packet=JSON.parse(e.data);data=packet.d;type=packet.t;}catch(err){utils.err(err);return;} -switch(type){case"READY":bdSocket.interval=setInterval(function(){bdws.send({op:1,d:Date.now()});},data.heartbeat_interval);utils.log("Socket Ready");break;case"PRESENCE_UPDATE":pluginModule.socketEvent("PRESENCE_UPDATE",data);break;case"TYPING_START":pluginModule.socketEvent("TYPING_START",data);break;case"MESSAGE_CREATE":pluginModule.socketEvent("MESSAGE_CREATE",data);break;case"MESSAGE_UPDATE":pluginModule.socketEvent("MESSAGE_UPDATE",data);break;default:break;}};BdWSocket.prototype.onError=function(e){utils.log("Socket Error - "+e.message);};BdWSocket.prototype.onClose=function(e){utils.log("Socket Closed - "+e.code+" : "+e.reason);clearInterval(bdSocket.interval);bdws.start();};BdWSocket.prototype.send=function(data){if(bdSocket.readyState==1){bdSocket.send(JSON.stringify(data));}};BdWSocket.prototype.getSocket=function(){return bdSocket;};function BdApi(){} -BdApi.joinServer=function(code){opublicServers.joinServer(code);};BdApi.injectCSS=function(id,css){$("head").append('');$("#"+id).html(css);};BdApi.clearCSS=function(id){$("#"+id).remove();};BdApi.getPlugin=function(name){if(bdplugins.hasOwnProperty(name)){return bdplugins[name]["plugin"];} -return null;};BdApi.getIpc=function(){return betterDiscordIPC;};BdApi.getCore=function(){return mainCore;};BdApi.getUserIdByName=function(name){var users=$(".member-username");for(var i=0;i{let setting=settings[key];if(setting.cat===cat&&setting.implemented&&!setting.hidden){setting.text=key;arr.push(setting)}return arr;},[]);}} -window.BDV2=new V2();class V2C_SettingsPanel extends BDV2.reactComponent{constructor(props){super(props);} -render(){let{settings}=this.props;return BDV2.react.createElement("div",{className:"content-column default"},BDV2.react.createElement(V2Components.SettingsTitle,{text:this.props.title}),settings.map(setting=>{return BDV2.react.createElement(V2Components.Switch,{id:setting.id,key:setting.id,data:setting,checked:settingsCookie[setting.id],onChange:(id,checked)=>{this.props.onChange(id,checked);}});}));}} -class V2C_Switch extends BDV2.reactComponent{constructor(props){super(props);this.setInitialState();this.onChange=this.onChange.bind(this);} -setInitialState(){this.state={'checked':this.props.checked};} -render(){let{text,info}=this.props.data;let{checked}=this.state;return BDV2.react.createElement("div",{className:"ui-flex flex-vertical flex-justify-start flex-align-stretch flex-nowrap ui-switch-item"},BDV2.react.createElement("div",{className:"ui-flex flex-horizontal flex-justify-start flex-align-stretch flex-nowrap"},BDV2.react.createElement("h3",{className:"ui-form-title h3 margin-reset margin-reset ui-flex-child"},text),BDV2.react.createElement("label",{className:"ui-switch-wrapper ui-flex-child",style:{flex:'0 0 auto'}},BDV2.react.createElement("input",{className:"ui-switch-checkbox",type:"checkbox",checked:checked,onChange:e=>this.onChange(e)}),BDV2.react.createElement("div",{className:`ui-switch ${checked?'checked':''}`}))),BDV2.react.createElement("div",{className:"ui-form-text style-description margin-top-4",style:{flex:'1 1 auto'}},info));} -onChange(e){this.props.onChange(this.props.id,!this.state.checked);this.setState({'checked':!this.state.checked});}} -class V2C_Scroller extends BDV2.reactComponent{constructor(props){super(props);} -render(){let wrapperClass=`scroller-wrap${this.props.fade?' fade':''}${this.props.dark?' dark':''}`;let{children}=this.props;return BDV2.react.createElement("div",{key:"scrollerwrap",className:wrapperClass},BDV2.react.createElement("div",{key:"scroller",ref:"scroller",className:"scroller"},children));}} -class V2C_TabBarItem extends BDV2.reactComponent{constructor(props){super(props);this.setInitialState();this.onClick=this.onClick.bind(this);} -setInitialState(){this.state={'selected':this.props.selected||false};} -render(){return BDV2.react.createElement("div",{className:`ui-tab-bar-item${this.props.selected?' selected':''}`,onClick:this.onClick},this.props.text);} -onClick(){if(this.props.onClick){this.props.onClick(this.props.id);}}} -class V2C_TabBarSeparator extends BDV2.reactComponent{constructor(props){super(props);} -render(){return BDV2.react.createElement("div",{className:"ui-tab-bar-separator margin-top-8 margin-bottom-8"});}} -class V2C_TabBarHeader extends BDV2.reactComponent{constructor(props){super(props);} -render(){return BDV2.react.createElement("div",{className:"ui-tab-bar-header"},this.props.text);}} -class V2C_SideBar extends BDV2.reactComponent{constructor(props){super(props);let self=this;const si=$("[class*=side] > [class*=selected]");if(si.length){self.scn=si.attr("class");} -const ns=$("[class*=side] > [class*=notSelected]");if(ns.length){self.nscn=ns.attr("class");} -$("[class*=side] > [class*=item]").on("click",e=>{self.setState({'selected':null});});self.setInitialState();self.onClick=self.onClick.bind(self);} -setInitialState(){let self=this;self.state={'selected':null,'items':self.props.items};let initialSelection=self.props.items.find(item=>{return item.selected;});if(initialSelection){self.state.selected=initialSelection.id;}} -render(){let self=this;let{headerText}=self.props;let{items,selected}=self.state;return BDV2.react.createElement("div",null,BDV2.react.createElement(V2Components.TabBar.Separator,null),BDV2.react.createElement(V2Components.TabBar.Header,{text:headerText}),items.map(item=>{let{id,text}=item;return BDV2.react.createElement(V2Components.TabBar.Item,{key:id,selected:selected===id,text:text,id:id,onClick:self.onClick});}));} -onClick(id){let self=this;const si=$("[class*=side] > [class*=selected]");if(si.length){si.off("click.bdsb").on("click.bsb",e=>{$(e.target).attr("class",self.scn);});si.attr("class",self.nscn);} -$('.ui-tab-bar-item').removeClass('selected');self.setState({'selected':id});if(self.props.onClick)self.props.onClick(id);}} -class V2C_XSvg extends BDV2.reactComponent{constructor(props){super(props);} -render(){return BDV2.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 12 12",style:{width:"18px",height:"18px"}},BDV2.react.createElement("g",{className:"background",fill:"none","fill-rule":"evenodd"},BDV2.react.createElement("path",{d:"M0 0h12v12H0"}),BDV2.react.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 V2C_Tools extends BDV2.reactComponent{constructor(props){super(props);this.onClick=this.onClick.bind(this);} -render(){return BDV2.react.createElement("div",{className:"tools"},BDV2.react.createElement("div",{className:"btn-close",onClick:this.onClick},BDV2.react.createElement(V2Components.XSvg,null)),BDV2.react.createElement("div",{className:"esc-text"},"ESC"));} -onClick(){if(this.props.onClick){this.props.onClick();} -$(".btn-close").first().click();}} -class V2C_SettingsTitle extends BDV2.reactComponent{constructor(props){super(props);} -render(){return BDV2.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.text);}} -class V2C_Checkbox extends BDV2.reactComponent{constructor(props){super(props);this.onClick=this.onClick.bind(this);this.setInitialState();} -setInitialState(){this.state={'checked':this.props.checked||false};} -render(){return BDV2.react.createElement("li",null,BDV2.react.createElement("div",{className:"checkbox",onClick:this.onClick},BDV2.react.createElement("div",{className:"checkbox-inner"},BDV2.react.createElement("input",{checked:this.state.checked,onChange:()=>{},type:"checkbox"}),BDV2.react.createElement("span",null)),BDV2.react.createElement("span",null,this.props.text)));} -onClick(){this.props.onChange(this.props.id,!this.state.checked);this.setState({'checked':!this.state.checked});}} -class V2C_CssEditorDetached extends BDV2.reactComponent{constructor(props){super(props);let self=this;self.onClick=self.onClick.bind(self);self.updateCss=self.updateCss.bind(self);self.saveCss=self.saveCss.bind(self);self.onChange=self.onChange.bind(self);} -componentDidMount(){let self=this;$("#app-mount").addClass('bd-detached-editor');self.editor=CodeMirror.fromTextArea(self.refs.editor,self.options);self.editor.on("change",cm=>{if(!settingsCookie["bda-css-0"])return;self.updateCss();});window.bdtemp.editorDetached=true;} -componentWillUnmount(){$("#app-mount").removeClass('bd-detached-editor');window.bdtemp.editorDetached=false;} -get options(){return{lineNumbers:true,mode:'css',indentUnit:4,theme:'material',scrollbarStyle:'simple'};} -get css(){let _ccss=window.bdStorage.get("bdcustomcss");let ccss="";if(_ccss&&_ccss!==""){ccss=atob(_ccss);} -return ccss;} -get root(){let _root=$("#bd-customcss-detach-container");if(!_root.length){if(!this.injectRoot())return null;return this.detachedRoot;} -return _root[0];} -injectRoot(){if(!$(".app").length)return false;$("
",{id:'bd-customcss-detach-container'}).insertAfter($(".app"));return true;} -render(){let self=this;return BDV2.react.createElement("div",{className:"bd-detached-css-editor",id:"bd-customcss-detach-editor"},BDV2.react.createElement("div",{id:"bd-customcss-innerpane"},BDV2.react.createElement("textarea",{onChange:()=>{},value:self.css,ref:"editor",id:"bd-customcss-ta"}),BDV2.react.createElement("div",{id:"bd-customcss-attach-controls"},BDV2.react.createElement("ul",{className:"checkbox-group"},BDV2.react.createElement(V2Components.Checkbox,{id:"live-update",text:"Live Update",onChange:self.onChange,checked:settingsCookie["bda-css-0"]})),BDV2.react.createElement("div",{id:"bd-customcss-detach-controls-button"},BDV2.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{self.onClick("update");}},"Update"),BDV2.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{self.onClick("save");}},"Save"),BDV2.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{self.onClick("attach");}},"Attach"),BDV2.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on attach")))));} -onChange(id,checked){switch(id){case'live-update':settingsCookie["bda-css-0"]=checked;mainCore.saveSettings();break;}} -onClick(id){let self=this;switch(id){case'attach':if($("#editor-detached").length)self.props.attach();BDV2.reactDom.unmountComponentAtNode(self.root);break;case'update':self.updateCss();break;case'save':self.saveCss();break;}} -updateCss(){let self=this;if($("#customcss").length==0){$("head").append('');} -$("#customcss").html(self.editor.getValue());} -saveCss(){let self=this;window.bdStorage.set("bdcustomcss",btoa(self.editor.getValue()));}} -class V2C_CssEditor extends BDV2.reactComponent{constructor(props){super(props);let self=this;self.setInitialState();self.attach=self.attach.bind(self);self.detachedEditor=BDV2.react.createElement(V2C_CssEditorDetached,{attach:self.attach});self.onClick=self.onClick.bind(self);self.updateCss=self.updateCss.bind(self);self.saveCss=self.saveCss.bind(self);self.detach=self.detach.bind(self);self.codeMirror=self.codeMirror.bind(self);} -setInitialState(){this.state={'detached':this.props.detached||window.bdtemp.editorDetached};} -componentDidMount(){let self=this;self.codeMirror();} -componentDidUpdate(prevProps,prevState){let self=this;if(prevState.detached&&!self.state.detached){BDV2.reactDom.unmountComponentAtNode(self.detachedRoot);self.codeMirror();}} -codeMirror(){let self=this;if(!self.state.detached){self.editor=CodeMirror.fromTextArea(self.refs.editor,self.options);self.editor.on("change",cm=>{if(!settingsCookie["bda-css-0"])return;self.updateCss();});}} -get options(){return{lineNumbers:true,mode:'css',indentUnit:4,theme:'material',scrollbarStyle:'simple'};} -get css(){let _ccss=window.bdStorage.get("bdcustomcss");let ccss="";if(_ccss&&_ccss!==""){ccss=atob(_ccss);} -return ccss;} -render(){let self=this;let{detached}=self.state;return BDV2.react.createElement("div",{className:"content-column default",style:{padding:'60px 40px 0px'}},detached&&BDV2.react.createElement("div",{id:"editor-detached"},BDV2.react.createElement(V2Components.SettingsTitle,{text:"Custom CSS Editor"}),BDV2.react.createElement("h3",null,"Editor Detached"),BDV2.react.createElement("button",{className:"btn btn-primary",onClick:()=>{self.attach();}},"Attach")),!detached&&BDV2.react.createElement("div",null,BDV2.react.createElement(V2Components.SettingsTitle,{text:"Custom CSS Editor"}),BDV2.react.createElement("textarea",{ref:"editor",value:self.css,onChange:()=>{}}),BDV2.react.createElement("div",{id:"bd-customcss-attach-controls"},BDV2.react.createElement("ul",{className:"checkbox-group"},BDV2.react.createElement(V2Components.Checkbox,{id:"live-update",text:"Live Update",onChange:this.onChange,checked:settingsCookie["bda-css-0"]})),BDV2.react.createElement("div",{id:"bd-customcss-detach-controls-button"},BDV2.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{self.onClick("update");}},"Update"),BDV2.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{self.onClick("save");}},"Save"),BDV2.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{self.onClick("detach");}},"Detach"),BDV2.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on detach")))));} -onClick(arg){let self=this;switch(arg){case'update':self.updateCss();break;case'save':self.saveCss();break;case'detach':self.detach();break;}} -onChange(id,checked){switch(id){case'live-update':settingsCookie["bda-css-0"]=checked;mainCore.saveSettings();break;}} -updateCss(){let self=this;if($("#customcss").length==0){$("head").append('');} -$("#customcss").html(self.editor.getValue());} -saveCss(){let self=this;window.bdStorage.set("bdcustomcss",btoa(self.editor.getValue()));} -detach(){let self=this;self.setState({'detached':true});let droot=self.detachedRoot;if(!droot){console.log("FAILED TO INJECT ROOT: .app");return;} -BDV2.reactDom.render(self.detachedEditor,droot);} -get detachedRoot(){let _root=$("#bd-customcss-detach-container");if(!_root.length){if(!this.injectDetachedRoot())return null;return this.detachedRoot;} -return _root[0];} -injectDetachedRoot(){if(!$(".app").length)return false;$("
",{id:'bd-customcss-detach-container'}).insertAfter($(".app"));return true;} -attach(){let self=this;self.setState({'detached':false});}} -class V2C_List extends BDV2.reactComponent{constructor(props){super(props);} -render(){return BDV2.react.createElement("ul",{className:this.props.className},this.props.children);}} -class V2C_ContentColumn extends BDV2.reactComponent{constructor(props){super(props);} -render(){return BDV2.react.createElement("div",{className:"content-column default"},BDV2.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.title),this.props.children);}} -class V2C_PluginCard extends BDV2.reactComponent{constructor(props){super(props);let self=this;if(typeof self.props.plugin.getSettingsPanel==="function"){self.settingsPanel=self.props.plugin.getSettingsPanel();} -self.onChange=self.onChange.bind(self);self.showSettings=self.showSettings.bind(self);self.setInitialState();} -setInitialState(){this.state={'checked':pluginCookie[this.props.plugin.getName()],'settings':false};} -componentDidUpdate(){if(this.state.settings){if(typeof this.settingsPanel==="object"){this.refs.settingspanel.appendChild(this.settingsPanel);}}} -render(){let self=this;let{plugin}=this.props;let name=plugin.getName();let author=plugin.getAuthor();let description=plugin.getDescription();let version=plugin.getVersion();let{settingsPanel}=this;if(this.state.settings){return BDV2.react.createElement("li",{style:{maxHeight:"500px",overflow:"auto"}},BDV2.react.createElement("div",{style:{float:"right",cursor:"pointer"},onClick:()=>{this.refs.settingspanel.innerHTML="";self.setState({'settings':false});}},BDV2.react.createElement(V2Components.XSvg,null)),typeof settingsPanel==='object'&&BDV2.react.createElement("div",{ref:"settingspanel"}),typeof settingsPanel!=='object'&&BDV2.react.createElement("div",{ref:"settingspanel",dangerouslySetInnerHTML:{__html:plugin.getSettingsPanel()}}));} -return BDV2.react.createElement("li",null,BDV2.react.createElement("div",{className:"bda-left"},BDV2.react.createElement("span",{className:"bda-name"},name," v",version," by ",author),BDV2.react.createElement("div",{className:"scroller-wrap fade"},BDV2.react.createElement("div",{className:"scroller bda-description"},description))),BDV2.react.createElement("div",{className:"bda-right"},BDV2.react.createElement("label",{className:"ui-switch-wrapper ui-flex-child",style:{flex:'0 0 auto'}},BDV2.react.createElement("input",{checked:this.state.checked,onChange:this.onChange,className:"ui-switch-checkbox",type:"checkbox"}),BDV2.react.createElement("div",{className:"ui-switch"})),this.settingsPanel&&BDV2.react.createElement("button",{onClick:this.showSettings},"Settings")));} -onChange(){let self=this;self.setState({'checked':!self.state.checked});pluginCookie[self.props.plugin.getName()]=!self.state.checked;if(!self.state.checked){self.props.plugin.start();}else{self.props.plugin.stop();} -$.cookie("bd-plugins",JSON.stringify(pluginCookie),{expires:365,path:'/'});} -showSettings(){if(!this.settingsPanel)return;this.setState({'settings':true});}} -class V2C_ThemeCard extends BDV2.reactComponent{constructor(props){super(props);this.setInitialState();this.onChange=this.onChange.bind(this);} -setInitialState(){this.state={'checked':themeCookie[this.props.theme.name]};} -render(){let{theme}=this.props;let name=theme.name.replace('_',' ');let description=theme.description;let version=theme.version;let author=theme.author;return BDV2.react.createElement("li",null,BDV2.react.createElement("div",{className:"bda-left"},BDV2.react.createElement("span",{className:"bda-name"},name," v",version," by ",author),BDV2.react.createElement("div",{className:"scroller-wrap fade"},BDV2.react.createElement("div",{className:"scroller bda-description"},description))),BDV2.react.createElement("div",{className:"bda-right"},BDV2.react.createElement("label",{className:"ui-switch-wrapper ui-flex-child",style:{flex:'0 0 auto'}},BDV2.react.createElement("input",{checked:this.state.checked,onChange:this.onChange,className:"ui-switch-checkbox",type:"checkbox"}),BDV2.react.createElement("div",{className:"ui-switch"}))));} -onChange(){let self=this;self.setState({'checked':!self.state.checked});themeCookie[self.props.theme.name]=!self.state.checked;if(!self.state.checked){$("head").append(``);}else{$(`#${self.props.theme.name}`).remove();} -$.cookie("bd-themes",JSON.stringify(themeCookie),{expires:365,path:'/'});}} -class V2Cs_TabBar{static get Item(){return V2C_TabBarItem;} -static get Header(){return V2C_TabBarHeader;} -static get Separator(){return V2C_TabBarSeparator;}} -class V2C_Layer extends BDV2.reactComponent{constructor(props){super(props);} -componentDidMount(){$(window).on(`keyup.${this.props.id}`,e=>{if(e.which===27){BDV2.reactDom.unmountComponentAtNode(this.refs.root.parentNode);}});} -componentWillUnmount(){$(window).off(`keyup.${this.props.id}`);$(`#${this.props.rootId}`).remove();} -render(){return BDV2.react.createElement("div",{className:"layer",id:this.props.id,ref:"root"},this.props.children);}} -class V2C_SidebarView extends BDV2.reactComponent{constructor(props){super(props);} -render(){let{sidebar,content}=this.props.children;return BDV2.react.createElement("div",{className:"ui-standard-sidebar-view"},BDV2.react.createElement("div",{className:"sidebar-region"},BDV2.react.createElement(V2Components.Scroller,{key:"sidebarScroller",ref:"sidebarScroller",fade:sidebar.fade||true,dark:sidebar.dark||true,children:sidebar.component})),BDV2.react.createElement("div",{className:"content-region"},BDV2.react.createElement(V2Components.Scroller,{key:"contentScroller",ref:"contentScroller",fade:content.fade||true,dark:content.dark||true,children:content.component})));}} -class V2C_ServerCard extends BDV2.reactComponent{constructor(props){super(props);} -render(){let{server}=this.props;return BDV2.react.createElement("div",{className:`ui-card ui-card-primary bd-server-card${server.pinned?' bd-server-card-pinned':''}`,style:{marginTop:"5px"}},BDV2.react.createElement("div",{className:"ui-flex horizontal",style:{display:"flex",flexFlow:"row nowrap",justifyContent:"flex-start",alignItems:"stretch",flex:"1 1 auto"}},BDV2.react.createElement("div",{className:"ui-flex-child",style:{flex:"0 1 auto",padding:"5px"}},BDV2.react.createElement("div",{className:"bd-pubs-server-icon",style:{width:"100px",height:"100px",backgroundSize:"cover",backgroundImage:`url(${server.icon})`}})),BDV2.react.createElement("div",{className:"ui-flex-child",style:{flex:"1 1 auto",padding:"5px"}},BDV2.react.createElement("div",{className:"ui-flex horizontal"},BDV2.react.createElement("div",{className:"ui-form-item",style:{flex:"1 1 auto"}},BDV2.react.createElement("h5",{className:"ui-form-title h5 margin-reset"},server.name)),BDV2.react.createElement("div",{className:"ui-form-item"},BDV2.react.createElement("h5",{className:"ui-form-title h5 margin-reset"},server.online,"/",server.members," Members"))),BDV2.react.createElement("div",{className:"ui-flex horizontal"},BDV2.react.createElement("div",{className:"scroller-wrap fade dark",style:{minHeight:"60px",maxHeight:"60px",borderTop:"1px solid #3f4146",borderBottom:"1px solid #3f4146",paddingTop:"5px"}},BDV2.react.createElement("div",{className:"scroller"},BDV2.react.createElement("div",{style:{fontSize:"13px",color:"#b9bbbe"}},server.description)))),BDV2.react.createElement("div",{className:"ui-flex horizontal"},BDV2.react.createElement("div",{className:"ui-flex-child bd-server-tags",style:{flex:"1 1 auto"}},server.categories.join(', ')),server.joined&&BDV2.react.createElement("button",{type:"button",className:"ui-button filled brand small grow disabled",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#3ac15c"}},BDV2.react.createElement("div",{className:"ui-button-contents"},"Joined")),server.error&&BDV2.react.createElement("button",{type:"button",className:"ui-button filled brand small grow disabled",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#c13a3a"}},BDV2.react.createElement("div",{className:"ui-button-contents"},"Error")),!server.error&&!server.joined&&BDV2.react.createElement("button",{type:"button",className:"ui-button filled brand small grow",style:{minHeight:"12px",marginTop:"4px"},onClick:()=>{this.join(server.identifier);}},BDV2.react.createElement("div",{className:"ui-button-contents"},"Join"))))));} -join(id){let self=this;self.props.join(self.props.server);}} -class V2C_PublicServers extends BDV2.reactComponent{constructor(props){super(props);this.setInitialState();this.close=this.close.bind(this);this.changeCategory=this.changeCategory.bind(this);this.search=this.search.bind(this);this.searchKeyDown=this.searchKeyDown.bind(this);this.checkConnection=this.checkConnection.bind(this);this.join=this.join.bind(this);this.connect=this.connect.bind(this);} -componentDidMount(){this.checkConnection();} -setInitialState(){this.state={'selectedCategory':-1,'title':'Loading...','loading':true,'servers':[],'next':null,'connection':{'state':0,'user':null}};} -close(){BDV2.reactDom.unmountComponentAtNode(document.getElementById(this.props.rootId));} -search(query,clear){let self=this;$.ajax({method:'GET',url:`${self.endPoint}${query}`,success:data=>{let servers=data.results.reduce((arr,server)=>{server.joined=false;arr.push(server);return arr;},[]);if(!clear){servers=self.state.servers.concat(servers);}else{} -let end=data.size+data.from;if(end>=data.total){end=data.total;data.next=null;} -let title=`Showing 1-${end}of ${data.total}results in ${self.categoryButtons[self.state.selectedCategory]}`;if(self.state.term)title+=`for ${self.state.term}`;self.setState({'loading':false,'title':title,'servers':servers,'next':data.next});if(clear){self.refs.sbv.refs.contentScroller.refs.scroller.scrollTop=0;}},error:(jqXHR,textStatus,errorThrow)=>{self.setState({'loading':false,'title':'Failed to load servers. Check console for details'});console.log(jqXHR);}});} -join(server){let self=this;if(self.state.loading)return;self.setState({'loading':true});if(server.nativejoin){self.setState({'loading':false});$(".guilds-add").click();$(".join .btn-primary").click();$(".join-server input").val(server.invitecode);return;} -$.ajax({method:'GET',url:`${self.joinEndPoint}/${server.identifier}`,crossDomain:true,xhrFields:{withCredentials:true},success:data=>{let servers=self.state.servers;servers.map(s=>{if(s.identifier===server.identifier)server.joined=true;});self.setState({'loading':false,'servers':servers});},error:jqXHR=>{console.log(`[BetterDiscord]Failed to join server ${server.name}.Reason:`);console.log(jqXHR);let servers=self.state.servers;servers.map(s=>{if(s.identifier===server.identifier)server.error=true;});self.setState({'loading':false,'servers':servers});}});} -get bdServer(){let server={"name":"BetterDiscord","online":"7500+","members":"20000+","categories":["community","programming","support"],"description":"Official BetterDiscord server for support etc","identifier":"86004744966914048","icon":"https://cdn.discordapp.com/icons/86004744966914048/c8d49dc02248e1f55caeb897c3e1a26e.png","nativejoin":true,"invitecode":"0Tmfo5ZbORCRqbAd","pinned":true};return BDV2.react.createElement(V2Components.ServerCard,{server:server,pinned:true,join:this.join});} -get endPoint(){return'https://search.discordservers.com';} -get joinEndPoint(){return'https://join.discordservers.com';} -get connectEndPoint(){return'https://join.discordservers.com/connect';} -checkConnection(){let self=this;$.ajax({method:'GET',url:`${self.joinEndPoint}/session`,crossDomain:true,xhrFields:{withCredentials:true},success:data=>{self.setState({'selectedCategory':0,'connection':{'state':2,'user':data}});self.search("",true);},error:jqXHR=>{if(jqXHR.status===403){self.setState({'title':'Not connected to discordservers.com!','loading':true,'selectedCategory':-1,'connection':{'state':1,'user':null}});return;} -console.log(jqXHR);}});} -get windowOptions(){return{width:520,height:710,backgroundColor:'#282b30',show:true,resizable:false,maximizable:false,minimizable:false,alwaysOnTop:true,frame:false,center:false};} -connect(){let self=this;let options=self.windowOptions;options.x=Math.round(window.screenX+window.innerWidth / 2-options.width / 2);options.y=Math.round(window.screenY+window.innerHeight / 2-options.height / 2);self.joinWindow=new(window.require('electron').remote.BrowserWindow)(options);let sub=window.location.hostname.split('.')[0];let url=self.connectEndPoint+(sub==='canary'||sub==='ptb'?`/${sub}`:'');self.joinWindow.on('close',e=>{self.checkConnection();});self.joinWindow.webContents.on('did-navigate',(event,url)=>{if(!url.includes("connect/callback"))return;self.joinWindow.close();});self.joinWindow.loadURL(url);} -render(){return BDV2.react.createElement(V2Components.SidebarView,{ref:"sbv",children:this.component});} -get component(){return{'sidebar':{'component':this.sidebar},'content':{'component':this.content}};} -get sidebar(){return BDV2.react.createElement("div",{className:"sidebar",key:"ps"},BDV2.react.createElement("div",{className:"ui-tab-bar SIDE"},BDV2.react.createElement("div",{className:"ui-tab-bar-header",style:{fontSize:"16px"}},"Public Servers"),BDV2.react.createElement(V2Components.TabBar.Separator,null),this.searchInput,BDV2.react.createElement(V2Components.TabBar.Separator,null),BDV2.react.createElement(V2Components.TabBar.Header,{text:"Categories"}),this.categoryButtons.map((value,index)=>{return BDV2.react.createElement(V2Components.TabBar.Item,{id:index,onClick:this.changeCategory,key:index,text:value,selected:this.state.selectedCategory===index});}),BDV2.react.createElement(V2Components.TabBar.Separator,null),this.footer,this.connection));} -get searchInput(){return BDV2.react.createElement("div",{className:"ui-form-item"},BDV2.react.createElement("div",{className:"ui-text-input flex-vertical",style:{width:"172px",marginLeft:"10px"}},BDV2.react.createElement("input",{ref:"searchinput",onKeyDown:this.searchKeyDown,onChange:()=>{},type:"text",className:"input default",placeholder:"Search...",maxLength:"50"})));} -searchKeyDown(e){let self=this;if(self.state.loading||e.which!==13)return;self.setState({'loading':true,'title':'Loading...','term':e.target.value});let query=`?term=${e.target.value}`;if(self.state.selectedCategory!==0){query+=`&category=${self.categoryButtons[self.state.selectedCategory]}`;} -self.search(query,true);} -get categoryButtons(){return["All","FPS Games","MMO Games","Strategy Games","Sports Games","Puzzle Games","Retro Games","Party Games","Tabletop Games","Sandbox Games","Simulation Games","Community","Language","Programming","Other"];} -changeCategory(id){let self=this;if(self.state.loading)return;self.refs.searchinput.value="";self.setState({'loading':true,'selectedCategory':id,'title':'Loading...','term':null});if(id===0){self.search("",true);return;} -self.search(`?category=${self.categoryButtons[id]}`,true);} -get content(){let self=this;if(self.state.connection.state===1)return self.notConnected;return[BDV2.react.createElement("div",{ref:"content",key:"pc",className:"content-column default"},BDV2.react.createElement(V2Components.SettingsTitle,{text:self.state.title}),self.bdServer,self.state.servers.map((server,index)=>{return BDV2.react.createElement(V2Components.ServerCard,{key:index,server:server,join:self.join});}),self.state.next&&BDV2.react.createElement("button",{type:"button",onClick:()=>{if(self.state.loading)return;self.setState({'loading':true});self.search(self.state.next,false);},className:"ui-button filled brand small grow",style:{width:"100%",marginTop:"10px",marginBottom:"10px"}},BDV2.react.createElement("div",{className:"ui-button-contents"},self.state.loading?'Loading':'Load More')),self.state.servers.length>0&&BDV2.react.createElement(V2Components.SettingsTitle,{text:self.state.title})),BDV2.react.createElement(V2Components.Tools,{key:"pt",ref:"tools",onClick:self.close})];} -get notConnected(){let self=this;return[BDV2.react.createElement("div",{key:"ncc",ref:"content",className:"content-column default"},BDV2.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},"Not connected to discordservers.com!",BDV2.react.createElement("button",{onClick:self.connect,type:"button",className:"ui-button filled brand small grow",style:{display:"inline-block",minHeight:"18px",marginLeft:"10px",lineHeight:"14px"}},BDV2.react.createElement("div",{className:"ui-button-contents"},"Connect"))),self.bdServer),BDV2.react.createElement(V2Components.Tools,{key:"nct",ref:"tools",onClick:self.close})];} -get footer(){return BDV2.react.createElement("div",{className:"ui-tab-bar-header"},BDV2.react.createElement("a",{href:"https://discordservers.com",target:"_blank"},"Discordservers.com"));} -get connection(){let self=this;let{connection}=self.state;if(connection.state!==2)return BDV2.react.createElement("span",null);return BDV2.react.createElement("span",null,BDV2.react.createElement(V2Components.TabBar.Separator,null),BDV2.react.createElement("span",{style:{color:"#b9bbbe",fontSize:"10px",marginLeft:"10px"}},"Connected as: ",`${connection.user.username}#${connection.user.discriminator}`),BDV2.react.createElement("div",{style:{padding:"5px 10px 0 10px"}},BDV2.react.createElement("button",{style:{width:"100%",minHeight:"20px"},type:"button",className:"ui-button filled brand small grow"},BDV2.react.createElement("div",{className:"ui-button-contents",onClick:self.connect},"Reconnect"))));}} -class V2Components{static get SettingsPanel(){return V2C_SettingsPanel;} -static get Switch(){return V2C_Switch;} -static get Scroller(){return V2C_Scroller;} -static get TabBar(){return V2Cs_TabBar;} -static get SideBar(){return V2C_SideBar;} -static get Tools(){return V2C_Tools;} -static get SettingsTitle(){return V2C_SettingsTitle;} -static get CssEditor(){return V2C_CssEditor;} -static get Checkbox(){return V2C_Checkbox;} -static get List(){return V2C_List;} -static get PluginCard(){return V2C_PluginCard;} -static get ThemeCard(){return V2C_ThemeCard;} -static get ContentColumn(){return V2C_ContentColumn;} -static get XSvg(){return V2C_XSvg;} -static get Layer(){return V2C_Layer;} -static get SidebarView(){return V2C_SidebarView;} -static get ServerCard(){return V2C_ServerCard;}} -class V2_PublicServers{constructor(){} -get component(){return BDV2.react.createElement(V2Components.Layer,{rootId:"pubslayerroot",id:"pubslayer",children:BDV2.react.createElement(V2C_PublicServers,{rootId:"pubslayerroot"})});} -get root(){let _root=$("#pubslayerroot");if(!_root.length){if(!this.injectRoot())return null;return this.root;} -return _root[0];} -injectRoot(){if(!$(".layers").length)return false;$(".layers").append($("",{id:'pubslayerroot'}));return true;} -render(){let root=this.root;if(!root){console.log("FAILED TO LOCATE ROOT: .layers");return;} -BDV2.reactDom.render(this.component,root);}} -class V2_SettingsPanel_Sidebar{constructor(onClick){this.onClick=onClick;} -get items(){return[{'text':'Core','id':'core'},{'text':'Emotes','id':'emotes'},{'text':'Custom CSS','id':'customcss'},{'text':'Plugins','id':'plugins'},{'text':'Themes','id':'themes'}];} -get component(){return BDV2.react.createElement("span",null,BDV2.react.createElement(V2Components.SideBar,{onClick:this.onClick,headerText:"BetterDiscord",items:this.items}),BDV2.react.createElement("span",{style:{fontSize:"12px",fontWeight:"600",color:"#72767d",padding:"6px 10px"}},`v${bdVersion}:${jsVersion}by`,BDV2.react.createElement("a",{href:"https://github.com/Jiiks/",target:"_blank"},"Jiiks")));} -get root(){let _root=$("#bd-settings-sidebar");if(!_root.length){if(!this.injectRoot())return null;return this.root;} -return _root[0];} -injectRoot(){let changeLog=$("[class*=side] > [class*=item]:not([class*=Danger])").last();if(!changeLog.length)return false;$("",{'id':'bd-settings-sidebar'}).insertBefore(changeLog.prev());return true;} -render(){let root=this.root;if(!root){console.log("FAILED TO LOCATE ROOT: [class*=side] > [class*=item]:not([class*=Danger])");return;} -BDV2.reactDom.render(this.component,root);}} -class V2_SettingsPanel{constructor(){let self=this;self.sideBarOnClick=self.sideBarOnClick.bind(self);self.onChange=self.onChange.bind(self);self.updateSettings=this.updateSettings.bind(self);self.sidebar=new V2_SettingsPanel_Sidebar(self.sideBarOnClick);} -get root(){let _root=$("#bd-settingspane-container");if(!_root.length){if(!this.injectRoot())return null;return this.root;} -return _root[0];} -injectRoot(){if(!$(".layer .ui-standard-sidebar-view").length)return false;$(".layer .ui-standard-sidebar-view").append($("
",{class:'content-region',id:'bd-settingspane-container'}));return true;} -get coreSettings(){return this.getSettings("core");} -get emoteSettings(){return this.getSettings("emote");} -getSettings(category){return Object.keys(settings).reduce((arr,key)=>{let setting=settings[key];if(setting.cat===category&&setting.implemented&&!setting.hidden){setting.text=key;arr.push(setting);} -return arr;},[]);} -sideBarOnClick(id){let self=this;$(".content-region").first().hide();$(self.root).show();switch(id){case'core':self.renderCoreSettings();break;case'emotes':self.renderEmoteSettings();break;case'customcss':self.renderCustomCssEditor();break;case'plugins':self.renderPluginPane();break;case'themes':self.renderThemePane();break;}} -onClick(id){} -onChange(id,checked){settingsCookie[id]=checked;this.updateSettings();} -updateSettings(){let _c=settingsCookie;if(_c["bda-es-0"]){$("#twitchcord-button-container").show();}else{$("#twitchcord-button-container").hide();} -if(_c["bda-gs-b"]){$("body").addClass("bd-blue");}else{$("body").removeClass("bd-blue");} -if(_c["bda-gs-2"]){$("body").addClass("bd-minimal");}else{$("body").removeClass("bd-minimal");} -if(_c["bda-gs-3"]){$("body").addClass("bd-minimal-chan");}else{$("body").removeClass("bd-minimal-chan");} -if(_c["bda-gs-1"]){$("#bd-pub-li").show();}else{$("#bd-pub-li").hide();} -if(_c["bda-gs-4"]){voiceMode.enable();}else{voiceMode.disable();} -if(_c["bda-gs-5"]){$("#app-mount").addClass("bda-dark");}else{$("#app-mount").removeClass("bda-dark");} -if(_c["bda-es-6"]){emoteNamePopup=$("
");$(document).on("mouseover",".emote",function(){var x=$(this).offset();var title=$(this).attr("alt");$(emoteNamePopup).find(".tipsy-inner").text(title);$(emoteNamePopup).css('left',x.left-25);$(emoteNamePopup).css('top',x.top-32);$("div[data-reactid='.0.1.1']").append($(emoteNamePopup));});$(document).on("mouseleave",".emote",function(){$(".tipsy").remove();});}else{$(document).off('mouseover','.emote');} -if(_c["bda-gs-8"]){dMode.enable();}else{dMode.disable();} -mainCore.saveSettings();} -renderSidebar(){let self=this;$("[class*=side] > [class*=item]").off('click.v2settingspanel').on('click.v2settingspanel',e=>{BDV2.reactDom.unmountComponentAtNode(self.root);$(self.root).hide();$(".content-region").first().show();});self.sidebar.render();} -get coreComponent(){return BDV2.react.createElement(V2Components.Scroller,{fade:true,dark:true,children:[BDV2.react.createElement(V2Components.SettingsPanel,{key:"cspanel",title:"Core Settings",onChange:this.onChange,settings:this.coreSettings}),BDV2.react.createElement(V2Components.Tools,{key:"tools"})]});} -get emoteComponent(){return BDV2.react.createElement(V2Components.Scroller,{fade:true,dark:true,children:[BDV2.react.createElement(V2Components.SettingsPanel,{key:"espanel",title:"Emote Settings",onChange:this.onChange,settings:this.emoteSettings}),BDV2.react.createElement(V2Components.Tools,{key:"tools"})]});} -get customCssComponent(){return BDV2.react.createElement(V2Components.Scroller,{fade:true,dark:true,children:[BDV2.react.createElement(V2Components.CssEditor,{key:"csseditor"}),BDV2.react.createElement(V2Components.Tools,{key:"tools"})]});} -get pluginsComponent(){let plugins=Object.keys(bdplugins).reduce((arr,key)=>{arr.push(BDV2.react.createElement(V2Components.PluginCard,{key:key,plugin:bdplugins[key].plugin}));return arr;},[]);let list=BDV2.react.createElement(V2Components.List,{key:"plugin-list",className:"bda-slist",children:plugins});let pfBtn=BDV2.react.createElement("button",{className:'bd-pfbtn',onClick:()=>{betterDiscordIPC.send('asynchronous-message',{'arg':'opendir','path':'plugindir'});}},"Open Plugin Folder");let contentColumn=BDV2.react.createElement(V2Components.ContentColumn,{key:"pcolumn",title:"Plugins",children:[pfBtn,list]});return BDV2.react.createElement(V2Components.Scroller,{fade:true,dark:true,children:[contentColumn,BDV2.react.createElement(V2Components.Tools,{key:"tools"})]});} -get themesComponent(){let themes=Object.keys(bdthemes).reduce((arr,key)=>{arr.push(BDV2.react.createElement(V2Components.ThemeCard,{key:key,theme:bdthemes[key]}));return arr;},[]);let list=BDV2.react.createElement(V2Components.List,{key:"theme-list",className:"bda-slist",children:themes});let tfBtn=BDV2.react.createElement("button",{className:'bd-pfbtn',onClick:()=>{betterDiscordIPC.send('asynchronous-message',{'arg':'opendir','path':'themedir'});}},"Open Theme Folder");let contentColumn=BDV2.react.createElement(V2Components.ContentColumn,{key:"tcolumn",title:"Themes",children:[tfBtn,list]});return BDV2.react.createElement(V2Components.Scroller,{fade:true,dark:true,children:[contentColumn,BDV2.react.createElement(V2Components.Tools,{key:"tools"})]});} -renderCoreSettings(){let root=this.root;if(!root){console.log("FAILED TO LOCATE ROOT: .layer .ui-standard-sidebar-view");return;} -BDV2.reactDom.render(this.coreComponent,root);} -renderEmoteSettings(){let root=this.root;if(!root){console.log("FAILED TO LOCATE ROOT: .layer .ui-standard-sidebar-view");return;} -BDV2.reactDom.render(this.emoteComponent,root);} -renderCustomCssEditor(){let root=this.root;if(!root){console.log("FAILED TO LOCATE ROOT: .layer .ui-standard-sidebar-view");return;} -BDV2.reactDom.render(this.customCssComponent,root);} -renderPluginPane(){let root=this.root;if(!root){console.log("FAILED TO LOCATE ROOT: .layer .ui-standard-sidebar-view");return;} -BDV2.reactDom.render(this.pluginsComponent,root);} -renderThemePane(){let root=this.root;if(!root){console.log("FAILED TO LOCATE ROOT: .layer .ui-standard-sidebar-view");return;} -BDV2.reactDom.render(this.themesComponent,root);}} \ No newline at end of file +(function(){let n=window.require("fs"),d=window.require("process"),r=d.platform,o=("win32"===r?d.env.APPDATA:"darwin"===r?d.env.HOME+"/Library/Preferences":process.env.HOME+"/.config")+"/BetterDiscord/",c={};if(n.existsSync(`${o}localStorage.json`))try{c=JSON.parse(n.readFileSync(`${o}localStorage.json`))}catch(b){console.log(b)}else if(n.existsSync("localStorage.json"))try{c=JSON.parse(n.readFileSync("localStorage.json"))}catch(b){console.log(b)}var l=c;l.setItem=function(b,g){l[b]=g,this.save()},l.getItem=function(b){return l[b]||null},l.save=function(){n.writeFileSync(`${o}/localStorage.json`,JSON.stringify(this),null,4)};var u=new Proxy(l,{set:function(b,g,f){l[g]=f,l.save()},get:function(b,g){return l[g]||null}});window.localStorage=u})(),(()=>{let n=document.createElement("div");n.className="bd-loaderv2",n.title="BetterDiscord is loading...",document.body.appendChild(n)})(),window.bdStorage={},window.bdStorage.get=function(n){return betterDiscordIPC.sendSync("synchronous-message",{arg:"storage",cmd:"get","var":n})},window.bdStorage.set=function(n,d){betterDiscordIPC.sendSync("synchronous-message",{arg:"storage",cmd:"set","var":n,data:d})},window.bdPluginStorage={},window.bdPluginStorage.get=function(n,d){return betterDiscordIPC.sendSync("synchronous-message",{arg:"pluginstorage",cmd:"get",pn:n,"var":d})},window.bdPluginStorage.set=function(n,d,r){betterDiscordIPC.sendSync("synchronous-message",{arg:"pluginstorage",cmd:"set",pn:n,"var":d,data:r})},betterDiscordIPC.on("asynchronous-reply",(n,d)=>{console.log(n),console.log(d)});var settingsPanel,emoteModule,utils,quickEmoteMenu,opublicServers,voiceMode,pluginModule,themeModule,customCssEditor,dMode,jsVersion=1.792,supportedVersion="0.2.81",mainObserver,twitchEmoteUrlStart="https://static-cdn.jtvnw.net/emoticons/v1/",twitchEmoteUrlEnd="/1.0",ffzEmoteUrlStart="https://cdn.frankerfacez.com/emoticon/",ffzEmoteUrlEnd="/1",bttvEmoteUrlStart="https://cdn.betterttv.net/emote/",bttvEmoteUrlEnd="/1x",mainCore,settings={"Save logs locally":{id:"bda-gs-0",info:"Saves chat logs locally",implemented:!1,hidden:!1,cat:"core"},"Public Servers":{id:"bda-gs-1",info:"Display public servers button",implemented:!0,hidden:!1,cat:"core"},"Minimal Mode":{id:"bda-gs-2",info:"Hide elements and reduce the size of elements.",implemented:!0,hidden:!1,cat:"core"},"Voice Mode":{id:"bda-gs-4",info:"Only show voice chat",implemented:!0,hidden:!1,cat:"core"},"Hide Channels":{id:"bda-gs-3",info:"Hide channels in minimal mode",implemented:!0,hidden:!1,cat:"core"},"Dark Mode":{id:"bda-gs-5",info:"Make certain elements dark by default(wip)",implemented:!0,hidden:!1,cat:"core"},"Override Default Emotes":{id:"bda-es-5",info:"Override default emotes",implemented:!1,hidden:!1,cat:"core"},"Voice Disconnect":{id:"bda-dc-0",info:"Disconnect from voice server when closing Discord",implemented:!0,hidden:!1,cat:"core"},"Custom css live update":{id:"bda-css-0",info:"",implemented:!0,hidden:!0,cat:"core"},"Custom css auto udpate":{id:"bda-css-1",info:"",implemented:!0,hidden:!0,cat:"core"},"24 Hour Timestamps":{id:"bda-gs-6",info:"Replace 12hr timestamps with proper ones",implemented:!0,hidden:!1,cat:"core"},"Coloured Text":{id:"bda-gs-7",info:"Make text colour the same as role colour",implemented:!0,hidden:!1,cat:"core"},"BetterDiscord Blue":{id:"bda-gs-b",info:"Replace Discord blue with BD Blue",implemented:!0,hidden:!1,cat:"core"},"Developer Mode":{id:"bda-gs-8",info:"Developer Mode",implemented:!0,hidden:!1,cat:"core"},"Twitch Emotes":{id:"bda-es-7",info:"Show Twitch emotes",implemented:!0,hidden:!1,cat:"emote"},"FrankerFaceZ Emotes":{id:"bda-es-1",info:"Show FrankerFaceZ Emotes",implemented:!0,hidden:!1,cat:"emote"},"BetterTTV Emotes":{id:"bda-es-2",info:"Show BetterTTV Emotes",implemented:!0,hidden:!1,cat:"emote"},"Emote Menu":{id:"bda-es-0",info:"Show Twitch/Favourite emotes in emote menu",implemented:!0,hidden:!1,cat:"emote"},"Emoji Menu":{id:"bda-es-9",info:"Show Discord emoji menu",implemented:!0,hidden:!1,cat:"emote"},"Emote Autocomplete":{id:"bda-es-3",info:"Autocomplete emote commands",implemented:!1,hidden:!1,cat:"emote"},"Emote Auto Capitalization":{id:"bda-es-4",info:"Autocapitalize emote commands",implemented:!0,hidden:!1,cat:"emote"},"Show Names":{id:"bda-es-6",info:"Show emote names on hover",implemented:!0,hidden:!1,cat:"emote"},"Show emote modifiers":{id:"bda-es-8",info:"Enable emote mods",implemented:!0,hidden:!1,cat:"emote"}},links={"Jiiks.net":{text:"Jiiks.net",href:"thtp://jiiks.net",target:"_blank"},twitter:{text:"Twitter",href:"http://twitter.com/jiiksi",target:"_blank"},github:{text:"Github",href:"http://github.com/jiiks",target:"_blank"}},defaultCookie={version:jsVersion,"bda-gs-0":!1,"bda-gs-1":!0,"bda-gs-2":!1,"bda-gs-3":!1,"bda-gs-4":!1,"bda-gs-5":!0,"bda-gs-6":!1,"bda-gs-7":!1,"bda-gs-8":!1,"bda-es-0":!0,"bda-es-1":!0,"bda-es-2":!0,"bda-es-3":!1,"bda-es-4":!1,"bda-es-5":!0,"bda-es-6":!0,"bda-es-7":!0,"bda-gs-b":!0,"bda-es-8":!0,"bda-jd":!0,"bda-es-8":!0,"bda-dc-0":!1,"bda-css-0":!1,"bda-css-1":!1,"bda-es-9":!0},bdchangelog={changes:{"0a":{title:"1.78 : Temp support for new settingspanel",text:"Added temp support for Discord's new settingspanel until v2.",img:""},"0b":{title:"1.78 : Public Servers",text:"New look and flow for public servers",img:""},"0c":{title:"1.78 : New loading icon",text:"New loading icon will now display in bottom right when BD is loading.",img:""},"0d":{title:"1.78 : New CustomCSS editor look",text:"Updated CustomCSS editor with dark theme",img:""},"0e":{title:"1.78 : BetterDiscord Blue",text:"Replace Discord blue with BetterDiscord blue!",img:""}},fixes:{"0a":{title:"1.792 : Fixed settingspanel injection",text:"Still has some minor bugs",img:""},"0b":{title:"1.791 : Restored Buttons",text:"Restored Open Theme Folder and Open Plugin Folder buttons",img:""},"0c":{title:"1.79 : Settings Saving",text:"Fixed settings not saving with new settings panel",img:""}}},settingsCookie={};function Core(){}Core.prototype.init=function(){function n(){if(console.log(new Date().getTime()+" Defer"),0<$(".guilds-wrapper .guilds").children().length){console.log(new Date().getTime()+" Defer Loaded");var c=$(".guilds>li:first-child"),l=$("
";if(null!=bdchangelog.changes){for(var d in n+="

New Stuff

    ",bdchangelog.changes)d=bdchangelog.changes[d],n+="
  • "+d.title+"
    "+d.text+"
  • ";n+="
"}if(null!=bdchangelog.fixes){for(var r in n+="

Fixed

    ",bdchangelog.fixes)r=bdchangelog.fixes[r],n+="
  • "+r.title+"
    "+r.text+"
  • ";n+="
"}if(null!=bdchangelog.upcoming){for(var o in n+="

Coming Soon

    ",bdchangelog.upcoming)o=bdchangelog.upcoming[o],n+="
  • "+o.title+"
    "+o.text+"
  • ";n+="
"}return n+="
",n},Core.prototype.alert=function(n,d){for(var r="",o=0;5>o;o++)r+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".charAt(Math.floor(Math.random()*"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".length));var c="
";$("body").append(c),utils.addBackdrop(r)};var emotesFfz={},emotesBTTV={},emotesTwitch={emote:{id:0}},subEmotesTwitch={};function EmoteModule(){}EmoteModule.prototype.init=function(){},EmoteModule.prototype.getBlacklist=function(){$.getJSON("https://cdn.rawgit.com/Jiiks/betterDiscordApp/"+_hash+"/data/emotefilter.json",function(n){bemotes=n.blacklist})},EmoteModule.prototype.obsCallback=function(n){for(var o,d=this,r=0;r\""+c+"\"").replace(/ï·™/g,""))[0]},EmoteModule.prototype.autoCapitalize=function(){var n=this;$("body").delegate($(".channel-text-area-default textarea:first"),"keyup change paste",function(){if(settingsCookie["bda-es-4"]){var d=$(".channel-text-area-default textarea:first").val();if(void 0!=d){var r=d.split(" ").pop();if(3",{class:"guild",id:"bd-pub-li",css:{height:"20px",display:settingsCookie["bda-gs-1"]?"":"none"}}).append($("
",{class:"guild-inner",css:{height:"20px","border-radius":"4px"}}).append($("",{}).append($("
",{text:"public",id:"bd-pub-button",css:{"line-height":"20px","font-size":"12px"},click:()=>{n.v2p.render()}}))));return d}init(){let n=this,d=$(".guilds>:first-child");d.after(n.button)}get layer(){let n=this,d=``;return d=$(d),d.on("blur",r=>{"bd-pubs-search"===r.relatedTarget.id||(d.focus(),console.log("blur:"),console.log(r))}),d.on("keydown",r=>{if(13===r.which&&"bd-pubs-search"===r.target.id){let o=$("#bd-pubs-layer .ui-tab-bar-item.selected").text();return"All"===o&&(o=""),void n.search(n.query({term:r.target.value,category:o}),!0)}27!==r.which||n.hide()}),d.find(".btn-close").on("click",()=>{n.hide()}),d.find(".ui-tab-bar.SIDE .ui-tab-bar-item").on("click",r=>{let o=r.target.textContent;"All"===o&&(o=""),n.search(n.query({term:$("#bd-pubs-search").val(),category:o}),!0)}),d}serverCard(n){return`
+
+
+
+
+
+
+
+
${n.name}
+
+
+
${n.online}/${n.members} Members
+
+
+
+
+
+
+ ${n.description} +
+
+
+
+
+
${n.categories.join(" ,")}
+ +
+
+
+
`}get bdServerCard(){let n={name:"BetterDiscord",icon:"https://cdn.discordapp.com/icons/86004744966914048/c8d49dc02248e1f55caeb897c3e1a26e.webp",online:"7500+",members:"20000+",description:"Official BetterDiscord support server"};return`
+
+
+
+
+
+
+
+
${n.name}
+
+
+
Too many members
+
+
+
+
+
+
+ ${n.description} +
+
+
+
+
+
+ +
+
+
+
`}getPanel(){return console.log("pubs get panel"),"
"}getPinnedServer(){return console.log("pubs get pinned server"),"
"}hidePinnedServer(){console.log("pubs hide pinned server")}showPinnedServer(){console.log("pubs show pinned server")}show(){let n=this;$(".layers, .layers-20RVFW").append(n.layer)}hide(){$("#bd-pubs-layer").remove()}loadServers(){console.log("pubs load servers")}search(n,d){let r=this,o=$("#bd-pubs-listing");d&&(o.empty(),$("#bd-pubs-listing-container").hide(),$("#bd-pubs-bg-spinner").show()),$.ajax({method:"GET",url:`${r.endPoint}?${n}`,success:c=>{o.append(r.bdServerCard),c.results.map(l=>{o.append(r.serverCard(l))}),$("#bd-pubs-listing-container").show(),$("#bd-pubs-bg-spinner").hide(),r.setSearchText(1,$(".bd-server-card").size(),c.total,null,$("#bd-pubs-search").val())}})}setSearchText(n,d,r,o,c){o||(o=$("#bd-pubs-layer .ui-tab-bar-item.selected").text());let l=`Showing ${n}-${d} of ${r} results in ${o}`;c&&c.length&&(l+=` for: ${c}`),$("#bd-pubs-results").text(l)}get next(){let n=this;if(!n.next)return null}joinServer(){console.log("pubs join")}joinServerDirect(){console.log("pubs join direct")}escape(){console.log("pubs escape")}query(n){return require("querystring").stringify(n)}}function QuickEmoteMenu(){}QuickEmoteMenu.prototype.init=function(){$(document).on("mousedown",function(b){"rmenu"!=b.target.id&&$("#rmenu").remove()}),this.favoriteEmotes={};var n=bdStorage.get("bdfavemotes");""!==n&&null!==n&&(this.favoriteEmotes=JSON.parse(atob(n)));var d="";d+="
",d+=" ",d+=" ",d+="
",this.qmeHeader=d;var r="";for(var o in r+="
",r+="
",r+="
",r+="
",emotesTwitch)if(emotesTwitch.hasOwnProperty(o)){var c=emotesTwitch[o].id;r+="
",r+=" \"\"",r+=" ",r+="
"}r+="
",r+="
",r+="
",r+="
",this.teContainer=r;var l="";for(var o in l+="
",l+="
",l+="
",l+="
",this.favoriteEmotes){var u=this.favoriteEmotes[o];l+="
",l+=" \"\"",l+=" ",l+="
"}l+="
",l+="
",l+="
",l+="
",this.faContainer=l},QuickEmoteMenu.prototype.favContext=function(n,d){n.stopPropagation();var r=$("
",{id:"rmenu","data-emoteid":$(d).prop("title"),text:"Remove"});return r.css({top:n.pageY-$("#bda-qem-favourite-container").offset().top,left:n.pageX-$("#bda-qem-favourite-container").offset().left}),$(d).parent().append(r),r.on("click",function(o){return o.preventDefault(),o.stopPropagation(),$(this).remove(),delete quickEmoteMenu.favoriteEmotes[$(this).data("emoteid")],quickEmoteMenu.updateFavorites(),!1}),!1},QuickEmoteMenu.prototype.switchHandler=function(n){this.switchQem($(n).attr("id"))},QuickEmoteMenu.prototype.switchQem=function(n){var d=$("#bda-qem-twitch"),r=$("#bda-qem-favourite"),o=$("#bda-qem-emojis");d.removeClass("active"),r.removeClass("active"),o.removeClass("active"),$(".emoji-picker").hide(),$("#bda-qem-favourite-container").hide(),$("#bda-qem-twitch-container").hide();"bda-qem-twitch"===n?(d.addClass("active"),$("#bda-qem-twitch-container").show()):"bda-qem-favourite"===n?(r.addClass("active"),$("#bda-qem-favourite-container").show()):"bda-qem-emojis"===n?(o.addClass("active"),$(".emoji-picker").show()):void 0;this.lastTab=n;var c=$(".emote-icon");c.off(),c.on("click",function(){var l=$(this).attr("title"),u=$(".channel-text-area-default textarea");u.val(" "==u.val().slice(-1)?u.val()+l:u.val()+" "+l)})},QuickEmoteMenu.prototype.obsCallback=function(n){if(settingsCookie["bda-es-9"]?n.removeClass("bda-qme-hidden"):n.addClass("bda-qme-hidden"),!!settingsCookie["bda-es-0"]){this;n.prepend(this.qmeHeader),n.append(this.teContainer),n.append(this.faContainer),void 0==this.lastTab&&(this.lastTab="bda-qem-favourite"),this.switchQem(this.lastTab)}},QuickEmoteMenu.prototype.favorite=function(n,d){this.favoriteEmotes.hasOwnProperty(n)||(this.favoriteEmotes[n]=d),this.updateFavorites()},QuickEmoteMenu.prototype.updateFavorites=function(){var n="";for(var d in n+="
",n+="
",n+="
",n+="
",this.favoriteEmotes){var r=this.favoriteEmotes[d];n+="
",n+=" \"\"",n+=" ",n+="
"}n+="
",n+="
",n+="
",n+="
",this.faContainer=n,$("#bda-qem-favourite-container").replaceWith(n),window.bdStorage.set("bdfavemotes",btoa(JSON.stringify(this.favoriteEmotes)))};function CustomCssEditor(){}CustomCssEditor.prototype.init=function(){var n=this;n.hideBackdrop=!1,n.editor=CodeMirror.fromTextArea(document.getElementById("bd-custom-css-ta"),{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}),n.editor.on("change",function(o){var c=o.getValue();n.applyCustomCss(c,!1,!1)});var d="";d+="
",d+="
    ",d+="
  • ",d+="
    ",d+="
    ",d+=" Live Update",d+="
    ",d+="
  • ",d+="
  • ",d+="
    ",d+="
    ",d+=" TEMPDISABLED",d+="
    ",d+="
  • ",d+="
  • ",d+="
    ",d+="
    ",d+=" Hide Backdrop",d+="
    ",d+="
  • ",d+="
",d+="
",d+=" ",d+=" ",d+=" ",d+="
",d+="
",this.attachEditor=d,$("#bd-customcss-innerpane").append(d),$("#bd-customcss-detached-update").on("click",function(){return n.applyCustomCss(n.editor.getValue(),!0,!1),!1}),$("#bd-customcss-detached-save").on("click",function(){return n.applyCustomCss(n.editor.getValue(),!1,!0),!1});var r="";r+="
",r+="
",r+="
",r+="
",this.detachedEditor=r},CustomCssEditor.prototype.attach=function(){$("#editor-detached").hide(),$("#app-mount").removeClass("bd-detached-editor"),$("#bd-customcss-pane").append($("#bd-customcss-innerpane")),$("#bd-customcss-detached-detach").show(),$("#bd-customcss-detach-container").remove()},CustomCssEditor.prototype.detach=function(){this;this.attach(),$("#editor-detached").show(),$("#bd-customcss-detached-detach").hide(),$("#app-mount").addClass("bd-detached-editor"),$(".app").parent().append(this.detachedEditor),$("#bd-customcss-detach-editor").append($("#bd-customcss-innerpane"))},CustomCssEditor.prototype.applyCustomCss=function(n,d,r){0==$("#customcss").length&&$("head").append(""),(d||settingsCookie["bda-css-0"])&&$("#customcss").html(n),r&&window.bdStorage.set("bdcustomcss",btoa(n))};var settingsButton=null,panel=null;function SettingsPanel(){utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/codemirror.min.js"),utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/mode/css/css.min.js"),utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/addon/scroll/simplescrollbars.min.js"),utils.injectCss("https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/addon/scroll/simplescrollbars.min.css"),utils.injectCss("https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.25.0/theme/material.min.css"),utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.4.2/Sortable.min.js")}SettingsPanel.prototype.init=function(){var n=this;n.v2SettingsPanel=new V2_SettingsPanel,n.construct();var d=$("body");settingsCookie["bda-es-0"]?$("#twitchcord-button-container").show():$("#twitchcord-button-container").hide(),settingsCookie["bda-gs-2"]?d.addClass("bd-minimal"):d.removeClass("bd-minimal"),settingsCookie["bda-gs-3"]?d.addClass("bd-minimal-chan"):d.removeClass("bd-minimal-chan"),settingsCookie["bda-gs-4"]&&voiceMode.enable(),settingsCookie["bda-gs-5"]&&$("#app-mount").addClass("bda-dark"),settingsCookie["bda-es-6"]?(emoteNamePopup=$("
"),$(document).on("mouseover",".emote",function(){var r=$(this).offset(),o=$(this).attr("alt");$(emoteNamePopup).find(".tipsy-inner").text(o),$(emoteNamePopup).css("left",r.left-25),$(emoteNamePopup).css("top",r.top-37),$(".app").append($(emoteNamePopup))}),$(document).on("mouseleave",".emote",function(){$(".tipsy").remove()})):$(document).off("mouseover",".emote"),settingsCookie["bda-gs-8"]?dMode.enable():dMode.disable(),settingsCookie["bda-gs-b"]?$("body").addClass("bd-blue"):$("body").removeClass("bd-blue")};var customCssInitialized=!1,lastTab="";SettingsPanel.prototype.changeTab=function(n){this;lastTab=n;$("#bd-control-groups");switch($(".bd-tab").removeClass("selected"),$(".bd-pane").hide(),$("#"+n).addClass("selected"),$("#"+n.replace("tab","pane")).show(),n){case"bd-settings-tab":$(".bda-slist-top").show();break;case"bd-emotes-tab":$(".bda-slist-top").show();break;case"bd-customcss-tab":$(".bda-slist-top").show(),customCssInitialized||(customCssEditor.init(),customCssInitialized=!0);break;case"bd-themes-tab":$(".bda-slist-top:first").hide();break;case"bd-plugins-tab":$(".bda-slist-top:first").hide();break;default:$(".bda-slist-top").show();}},SettingsPanel.prototype.updateSetting=function(n){var d=$(n).children().find("input[type=\"checkbox\"]"),r=!d.is(":checked"),o=d.attr("id");d.prop("checked",r),"bda-css-2"==o&&($("#app-mount").removeClass("bd-hide-bd"),customCssEditor.hideBackdrop=r,r&&$("#app-mount").addClass("bd-hide-bd")),"bda-gs-8"==o&&r&&mainCore.alert("Developer Mode Enabled","Use F8 to break/resume execution
More coming soon"),settingsCookie[o]=r,this.updateSettings()},SettingsPanel.prototype.updateSettings=function(){settingsCookie["bda-es-0"]?$("#twitchcord-button-container").show():$("#twitchcord-button-container").hide(),settingsCookie["bda-gs-b"]?$("body").addClass("bd-blue"):$("body").removeClass("bd-blue"),settingsCookie["bda-gs-2"]?$("body").addClass("bd-minimal"):$("body").removeClass("bd-minimal"),settingsCookie["bda-gs-3"]?$("body").addClass("bd-minimal-chan"):$("body").removeClass("bd-minimal-chan"),settingsCookie["bda-gs-1"]?$("#bd-pub-li").show():$("#bd-pub-li").hide(),settingsCookie["bda-gs-4"]?voiceMode.enable():voiceMode.disable(),$("#app-mount").removeClass("bda-dark"),settingsCookie["bda-gs-5"]&&$("#app-mount").addClass("bda-dark"),settingsCookie["bda-es-6"]?(emoteNamePopup=$("
"),$(document).on("mouseover",".emote",function(){var n=$(this).offset(),d=$(this).attr("alt");$(emoteNamePopup).find(".tipsy-inner").text(d),$(emoteNamePopup).css("left",n.left-25),$(emoteNamePopup).css("top",n.top-32),$("div[data-reactid='.0.1.1']").append($(emoteNamePopup))}),$(document).on("mouseleave",".emote",function(){$(".tipsy").remove()})):$(document).off("mouseover",".emote"),settingsCookie["bda-gs-8"]?dMode.enable():dMode.disable(),mainCore.saveSettings()},SettingsPanel.prototype.construct=function(){var d=this;panel=$("
",{id:"bd-pane",class:"settings-inner",css:{display:"none"}});var r="
",settingsButton=$("
",{class:"tab-bar-item",text:"BetterDiscord",id:"bd-settings-new",click:function(){$(".tab-bar-item").removeClass("selected"),settingsButton.addClass("selected"),$(".form .settings-right .settings-inner").first().hide(),panel.show(),""==lastTab?d.changeTab("bd-settings-tab"):d.changeTab(lastTab)}}),panel.html(r),this.panel=panel},SettingsPanel.prototype.inject=function(n){if(!this.injectNew(n)&&"childList"==n.type&&!(0>=n.addedNodes.length)&&!(0>=$(n.addedNodes[0]).find(".user-settings-modal").length)){var d=this;this.panel.hide();var r=$(".tab-bar.SIDE").first();$(".tab-bar.SIDE .tab-bar-item").click(function(){$(".form .settings-right .settings-inner").first().show(),$("#bd-settings-new").removeClass("selected"),d.panel.hide()}),r.append(settingsButton),$(".form .settings-right .settings-inner").last().after(d.panel),$("#bd-settings-new").removeClass("selected")}},SettingsPanel.prototype.injectNew=function(n){let d=this;if(n.target.classList.contains("layers")||n.target.classList.contains("layers-20RVFW")){if($(".guild-settings-base-section").length)try{n.addedNodes[0].setAttribute("layer-id","server-settings")}catch(r){}if($(".socialLinks-1oZoF3").length){try{n.addedNodes[0].setAttribute("layer-id","user-settings")}catch(r){}if(!$("#bd-settings-sidebar").length)return d.v2SettingsPanel.renderSidebar(),!0}}},SettingsPanel.prototype.versionInfo=function(){let n=this,d=$("
",{class:"bd-versioninfo-wrapper"}).append($("",{text:`BetterDiscord v${"undefined"==typeof version?bdVersion:version}:${jsVersion} by `})).append($("",{text:"Jiiks",href:"https://google.com",target:"_blank"}));return d},SettingsPanel.prototype.tabBarNew=function(){let n=this,d=$("
",{class:"tab-bar TOP",style:"border-bottom:none"});return[{id:"bd-core",text:"Core"},{id:"bd-emotes",text:"Emotes"},{id:"bd-customcss",text:"Custom CSS"},{id:"bd-plugins",text:"Plugins"},{id:"bd-themes",text:"Themes"}].map(o=>{d.append($("
",{class:"tab-bar-item bd-tab",text:o.text,id:o.id,click:()=>n.changeTabNew(o.id)}))}),d},SettingsPanel.prototype.changeTabNew=function(n){$(".bd-tab").removeClass("selected"),$(`#${n}`).addClass("selected"),$(".bd-pane").hide(),$(`#${n}-pane`).show(),"bd-customcss"!==n||customCssInitialized||(customCssEditor.init(),customCssInitialized=!0)},SettingsPanel.prototype.updateSettingNew=function(n,d){"bda-css-2"==n&&($("#app-mount").removeClass("bd-hide-bd"),customCssEditor.hideBackdrop=d,d&&$("#app-mount").addClass("bd-hide-bd")),"bda-gs-8"==n&&d&&mainCore.alert("Developer Mode Enabled","Use F8 to break/resume execution
More coming soon"),settingsCookie[n]=d,this.updateSettings()},SettingsPanel.prototype.settingsSwitch=function(n){let d=this,r=settings[n];return $("
",{class:"ui-flex flex-vertical flex-justify-start flex-align-stretch flex-nowrap ui-switch-item"}).append($("
",{class:"ui-flex flex-horizontal flex-justify-start flex-align-stretch flex-nowrap"}).append($("

",{class:"ui-form-title h3 margin-reset margin-reset ui-flex-child",text:n})).append($("