BetterDiscordApp-v1/js/main.min.js

128 lines
103 KiB
JavaScript

(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=$("<button/>",{class:"btn",id:"bd-show-channels",text:"R",css:{cursor:"pointer"},click:function(){settingsCookie["bda-gs-3"]=!1,$("body").removeClass("bd-minimal-chan"),d.saveSettings()}});if($(".guilds-wrapper").prepend(l),opublicServers=new PublicServers,customCssEditor=new CustomCssEditor,pluginModule=new PluginModule,pluginModule.loadPlugins(),"undefined"!=typeof themesupport2&&(themeModule=new ThemeModule,themeModule.loadThemes()),settingsPanel=new SettingsPanel,settingsPanel.init(),quickEmoteMenu.init(!1),$("#tc-settings-button").on("click",function(){settingsPanel.show()}),window.addEventListener("beforeunload",function(){settingsCookie["bda-dc-0"]&&$(".btn.btn-disconnect").click()}),$(document).on("mousedown",function(){}),opublicServers.init(),emoteModule.autoCapitalize(),settingsCookie.version<jsVersion){d.constructChangelog();settingsCookie.version=jsVersion,d.saveSettings()}$("head").append("<style>.CodeMirror{ min-width:100%; }</style>"),$("head").append("<style id=\"bdemotemenustyle\"></style>"),document.getElementsByClassName("bd-loaderv2")[0].remove()}else setTimeout(n,100)}var d=this,r="undefined"==typeof version?bdVersion:version;if(r<supportedVersion)return void this.alert("Not Supported","BetterDiscord v"+r+"(your version) is not supported by the latest js("+jsVersion+").<br><br> Please download the latest version from <a href='https://betterdiscord.net' target='_blank'>BetterDiscord.net</a>");utils=new Utils;var o=new BdWSocket;o.start(),utils.getHash(),emoteModule=new EmoteModule,quickEmoteMenu=new QuickEmoteMenu,voiceMode=new VoiceMode,dMode=new devMode,emoteModule.init(),this.initSettings(),this.initObserver(),$(document).ready(function(){setTimeout(n,1e3)})},Core.prototype.initSettings=function(){if(void 0==$.cookie("better-discord"))settingsCookie=defaultCookie,this.saveSettings();else for(var n in this.loadSettings(),defaultCookie)void 0==settingsCookie[n]&&(settingsCookie[n]=defaultCookie[n],this.saveSettings())},Core.prototype.saveSettings=function(){$.cookie("better-discord",JSON.stringify(settingsCookie),{expires:365,path:"/"})},Core.prototype.loadSettings=function(){settingsCookie=JSON.parse($.cookie("better-discord"))};var botlist=["119598467310944259"];Core.prototype.initObserver=function(){mainObserver=new MutationObserver(function(n){n.forEach(function(d){if(void 0!==settingsPanel&&settingsPanel.inject(d),$(d.target).find(".emoji-picker").length){var r=d.target.firstChild;r.classList.contains("popout")&&quickEmoteMenu.obsCallback($(r))}"undefined"!=typeof pluginModule&&pluginModule.rawObserver(d),null!=d.target.getAttribute("class")&&((d.target.classList.contains("title-wrap")||d.target.classList.contains("chat"))&&(voiceMode.obsCallback(),"undefined"!=typeof pluginModule&&pluginModule.channelSwitch()),-1!=d.target.getAttribute("class").indexOf("scroller messages")&&"undefined"!=typeof pluginModule&&pluginModule.newMessage(),settingsCookie["bda-gs-6"]&&$(".timestamp").not("[data-24]").each(function(){var o=$(this);o.attr("data-24",!0);var c=o.text(),l=/(.*)?at\s+(\d{1,2}):(\d{1,2})\s+(.*)/.exec(c);if(null==l)return!0;if(5>l.length)return!0;var u=parseInt(l[2]);"AM"==l[4]?12==u&&(u-=12):"PM"==l[4]&&12>u&&(u+=12),l[2]=("0"+u).slice(-2),o.text(l[1]+" at "+l[2]+":"+l[3])}),settingsCookie["bda-gs-7"]&&$(".user-name").not("[data-colour]").each(function(){var o=$(this),c=o.css("color");return"rgb(255, 255, 255)"==c||void o.closest(".message-group").find(".markup").not("[data-colour]").each(function(){$(this).attr("data-colour",!0),$(this).css("color",c)})})),emoteModule.obsCallback(d)})}),mainObserver.observe(document,{childList:!0,subtree:!0})},Core.prototype.constructChangelog=function(){var n="<div id=\"bd-wn-modal\" class=\"modal\" style=\"opacity:1;\"> <div class=\"modal-inner\"> <div id=\"bdcl\" class=\"markdown-modal change-log\"> <div class=\"markdown-modal-header\"> <strong>What's new in BetterDiscord JS"+jsVersion+"</strong> <button class=\"markdown-modal-close\" onclick='$(\"#bd-wn-modal\").remove();'></button> </div><!--header--> <div class=\"scroller-wrap\"> <div class=\"scroller\">";if(null!=bdchangelog.changes){for(var d in n+="<h1 class=\"changelog-added\"> <span>New Stuff</span></h1><ul>",bdchangelog.changes)d=bdchangelog.changes[d],n+="<li> <strong>"+d.title+"</strong> <div>"+d.text+"</div></li>";n+="</ul>"}if(null!=bdchangelog.fixes){for(var r in n+="<h1 class=\"changelog-fixed\"> <span>Fixed</span></h1><ul>",bdchangelog.fixes)r=bdchangelog.fixes[r],n+="<li> <strong>"+r.title+"</strong> <div>"+r.text+"</div></li>";n+="</ul>"}if(null!=bdchangelog.upcoming){for(var o in n+="<h1 class=\"changelog-in-progress\"> <span>Coming Soon</span></h1><ul>",bdchangelog.upcoming)o=bdchangelog.upcoming[o],n+="<li> <strong>"+o.title+"</strong> <div>"+o.text+"</div></li>";n+="</ul>"}return n+=" </div><!--scoller--> </div><!--scroller-wrap--> <div class=\"footer\"> </div><!--footer--> </div><!--change-log--> </div><!--modal-inner--></div><!--modal-->",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=" <div id=\"bda-alert-"+r+"\" class=\"modal bda-alert\" style=\"opacity:1\" data-bdalert=\""+r+"\"> <div class=\"modal-inner\" style=\"box-shadow:0 0 8px -2px #000;\"> <div class=\"markdown-modal\"> <div class=\"markdown-modal-header\"> <strong style=\"float:left\"><span>BetterDiscord - </span><span>"+n+"</span></strong> <span></span> <button class=\"markdown-modal-close\" onclick='document.getElementById(\"bda-alert-"+r+"\").remove(); utils.removeBackdrop(\""+r+"\");'></button> </div> <div class=\"scroller-wrap fade\"> <div style=\"font-weight:700\" class=\"scroller\">"+d+"</div> </div> <div class=\"markdown-modal-footer\"> <span style=\"float:right\"> for support.</span> <a style=\"float:right\" href=\"https://discord.gg/0Tmfo5ZbOR9NxvDd\" target=\"_blank\">#support</a> <span style=\"float:right\">Join </span> </div> </div> </div> </div> ";$("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<n.addedNodes.length;++r)if(o=n.addedNodes.item(r),o){var c=d.getNodes(o);for(var l in c)if(c.hasOwnProperty(l)){var u=c[l].parentElement;u&&u.classList.contains("edited")?d.injectEmote(u):d.injectEmote(c[l])}}},EmoteModule.prototype.getNodes=function(n){for(var d,r=[],o=document.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,!1);d=o.nextNode();)r.push(d);return r};var bemotes=[],spoilered=[];EmoteModule.prototype.injectEmote=function(n){function d(){var c=o.contents();c.each(function(l){if(void 0!=c[l]){var u=c[l].nodeValue;if(null!=u&&8!=c[l].nodeType){c.splice(l,1);var b=u.split(/([^\s]+)([\s]|$)/g).filter(function(E){return E}),g=0,f=!1,y=null;if(b.forEach(function(E,S,N){-1<E.indexOf("[!s]")&&(E=E.replace("[!s]",""),o.data("spoilered",!1),o.addClass("spoiler"));var D="",j=!1,O=E;if(-1<E.indexOf(":")){var B=E.split(":");""!=B[0]&&""!=B[1]&&(-1<["flip","spin","pulse","spin2","spin3","1spin","2spin","3spin","tr","bl","br","shake","shake2","shake3","flap"].indexOf(B[1])&&(O=B[0],D=settingsCookie["bda-es-8"]?"emote"+B[1]:""),"bttv"==B[1]&&(O=B[0],j=!0))}if(-1==$.inArray(O,bemotes)){if(settingsCookie["bda-es-7"]&&emotesTwitch.hasOwnProperty(O)&&4<=O.length){null!=y&&(c.splice(l+g++,0,document.createTextNode(y)),y=null);var A=twitchEmoteUrlStart+emotesTwitch[O].id+twitchEmoteUrlEnd;return c.splice(l+g++,0,r.createEmoteElement(O,A,D)),void(f=!0)}if(settingsCookie["bda-es-7"]&&subEmotesTwitch.hasOwnProperty(O)&&4<=O.length){null!=y&&(c.splice(l+g++,0,document.createTextNode(y)),y=null);var A=twitchEmoteUrlStart+subEmotesTwitch[O]+twitchEmoteUrlEnd;return c.splice(l+g++,0,r.createEmoteElement(O,A,D)),void(f=!0)}if(settingsCookie["bda-es-2"]&&emotesBTTV.hasOwnProperty(O)&&4<=O.length){null!=y&&(c.splice(l+g++,0,document.createTextNode(y)),y=null);var A=emotesBTTV[O];return c.splice(l+g++,0,r.createEmoteElement(O,A,D)),void(f=!0)}if(settingsCookie["bda-es-1"]&&(!j||!emotesBTTV2.hasOwnProperty(O))&&emotesFfz.hasOwnProperty(O)&&4<=O.length){null!=y&&(c.splice(l+g++,0,document.createTextNode(y)),y=null);var A=ffzEmoteUrlStart+emotesFfz[O]+ffzEmoteUrlEnd;return c.splice(l+g++,0,r.createEmoteElement(O,A,D)),void(f=!0)}if("undefined"!=typeof emotesBTTV2&&settingsCookie["bda-es-2"]&&emotesBTTV2.hasOwnProperty(O)&&4<=O.length){null!=y&&(c.splice(l+g++,0,document.createTextNode(y)),y=null);var A=bttvEmoteUrlStart+emotesBTTV2[O]+bttvEmoteUrlEnd;return j&&emotesFfz.hasOwnProperty(O)&&(O+=":bttv"),c.splice(l+g++,0,r.createEmoteElement(O,A,D)),void(f=!0)}}null==y?y=E:y+=""+E,S===N.length-1&&c.splice(l+g,0,document.createTextNode(y))}),f){var k=o.outerHeight();o.html(c);var C=$(".scroller.messages").first();C.scrollTop(C.scrollTop()+(o.outerHeight()-k))}}}})}var r=this;if(n.parentElement){var o=$(n).parent();(o.hasClass("markup")||o.hasClass("message-content"))&&(d(),o.children().hasClass("edited")&&setTimeout(d,250))}},EmoteModule.prototype.createEmoteElement=function(n,d,r){var o=Math.round(n.length/4),c=n.substr(0,o)+"\uFDD9"+n.substr(o,o)+"\uFDD9"+n.substr(2*o,o)+"\uFDD9"+n.substr(3*o);return $.parseHTML(("<span class=\"emotewrapper\"><img draggable=\"false\" style=\"max-height:32px;\" class=\"emote "+r+"\" alt=\""+c+"\" src=\""+d+"\"/><input onclick='quickEmoteMenu.favorite(\""+c+"\", \""+d+"\");' class=\"fav\" title=\"Favorite!\" type=\"button\"></span>").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<r.length){if("danSgame"==r)return;var o=n.capitalize(r.toLowerCase());null!==o&&void 0!==o&&$(".channel-text-area-default textarea:first").val(d.replace(r,o))}}}})},EmoteModule.prototype.capitalize=function(n){var d=emotesTwitch;for(var r in d)if(d.hasOwnProperty(r)&&n==(r+"").toLowerCase())return r};class PublicServers{constructor(){this.v2p=new V2_PublicServers}get endPoint(){return"https://search.discordservers.com"}get button(){let n=this,d=$("<div/>",{class:"guild",id:"bd-pub-li",css:{height:"20px",display:settingsCookie["bda-gs-1"]?"":"none"}}).append($("<div/>",{class:"guild-inner",css:{height:"20px","border-radius":"4px"}}).append($("<a/>",{}).append($("<div/>",{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=`<div id="bd-pubs-layer" class="layer bd-layer" tabindex="0">
<div class="ui-standard-sidebar-view">
<div class="sidebar-region">
<div class="scroller-wrap fade dark">
<div class="scroller">
<div class="sidebar">
<div class="ui-tab-bar SIDE">
<div class="ui-tab-bar-header" style="font-size: 16px;">Public Servers</div>
<div class="ui-tab-bar-separator margin-top-8 margin-bottom-8"></div>
<div class="ui-form-item">
<div class="ui-text-input flex-vertical" style="width: 186px; margin-left: 10px;">
<input type="text" class="input default" id="bd-pubs-search" name="bd-pubs-search" value="" placeholder="Search..." maxlength="999">
</div>
</div>
<div class="ui-tab-bar-separator margin-top-8 margin-bottom-8"></div>
<div class="ui-tab-bar-header">Categories</div>
<div class="ui-tab-bar-item selected">All</div>
<div class="ui-tab-bar-item">FPS Games</div>
<div class="ui-tab-bar-item">MMO Games</div>
<div class="ui-tab-bar-item">Strategy Games</div>
<div class="ui-tab-bar-item">Sports Games</div>
<div class="ui-tab-bar-item">Puzzle Games</div>
<div class="ui-tab-bar-item">Retro Games</div>
<div class="ui-tab-bar-item">Party Games</div>
<div class="ui-tab-bar-item">Tabletop Games</div>
<div class="ui-tab-bar-item">Sandbox Games</div>
<div class="ui-tab-bar-item">Simulation Games</div>
<div class="ui-tab-bar-item">Community</div>
<div class="ui-tab-bar-item">Language</div>
<div class="ui-tab-bar-item">Programming</div>
<div class="ui-tab-bar-item">Other</div>
<div class="ui-tab-bar-separator margin-top-8 margin-bottom-8"></div>
<div class="ui-tab-bar-header" style="font-size: 9px;font-weight: 700;">Listing provided by: <a href="https://discordservers.com" target="_blank">Discordservers.com</a></div>
</div>
</div>
</div>
</div>
</div>
<div class="content-region">
<div class="scroller-wrap fade dark">
<div class="scroller">
<div class="content-column" id="bd-pubs-bg-spinner">
<div style="height: 100vh; margin: -60px -40px;">
<span class="spinner" type="wandering-cubes" style="top: 50%;position: relative;left: 50%;transform: translate(-50%, -50%);">
<span class="spinner-inner spinner-wandering-cubes">
<span class="spinner-item"></span>
<span class="spinner-item"></span>
</span>
</span>
</div>
</div>
<div class="content-column" id="bd-pubs-listing-container" style="display:none;">
<span id="bd-pubs-results" style="color: #72767d;font-weight: 700;"></span>
<div id="bd-pubs-listing"></div>
</div>
<div class="tools">
<div class="btn-close">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12" style="width: 18px; height: 18px;"><g class="background" fill="none" fill-rule="evenodd"><path d="M0 0h12v12H0"></path><path class="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"></path></g></svg>
</div>
<div class="esc-text">ESC</div>
</div>
</div>
</div>
</div>
</div>
</div>`;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`<div class="ui-card ui-card-primary bd-server-card" style="margin-top: 5px">
<div class="ui-flex horizontal" style="display: flex; flex-flow: row nowrap; justify-content: flex-start; align-items: stretch; flex: 1 1 auto;">
<div class="ui-flex-child" style="flex: 0 1 auto; padding: 5px;">
<div class="bd-pubs-server-icon" style="width: 100px; height: 100px; background-size: cover; background-image: url(${n.icon})"></div>
</div>
<div class="ui-flex-child" style="flex: 1 1 auto; padding: 5px;">
<div class="ui-flex horizontal">
<div class="ui-form-item" style="flex: 1 1 auto">
<h5 class="ui-form-title h5 margin-reset">${n.name}</h5>
</div>
<div class="ui-form-item">
<h5 class="ui-form-title h5 margin-reset">${n.online}/${n.members} Members</h5>
</div>
</div>
<div class="ui-flex horizontal">
<div class="scroller-wrap fade dark" style="min-height: 60px; max-height: 60px; border-top: 1px solid #3f4146; border-bottom: 1px solid #3f4146; padding-top: 5px">
<div class="scoller">
<div style="font-size: 13px; color: #b9bbbe">
${n.description}
</div>
</div>
</div>
</div>
<div class="ui-flex horizontal">
<div class="ui-flex-child bd-server-tags" style="flex: 1 1 auto">${n.categories.join(" ,")}</div>
<button type="button" class="ui-button filled brand small grow" style="min-height: 12px; margin-top: 4px;">
<div class="ui-button-contents">Join</div>
</button>
</div>
</div>
</div>
</div>`}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`<div class="ui-card ui-card-primary bd-server-card" style="margin-top: 5px">
<div class="ui-flex horizontal" style="display: flex; flex-flow: row nowrap; justify-content: flex-start; align-items: stretch; flex: 1 1 auto;">
<div class="ui-flex-child" style="flex: 0 1 auto; padding: 5px;">
<div class="bd-pubs-server-icon" style="width: 100px; height: 100px; background-size: cover; background-image: url(${n.icon})"></div>
</div>
<div class="ui-flex-child" style="flex: 1 1 auto; padding: 5px;">
<div class="ui-flex horizontal">
<div class="ui-form-item" style="flex: 1 1 auto">
<h5 class="ui-form-title h5 margin-reset">${n.name}</h5>
</div>
<div class="ui-form-item">
<h5 class="ui-form-title h5 margin-reset">Too many members</h5>
</div>
</div>
<div class="ui-flex horizontal">
<div class="scroller-wrap fade dark" style="min-height: 60px; max-height: 60px; border-top: 1px solid #3f4146; border-bottom: 1px solid #3f4146; padding-top: 5px">
<div class="scoller">
<div style="font-size: 13px; color: #b9bbbe">
${n.description}
</div>
</div>
</div>
</div>
<div class="ui-flex horizontal">
<div class="ui-flex-child bd-server-tags" style="flex: 1 1 auto"></div>
<button type="button" class="ui-button filled brand small grow" style="min-height: 12px; margin-top: 4px;">
<div class="ui-button-contents">Join</div>
</button>
</div>
</div>
</div>
</div>`}getPanel(){return console.log("pubs get panel"),"<div></div>"}getPinnedServer(){return console.log("pubs get pinned server"),"<div></div>"}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+="<div id=\"bda-qem\">",d+=" <button class=\"active\" id=\"bda-qem-twitch\" onclick='quickEmoteMenu.switchHandler(this); return false;'>Twitch</button>",d+=" <button id=\"bda-qem-favourite\" onclick='quickEmoteMenu.switchHandler(this); return false;'>Favourite</button>",d+=" <button id=\"bda-qem-emojis\" onclick='quickEmoteMenu.switchHandler(this); return false;'>Emojis</buttond>",d+="</div>",this.qmeHeader=d;var r="";for(var o in r+="<div id=\"bda-qem-twitch-container\">",r+=" <div class=\"scroller-wrap fade\">",r+=" <div class=\"scroller\">",r+=" <div class=\"emote-menu-inner\">",emotesTwitch)if(emotesTwitch.hasOwnProperty(o)){var c=emotesTwitch[o].id;r+="<div class=\"emote-container\">",r+=" <img class=\"emote-icon\" id=\""+o+"\" alt=\"\" src=\"https://static-cdn.jtvnw.net/emoticons/v1/"+c+"/1.0\" title=\""+o+"\">",r+=" </img>",r+="</div>"}r+=" </div>",r+=" </div>",r+=" </div>",r+="</div>",this.teContainer=r;var l="";for(var o in l+="<div id=\"bda-qem-favourite-container\">",l+=" <div class=\"scroller-wrap fade\">",l+=" <div class=\"scroller\">",l+=" <div class=\"emote-menu-inner\">",this.favoriteEmotes){var u=this.favoriteEmotes[o];l+="<div class=\"emote-container\">",l+=" <img class=\"emote-icon\" alt=\"\" src=\""+u+"\" title=\""+o+"\" oncontextmenu='quickEmoteMenu.favContext(event, this);'>",l+=" </img>",l+="</div>"}l+=" </div>",l+=" </div>",l+=" </div>",l+="</div>",this.faContainer=l},QuickEmoteMenu.prototype.favContext=function(n,d){n.stopPropagation();var r=$("<div/>",{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+="<div id=\"bda-qem-favourite-container\">",n+=" <div class=\"scroller-wrap fade\">",n+=" <div class=\"scroller\">",n+=" <div class=\"emote-menu-inner\">",this.favoriteEmotes){var r=this.favoriteEmotes[d];n+="<div class=\"emote-container\">",n+=" <img class=\"emote-icon\" alt=\"\" src=\""+r+"\" title=\""+d+"\" oncontextmenu='quickEmoteMenu.favContext(event, this);'>",n+=" </img>",n+="</div>"}n+=" </div>",n+=" </div>",n+=" </div>",n+="</div>",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+="<div id=\"bd-customcss-attach-controls\">",d+=" <ul class=\"checkbox-group\">",d+=" <li>",d+=" <div class=\"checkbox\" onclick=\"settingsPanel.updateSetting(this);\">",d+=" <div class=\"checkbox-inner\"><input id=\"bda-css-0\" type=\"checkbox\" "+(settingsCookie["bda-css-0"]?"checked":"")+"><span></span></div>",d+=" <span title=\"Update client css while typing\">Live Update</span>",d+=" </div>",d+=" </li>",d+=" <li>",d+=" <div class=\"checkbox\" onclick=\"settingsPanel.updateSetting(this);\">",d+=" <div class=\"checkbox-inner\"><input id=\"bda-css-1\" type=\"checkbox\" "+(settingsCookie["bda-css-1"]?"checked":"")+"><span></span></div>",d+=" <span title=\"Autosave css to storage when typing\">TEMPDISABLED</span>",d+=" </div>",d+=" </li>",d+=" <li>",d+=" <div class=\"checkbox\" onclick=\"settingsPanel.updateSetting(this);\">",d+=" <div class=\"checkbox-inner\"><input id=\"bda-css-2\" type=\"checkbox\" "+(customCssEditor.hideBackdrop?"checked":"")+"><span></span></div>",d+=" <span title=\"Hide the callout backdrop to disable modal close events\">Hide Backdrop</span>",d+=" </div>",d+=" </li>",d+=" </ul>",d+=" <div id=\"bd-customcss-detach-controls-buttons\">",d+=" <button class=\"btn btn-primary\" id=\"bd-customcss-detached-update\" onclick=\"return false;\">Update</button>",d+=" <button class=\"btn btn-primary\" id=\"bd-customcss-detached-save\" onclick=\"return false;\">Save</button>",d+=" <button class=\"btn btn-primary\" id=\"bd-customcss-detached-detach\" onclick=\"customCssEditor.detach(); return false;\">Detach</button>",d+=" </div>",d+="</div>",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+="<div id=\"bd-customcss-detach-container\">",r+=" <div id=\"bd-customcss-detach-editor\">",r+=" </div>",r+="</div>",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("<style id=\"customcss\"></style>"),(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=$("<div class='tipsy tipsy-se' style='display: block; top: 82px; left: 1630.5px; visibility: visible; opacity: 0.8;'><div class='tipsy-inner'></div></div>"),$(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<br>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=$("<div class='tipsy tipsy-se' style='display: block; top: 82px; left: 1630.5px; visibility: visible; opacity: 0.8;'><div class='tipsy-inner'></div></div>"),$(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=$("<div/>",{id:"bd-pane",class:"settings-inner",css:{display:"none"}});var r=" <div class=\"scroller-wrap\"> <div class=\"scroller settings-wrapper settings-panel\"> <div class=\"tab-bar TOP\"> <div class=\"tab-bar-item bd-tab\" id=\"bd-settings-tab\" onclick='settingsPanel.changeTab(\"bd-settings-tab\");'>Core </div> <div class=\"tab-bar-item bd-tab\" id=\"bd-emotes-tab\" onclick='settingsPanel.changeTab(\"bd-emotes-tab\");'>Emotes </div> <div class=\"tab-bar-item bd-tab\" id=\"bd-customcss-tab\" onclick='settingsPanel.changeTab(\"bd-customcss-tab\");'>Custom CSS </div> <div class=\"tab-bar-item bd-tab\" id=\"bd-plugins-tab\" onclick='settingsPanel.changeTab(\"bd-plugins-tab\");'>Plugins </div> <div class=\"tab-bar-item bd-tab\" id=\"bd-themes-tab\" onclick='settingsPanel.changeTab(\"bd-themes-tab\");'>Themes </div> <div class=\"bda-slist-top\"> <button class=\"btn btn-primary\" onclick=\"utils.exportSettings(); return false;\">Export</button> <button class=\"btn btn-primary\" onclick=\"utils.importSettings(); return false;\">Import</button> </div> </div> <div class=\"bd-settings\"> <div class=\"bd-pane control-group\" id=\"bd-settings-pane\" style=\"display:none;\"> <ul class=\"checkbox-group\"> ";for(var o in settings){var c=settings[o],l=c.id;"core"!=c.cat||!c.implemented||c.hidden||(r+=" <li> <div class=\"checkbox\" onclick=\"settingsPanel.updateSetting(this);\"> <div class=\"checkbox-inner\"> <input type=\"checkbox\" id=\""+l+"\" "+(settingsCookie[l]?"checked":"")+"> <span></span> </div> <span> "+o+" - "+c.info+" </span> </div> </li> ")}for(var o in r+=" </ul> </div> ",r+=" <div class=\"bd-pane control-group\" id=\"bd-emotes-pane\" style=\"display:none;\"> <ul class=\"checkbox-group\"> ",settings){var c=settings[o],l=c.id;"emote"!=c.cat||!c.implemented||c.hidden||(r+=" <li> <div class=\"checkbox\" onclick=\"settingsPanel.updateSetting(this);\"> <div class=\"checkbox-inner\"> <input type=\"checkbox\" id=\""+l+"\" "+(settingsCookie[l]?"checked":"")+"> <span></span> </div> <span> "+o+" - "+c.info+" </span> </div> </li> ")}r+=" </ul> </div> ";var u=window.bdStorage.get("bdcustomcss"),b="";null!==u&&""!==u&&(b=atob(u)),customCssEditor.applyCustomCss(b,!0,!1),r+=" <div class=\"bd-pane control-group\" id=\"bd-customcss-pane\" style=\"display:none;\"> <div id=\"editor-detached\" style=\"display:none;\"> <h3>Editor Detached</h3> <button class=\"btn btn-primary\" onclick=\"customCssEditor.attach(); return false;\">Attach</button> </div> <div id=\"bd-customcss-innerpane\"> <textarea id=\"bd-custom-css-ta\">"+b+"</textarea> </div> </div> ",r+=" <div class=\"bd-pane control-group\" id=\"bd-plugins-pane\" style=\"display:show;\"> <div class=\"bda-slist-top\"> <button class=\"btn btn-primary\" onclick='betterDiscordIPC.send(\"asynchronous-message\", { \"arg\": \"opendir\", \"path\": \"plugindir\" }); return false;'>Open Plugin Folder</button> <button class=\"btn btn-primary\" onclick='window.open(\"https://betterdiscord.net/plugins\"); return false;'>Get Plugins</button> </div> <ul class=\"bda-slist\"> ",$.each(bdplugins,function(){var g=this.plugin,f=!1;"function"==typeof g.getSettingsPanel&&(f=null!=g.getSettingsPanel()&&""!=g.getSettingsPanel()),r+=" <li> <div class=\"bda-left\"> <span class=\"bda-name\">"+g.getName()+" v"+g.getVersion()+" by "+g.getAuthor()+"</span> <div class=\"scroller-wrap fade\"> <div class=\"scroller bda-description\">"+g.getDescription()+"</div> </div> </div> <div class=\"bda-right\"> <div class=\"checkbox\" onclick=\"pluginModule.handlePlugin(this);\"> <div class=\"checkbox-inner\"> <input id=\""+g.getName().replace(" ","__")+"\" type=\"checkbox\" "+(pluginCookie[g.getName()]?"checked":"")+"> <span></span> </div> <span></span> </div> <button class=\"btn btn-primary bda-plugin-reload\" onclick=\"return false;\" disabled>Reload</button> <button class=\"btn btn-primary bda-plugin-settings\" onclick='pluginModule.showSettings(\""+g.getName()+"\"); return false;' "+(f?"":"disabled")+">Settings</button> </div> </li> "}),r+=" </ul> </div> ",r+=" <div class=\"bd-pane control-group\" id=\"bd-themes-pane\" style=\"display:none;\"> <div class=\"bda-slist-top\"> <button class=\"btn btn-primary\" onclick='betterDiscordIPC.send(\"asynchronous-message\", { \"arg\": \"opendir\", \"path\": \"themedir\" }); return false;'>Open Theme Folder</button> <button class=\"btn btn-primary\" onclick='window.open(\"https://betterdiscord.net/themes\"); return false;'>Get Themes</button> </div> <ul class=\"bda-slist\"> ","undefined"==typeof themesupport2?r+="Your version does not support themes!":$.each(bdthemes,function(){r+=" <li> <div class=\"bda-left\"> <span class=\"bda-name\">"+this.name.replace(/_/g," ")+" v"+this.version+" by "+this.author+"</span> <div class=\"scroller-wrap fade\"> <div class=\"scroller bda-description\">"+this.description+"</div> </div> </div> <div class=\"bda-right\"> <div class=\"checkbox\" onclick=\"themeModule.handleTheme(this);\"> <div class=\"checkbox-inner\"> <input id=\"ti"+this.name+"\" type=\"checkbox\" "+(themeCookie[this.name]?"checked":"")+"> <span></span> </div> <span></span> </div> <button class=\"btn btn-primary bda-plugin-reload\" onclick=\"return false;\" disabled>Reload</button> </div> </li> "}),r+=" </ul> </div> ",r+=" <div style=\"background:#2E3136; color:#ADADAD; height:30px; position:absolute; bottom:0; left:0; right:0;\"> <span style=\"line-height:30px;margin-left:10px;\">BetterDiscord v"+("undefined"==typeof version?bdVersion:version)+"(JSv"+jsVersion+") by Jiiks</span> <span style=\"float:right;line-height:30px;margin-right:10px;\"><a href=\"http://betterdiscord.net\" target=\"_blank\">BetterDiscord.net</a></span> <span id=\"bd-changelog\" onclick='$(\"body\").append(mainCore.constructChangelog());'>changelog</span> </div> </div></div> ",settingsButton=$("<div/>",{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=$("<div/>",{class:"bd-versioninfo-wrapper"}).append($("<span/>",{text:`BetterDiscord v${"undefined"==typeof version?bdVersion:version}:${jsVersion} by `})).append($("<a/>",{text:"Jiiks",href:"https://google.com",target:"_blank"}));return d},SettingsPanel.prototype.tabBarNew=function(){let n=this,d=$("<div/>",{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($("<div/>",{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<br>More coming soon"),settingsCookie[n]=d,this.updateSettings()},SettingsPanel.prototype.settingsSwitch=function(n){let d=this,r=settings[n];return $("<div/>",{class:"ui-flex flex-vertical flex-justify-start flex-align-stretch flex-nowrap ui-switch-item"}).append($("<div/>",{class:"ui-flex flex-horizontal flex-justify-start flex-align-stretch flex-nowrap"}).append($("<h3/>",{class:"ui-form-title h3 margin-reset margin-reset ui-flex-child",text:n})).append($("<label/>",{class:"ui-switch-wrapper ui-flex-child",style:"flex: 0 0 auto"}).append($("<input/>",{class:"ui-switch-checkbox",type:"checkbox",change:function(){d.updateSettingNew(r.id,this.checked)},checked:settingsCookie[r.id]})).append($("<div/>",{class:"ui-switch"})))).append($("<div/>",{class:"ui-form-text style-description margin-top-4",style:"flex: 1 1 auto",text:r.info}))},SettingsPanel.prototype.corePaneNew=function(){let n=this,d=$("<div/>",{class:"ui-form-item bd-pane",id:"bd-core-pane",style:"display:none"});return Object.keys(settings).map(r=>{let o=settings[r];return"core"!==o.cat||!o.implemented||o.hidden?!1:void d.append(n.settingsSwitch(r))}),d},SettingsPanel.prototype.emotesPaneNew=function(){let n=this,d=$("<div/>",{class:"ui-form-item bd-pane",id:"bd-emotes-pane",style:"display:none"});return Object.keys(settings).map(r=>{let o=settings[r];return"emote"!==o.cat||!o.implemented||o.hidden?!1:void d.append(n.settingsSwitch(r))}),d},SettingsPanel.prototype.customCssPaneNew=function(){let n=this,d=$("<div/>",{class:"ui-form-item bd-pane",id:"bd-customcss-pane",style:"display:none"}),r=$("<div/>",{id:"editor-detached",style:"display:none"}).append($("<h3/>",{text:"Editor Detached"})).append($("<button/>",{class:"btn btn-primary",text:"Attach",click:()=>{customCssEditor.attach()}}));d.append(r);let o=window.bdStorage.get("bdcustomcss"),c="";null!==o&&""!==o&&(c=atob(o));let l=$("<div/>",{id:"bd-customcss-innerpane"}).append($("<textarea/>",{id:"bd-custom-css-ta",text:c}));return d.append(l),d},SettingsPanel.prototype.pluginTemp=function(n){let r=$("<li/>",{}).append($("<div/>",{class:"bda-left"}).append($("<span/>",{class:"bda-name",text:`${n.getName()} v${n.getVersion()} by ${n.getAuthor()}`})).append($("<div/>",{class:"scroller-wrap fade"}).append($("<div/>",{class:"scroller bda-description",text:n.getDescription()})))).append($("<div/>",{class:"bda-right"}).append($("<label/>",{class:"ui-switch-wrapper ui-flex-child",style:"flex: 0 0 auto"}).append($("<input/>",{class:"ui-switch-checkbox",type:"checkbox",change:function(){pluginModule.handlePluginT(n.getName(),this.checked)},checked:pluginCookie[n.getName()]})).append($("<div/>",{class:"ui-switch"}))).append($("<button/>",{text:"Reload",disabled:!0,enabled:!1,click:()=>{return!1}})).append($("<button/>",{text:"Settings",click:()=>{pluginModule.showSettingsT(n.getName())}})));return r},SettingsPanel.prototype.pluginsPaneNew=function(){let n=this,d=$("<ul/>",{class:"bda-slist"});return $.each(bdplugins,function(){let r=this.plugin;d.append(n.pluginTemp(r))}),$("<div/>",{class:"ui-form-item bd-pane",id:"bd-plugins-pane",style:"display:none"}).append(d)},SettingsPanel.prototype.themeTemp=function(n){let d=$("<li/>",{}).append($("<div/>",{class:"bda-left"}).append($("<span/>",{class:"bda-name",text:`${n.name.replace(/_/g," ")} v${n.version} by ${n.author}`})).append($("<div/>",{class:"scroller-wrap fade"}).append($("<div/>",{class:"scroller bda-description",text:n.description})))).append($("<div/>",{class:"bda-right"}).append($("<label/>",{class:"ui-switch-wrapper ui-flex-child",style:"flex: 0 0 auto"}).append($("<input/>",{class:"ui-switch-checkbox",type:"checkbox",change:function(){themeModule.handleThemeT(n.name,this.checked)},checked:themeCookie[n.name]})).append($("<div/>",{class:"ui-switch"}))).append($("<button/>",{text:"Reload",disabled:!0,enabled:!1,click:()=>{return!1}})));return d},SettingsPanel.prototype.themesPaneNew=function(){let n=this,d=$("<ul/>",{class:"bda-slist"});return $.each(bdthemes,function(){let r=this;d.append(n.themeTemp(r))}),$("<div/>",{class:"ui-form-item bd-pane",id:"bd-themes-pane",style:"display:none"}).append(d)},SettingsPanel.prototype.panesNew=function(){let n=this,d=$("<div/>",{class:"bd-settings-panes"});return d.append(n.corePaneNew()),d.append(n.emotesPaneNew()),d.append(n.customCssPaneNew()),d.append(n.pluginsPaneNew()),d.append(n.themesPaneNew()),d},SettingsPanel.prototype.settingsPaneNew=function(){let n=this;if(n.constructed)return n.constructed;let d=$(".tools").clone();return d.find(".btn-close").on("click",()=>{$(".tools").first().find(".btn-close").click()}),n.constructed=$("<div/>",{class:"content-region",id:"bd-settingspane",style:"display:none"}).append($("<div/>",{class:"scroller-wrap fade dark"}).append($("<div/>",{class:"scroller"}).append($("<div/>",{class:"content-column"}).append(n.tabBarNew()).append(n.panesNew())).append(d))),n.constructed},SettingsPanel.prototype.showBdSettingsPane=function(){$(".ui-standard-sidebar-view .content-region").first().hide(),$("#bd-settingspane").show()},SettingsPanel.prototype.hideBdSettingsPane=function(){$(".ui-standard-sidebar-view .content-region").first().show(),$("#bd-settingspane").hide()};var _hash;function Utils(){}Utils.prototype.getTextArea=function(){return $(".channel-text-area-default textarea")},Utils.prototype.jqDefer=function(n){window.jQuery?n():setTimeout(function(){this.jqDefer(n)},100)},Utils.prototype.getHash=function(){$.getJSON("https://api.github.com/repos/Jiiks/BetterDiscordApp/commits/master",function(n){_hash=n.sha,emoteModule.getBlacklist()})},Utils.prototype.loadHtml=function(n,d){var r=$("<div/>",{class:"bd-container"}).appendTo("body");n="//cdn.rawgit.com/Jiiks/BetterDiscordApp/"+_hash+"/html/"+n+".html",r.load(n,d())},Utils.prototype.injectJs=function(n){$("<script/>",{type:"text/javascript",src:n}).appendTo($("body"))},Utils.prototype.injectCss=function(n){$("<link/>",{type:"text/css",rel:"stylesheet",href:n}).appendTo($("head"))},Utils.prototype.log=function(n){console.log("%c[%cBetterDiscord%c] %c"+n+"","color: red;","color: #303030; font-weight:700;","color:red;","")},Utils.prototype.err=function(n){console.log("%c[%cBetterDiscord%c] %c"+n+"","color: red;","color: red; font-weight:700;","color:red;","")},Utils.prototype.importSettings=function(){mainCore.alert("Import Settings","<div class=\"form\" style=\"width:100%;\"><div class=\"control-group\"><textarea id=\"bda-import-textarea\" style=\"min-height:150px;\"></textarea></div><button id=\"bda-import-settings\" class=\"btn btn-primary\">Import</button></div>"),$("#bda-import-settings").off("click").on("click",function(){var n;try{n=JSON.parse($("#bda-import-textarea").val())}catch(c){return mainCore.alert("Invalid Data",c),!1}try{for(key in n.settings){var d=n.settings[key];if(settingsCookie.hasOwnProperty(key)){settingsCookie[key]=d;var r=$("#"+key);r.prop("checked",d),settingsPanel.updateSettings()}}window.bdStorage.set("bdcustomcss",n.customCss);var o=window.bdStorage.get("bdcustomcss");customCssInitialized||(customCssEditor.init(),customCssInitialized=!0),customCssEditor.applyCustomCss(o,settingsCookie["bda-css-0"],!1),customCssEditor.editor.setValue(o)}catch(c){return mainCore.alert("Invalid Data",c),!1}try{$.each(n.plugins,function(c){var l=n.plugins[c];if(bdplugins.hasOwnProperty(c)){pluginCookie[c]=l;var u=$("#"+c.replace(" ","__"));u.is(":checked")&&!l&&(bdplugins[c].plugin.stop(),u.prop("checked",!1)),!u.is(":checked")&&l&&(bdplugins[c].plugin.start(),u.prop("checked",!0))}}),pluginModule.savePluginData()}catch(c){return mainCore.alert("Failed to load plugin data",c),!1}try{themeCookie=n.themes,$.each(themeCookie,function(c){var l=themeCookie[c],u="#ti"+c;bdthemes.hasOwnProperty(c)&&($(u).is(":checked")&&!l&&($(u).prop("checked",!1),$("#"+c).remove()),!$(u).is(":checked")&&l&&($(u).prop("checked",!0),$("head").append("<style id=\""+c+"\">"+unescape(bdthemes[c].css)+"</style>")))}),themeModule.saveThemeData()}catch(c){return mainCore.alert("Failed to load theme data",c),!1}return!1})},Utils.prototype.exportSettings=function(){var n={settings:settingsCookie,customCss:window.bdStorage.get("bdcustomcss"),plugins:pluginCookie,themes:themeCookie,favEmotes:window.bdStorage.get("bdfavemotes")};mainCore.alert("Export Settings","<div class=\"form\" style=\"width:100%;\"><div class=\"control-group\"><textarea style=\"min-height:150px;\">"+JSON.stringify(n)+"</textarea></div></div>")},Utils.prototype.addBackdrop=function(n){var d=$("<div/>",{class:"bda-backdrop","data-bdbackdrop":n,mouseup:function(){$("[data-bdalert=\""+n+"\"]").remove(),$(this).remove()}});$("#app-mount").append(d)},Utils.prototype.removeBackdrop=function(n){$("[data-bdbackdrop=\""+n+"\"]").remove()};function VoiceMode(){}VoiceMode.prototype.obsCallback=function(){var n=this;settingsCookie["bda-gs-4"]&&(n.disable(),setTimeout(function(){n.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 n=this.plugin;n.load();var d=n.getName(),r=!1;pluginCookie.hasOwnProperty(d)?r=pluginCookie[d]:pluginCookie[d]=!1,r&&n.start()})},PluginModule.prototype.handlePlugin=function(n){var d=$(n).children().find("input[type=\"checkbox\"]"),r=!d.is(":checked"),o=d.attr("id").replace("__"," ");d.prop("checked",r),r?(bdplugins[o].plugin.start(),pluginCookie[o]=!0):(bdplugins[o].plugin.stop(),pluginCookie[o]=!1),this.savePluginData()},PluginModule.prototype.handlePluginT=function(n,d){d?(bdplugins[n].plugin.start(),pluginCookie[n]=!0):(bdplugins[n].plugin.stop(),pluginCookie[n]=!1),this.savePluginData()},PluginModule.prototype.showSettings=function(n){if(null!=bdplugins[n]&&"function"==typeof bdplugins[n].plugin.getSettingsPanel){var d=bdplugins[n].plugin.getSettingsPanel();$(".modal-inner").off("click.bdpsm").on("click.bdpsm",function(){$("#bd-psm-id").length?$(".bd-psm").remove():$(".bd-psm").attr("id","bd-psm-id")}),$(".modal").append("<div class=\"bd-psm\"><div class=\"scroller-wrap\" style=\"height:100%\"><div id=\"bd-psm-s\" class=\"scroller\" style=\"padding:10px;\"></div></div></div>"),$("#bd-psm-s").append(d)}},PluginModule.prototype.showSettingsT=function(n){if(null!==bdplugins[n]&&"function"==typeof bdplugins[n].plugin.getSettingsPanel){$("#bd-settingspane").off("click.bdpsm").on("click.bdpsm",function(r){"bd-psm-s"===r.target.id||r.target.textContent&&"Settings"===r.target.textContent||$(".bd-psm").remove()});let d=bdplugins[n].plugin.getSettingsPanel();$(".bd-settings-panes").append("<div class=\"bd-psm\"><div class=\"scroller-wrap\" style=\"height:100%\"><div id=\"bd-psm-s\" class=\"scroller\" style=\"padding:10px;\"></div></div></div>"),$("#bd-psm-s").append(d)}},PluginModule.prototype.loadPluginData=function(){var n=$.cookie("bd-plugins");n!=void 0&&(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(){pluginCookie[this.plugin.getName()]&&("function"!=typeof this.plugin.onMessage||this.plugin.onMessage())})},PluginModule.prototype.channelSwitch=function(){$.each(bdplugins,function(){pluginCookie[this.plugin.getName()]&&("function"!=typeof this.plugin.onSwitch||this.plugin.onSwitch())})},PluginModule.prototype.socketEvent=function(n,d){$.each(bdplugins,function(){pluginCookie[this.plugin.getName()]&&("function"!=typeof this.plugin.socketEvent||this.plugin.socketEvent(d))})},PluginModule.prototype.rawObserver=function(n){$.each(bdplugins,function(){pluginCookie[this.plugin.getName()]&&("function"!=typeof this.plugin.observer||this.plugin.observer(n))})};var themeCookie={};function ThemeModule(){}ThemeModule.prototype.loadThemes=function(){this.loadThemeData(),$.each(bdthemes,function(){var n=this.name,d=!1;themeCookie.hasOwnProperty(n)?themeCookie[n]&&(d=!0):themeCookie[n]=!1,d&&$("head").append("<style id=\""+n+"\">"+unescape(bdthemes[n].css)+"</style>")})},ThemeModule.prototype.handleTheme=function(n){var d=$(n).children().find("input[type=\"checkbox\"]"),r=!d.is(":checked"),o=d.attr("id").substring(2);d.prop("checked",r),r?($("head").append("<style id=\""+o+"\">"+unescape(bdthemes[o].css)+"</style>"),themeCookie[o]=!0):($("#"+o).remove(),themeCookie[o]=!1),this.saveThemeData()},ThemeModule.prototype.handleThemeT=function(n,d){d?($("head").append("<style id=\""+n+"\">"+unescape(bdthemes[n].css)+"</style>"),themeCookie[n]=!0):($("#"+n).remove(),themeCookie[n]=!1),this.saveThemeData()},ThemeModule.prototype.loadThemeData=function(){var n=$.cookie("bd-themes");n!=void 0&&(themeCookie=JSON.parse($.cookie("bd-themes")))},ThemeModule.prototype.saveThemeData=function(){$.cookie("bd-themes",JSON.stringify(themeCookie),{expires:365,path:"/"})};var bdSocket,bdws;function BdWSocket(){bdws=this}BdWSocket.prototype.start=function(){this},BdWSocket.prototype.open=function(n){utils.log("Socket Host: "+n);try{bdSocket=new WebSocket(n),bdSocket.onopen=this.onOpen,bdSocket.onmessage=this.onMessage,bdSocket.onerror=this.onError,bdSocket.onclose=this.onClose}catch(d){utils.log(d)}},BdWSocket.prototype.onOpen=function(){utils.log("Socket Open");var n={op:2,d:{token:JSON.parse(window.bdStorage.get("token")),properties:JSON.parse(window.bdStorage.get("superProperties")),v:3}};bdws.send(n)},BdWSocket.prototype.onMessage=function(n){var d,r,o;try{d=JSON.parse(n.data),r=d.d,o=d.t}catch(c){return void utils.err(c)}switch(o){case"READY":bdSocket.interval=setInterval(function(){bdws.send({op:1,d:Date.now()})},r.heartbeat_interval),utils.log("Socket Ready");break;case"PRESENCE_UPDATE":pluginModule.socketEvent("PRESENCE_UPDATE",r);break;case"TYPING_START":pluginModule.socketEvent("TYPING_START",r);break;case"MESSAGE_CREATE":pluginModule.socketEvent("MESSAGE_CREATE",r);break;case"MESSAGE_UPDATE":pluginModule.socketEvent("MESSAGE_UPDATE",r);break;default:}},BdWSocket.prototype.onError=function(n){utils.log("Socket Error - "+n.message)},BdWSocket.prototype.onClose=function(n){utils.log("Socket Closed - "+n.code+" : "+n.reason),clearInterval(bdSocket.interval),bdws.start()},BdWSocket.prototype.send=function(n){1==bdSocket.readyState&&bdSocket.send(JSON.stringify(n))},BdWSocket.prototype.getSocket=function(){return bdSocket};function BdApi(){}BdApi.joinServer=function(n){opublicServers.joinServer(n)},BdApi.injectCSS=function(n,d){$("head").append("<style id=\""+n+"\"></style>"),$("#"+n).html(d)},BdApi.clearCSS=function(n){$("#"+n).remove()},BdApi.getPlugin=function(n){return bdplugins.hasOwnProperty(n)?bdplugins[n].plugin:null},BdApi.getIpc=function(){return betterDiscordIPC},BdApi.getCore=function(){return mainCore},BdApi.getUserIdByName=function(n){for(var o,d=$(".member-username"),r=0;r<d.length;r++)if(o=$(d[r]),o.text()==n){var c=o.closest(".member").find(".avatar-small").css("background-image");return c.match(/\d+/)}return null};var gg;BdApi.getUserNameById=function(n){for(var d=$(".avatar-small"),r=0;r<d.length;r++){var o=$(d[r]),c=o.css("background-image");if(n==c.match(/\d+/))return o.parent().find(".member-username").text()}return null},BdApi.setPlaying=function(n){bdws.send({op:3,d:{idle_since:null,game:{name:n}}})},BdApi.setStatus=function(n,d){bdws.send({op:3,d:{idle_since:n,game:{name:d}}})};function devMode(){}devMode.prototype.enable=function(){this;$(window).on("keydown.bdDevmode",function(d){if(119===d.which){console.log("%c[%cDM%c] %cBreak/Resume","color: red;","color: #303030; font-weight:700;","color:red;","");debugger}})},devMode.prototype.disable=function(){$(window).off("keydown.bdDevmode"),$(window).off("mousedown.bdDevmode")},window.bdtemp={editorDetached:!1};class V2{constructor(){this.WebpackModules=(()=>{const n=webpackJsonp([],{__extra_id__:(c,l,u)=>l.default=u},["__extra_id__"]).default;delete n.m.__extra_id__,delete n.c.__extra_id__;const d=(c,l={})=>{const{cacheOnly:u=!0}=l;for(let b in n.c)if(n.c.hasOwnProperty(b)){let g=n.c[b].exports;if(g&&g.__esModule&&g.default&&c(g.default))return g.default;if(g&&c(g))return g}if(u)return console.warn("Cannot find loaded module in cache"),null;console.warn("Cannot find loaded module in cache. Loading all modules may have unexpected side effects");for(let b=0;b<n.m.length;++b)try{let g=n(b);if(g&&g.__esModule&&g.default&&c(g.default))return g.default;if(g&&c(g))return g}catch(g){console.error(g)}return console.warn("Cannot find module"),null};return{find:d,findByUniqueProperties:(c,l)=>d(u=>c.every(b=>u[b]!==void 0),l),findByDisplayName:(c,l)=>d(u=>u.displayName===c,l)}})(),this.internal={react:this.WebpackModules.findByUniqueProperties(["Component","PureComponent","Children","createElement","cloneElement"]),"react-dom":this.WebpackModules.findByUniqueProperties(["findDOMNode"])}}get reactComponent(){return this.internal.react.Component}get react(){return this.internal.react}get reactDom(){return this.internal["react-dom"]}parseSettings(n){return Object.keys(settings).reduce((d,r)=>{let o=settings[r];return o.cat===n&&o.implemented&&!o.hidden&&(o.text=r,d.push(o)),d},[])}}window.BDV2=new V2;class V2C_SettingsPanel extends BDV2.reactComponent{constructor(n){super(n)}render(){let{settings:n}=this.props;return BDV2.react.createElement("div",{className:"content-column default"},BDV2.react.createElement(V2Components.SettingsTitle,{text:this.props.title}),n.map(d=>{return BDV2.react.createElement(V2Components.Switch,{id:d.id,key:d.id,data:d,checked:settingsCookie[d.id],onChange:(r,o)=>{this.props.onChange(r,o)}})}))}}class V2C_Switch extends BDV2.reactComponent{constructor(n){super(n),this.setInitialState(),this.onChange=this.onChange.bind(this)}setInitialState(){this.state={checked:this.props.checked}}render(){let{text:n,info:d}=this.props.data,{checked:r}=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"},n),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:r,onChange:o=>this.onChange(o)}),BDV2.react.createElement("div",{className:`ui-switch ${r?"checked":""}`}))),BDV2.react.createElement("div",{className:"ui-form-text style-description margin-top-4",style:{flex:"1 1 auto"}},d))}onChange(){this.props.onChange(this.props.id,!this.state.checked),this.setState({checked:!this.state.checked})}}class V2C_Scroller extends BDV2.reactComponent{constructor(n){super(n)}render(){let n=`scroller-wrap${this.props.fade?" fade":""} ${this.props.dark?" dark":""}`,{children:d}=this.props;return BDV2.react.createElement("div",{key:"scrollerwrap",className:n},BDV2.react.createElement("div",{key:"scroller",ref:"scroller",className:"scroller"},d))}}class V2C_TabBarItem extends BDV2.reactComponent{constructor(n){super(n),this.setInitialState(),this.onClick=this.onClick.bind(this)}setInitialState(){this.state={selected:this.props.selected||!1}}render(){return BDV2.react.createElement("div",{className:`ui-tab-bar-item${this.props.selected?" selected":""}`,onClick:this.onClick},this.props.text)}onClick(){this.props.onClick&&this.props.onClick(this.props.id)}}class V2C_TabBarSeparator extends BDV2.reactComponent{constructor(n){super(n)}render(){return BDV2.react.createElement("div",{className:"ui-tab-bar-separator margin-top-8 margin-bottom-8"})}}class V2C_TabBarHeader extends BDV2.reactComponent{constructor(n){super(n)}render(){return BDV2.react.createElement("div",{className:"ui-tab-bar-header"},this.props.text)}}class V2C_SideBar extends BDV2.reactComponent{constructor(n){super(n);let d=this;const r=$("[class*=side] > [class*=selected]");r.length&&(d.scn=r.attr("class"));const o=$("[class*=side] > [class*=notSelected]");o.length&&(d.nscn=o.attr("class")),$("[class*=side] > [class*=item]").on("click",()=>{d.setState({selected:null})}),d.setInitialState(),d.onClick=d.onClick.bind(d)}setInitialState(){let n=this;n.state={selected:null,items:n.props.items};let d=n.props.items.find(r=>{return r.selected});d&&(n.state.selected=d.id)}render(){let n=this,{headerText:d}=n.props,{items:r,selected:o}=n.state;return BDV2.react.createElement("div",null,BDV2.react.createElement(V2Components.TabBar.Separator,null),BDV2.react.createElement(V2Components.TabBar.Header,{text:d}),r.map(c=>{let{id:l,text:u}=c;return BDV2.react.createElement(V2Components.TabBar.Item,{key:l,selected:o===l,text:u,id:l,onClick:n.onClick})}))}onClick(n){let d=this;const r=$("[class*=side] > [class*=selected]");r.length&&(r.off("click.bdsb").on("click.bsb",o=>{$(o.target).attr("class",d.scn)}),r.attr("class",d.nscn)),$(".ui-tab-bar-item").removeClass("selected"),d.setState({selected:n}),d.props.onClick&&d.props.onClick(n)}}class V2C_XSvg extends BDV2.reactComponent{constructor(n){super(n)}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(n){super(n),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(){this.props.onClick&&this.props.onClick(),$(".btn-close").first().click()}}class V2C_SettingsTitle extends BDV2.reactComponent{constructor(n){super(n)}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(n){super(n),this.onClick=this.onClick.bind(this),this.setInitialState()}setInitialState(){this.state={checked:this.props.checked||!1}}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(n){super(n);let d=this;d.onClick=d.onClick.bind(d),d.updateCss=d.updateCss.bind(d),d.saveCss=d.saveCss.bind(d),d.onChange=d.onChange.bind(d)}componentDidMount(){let n=this;$("#app-mount").addClass("bd-detached-editor"),n.editor=CodeMirror.fromTextArea(n.refs.editor,n.options),n.editor.on("change",()=>{settingsCookie["bda-css-0"]&&n.updateCss()}),window.bdtemp.editorDetached=!0}componentWillUnmount(){$("#app-mount").removeClass("bd-detached-editor"),window.bdtemp.editorDetached=!1}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){let n=window.bdStorage.get("bdcustomcss"),d="";return n&&""!==n&&(d=atob(n)),d}get root(){let n=$("#bd-customcss-detach-container");return n.length?n[0]:this.injectRoot()?this.detachedRoot:null}injectRoot(){return!!$(".app").length&&($("<div/>",{id:"bd-customcss-detach-container"}).insertAfter($(".app")),!0)}render(){let n=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:n.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:n.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:()=>{n.onClick("update")}},"Update"),BDV2.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{n.onClick("save")}},"Save"),BDV2.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{n.onClick("attach")}},"Attach"),BDV2.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on attach")))))}onChange(n,d){"live-update"===n?(settingsCookie["bda-css-0"]=d,mainCore.saveSettings()):void 0}onClick(n){let d=this;"attach"===n?($("#editor-detached").length&&d.props.attach(),BDV2.reactDom.unmountComponentAtNode(d.root)):"update"===n?d.updateCss():"save"===n?d.saveCss():void 0}updateCss(){let n=this;0==$("#customcss").length&&$("head").append("<style id=\"customcss\"></style>"),$("#customcss").html(n.editor.getValue())}saveCss(){let n=this;window.bdStorage.set("bdcustomcss",btoa(n.editor.getValue()))}}class V2C_CssEditor extends BDV2.reactComponent{constructor(n){super(n);let d=this;d.setInitialState(),d.attach=d.attach.bind(d),d.detachedEditor=BDV2.react.createElement(V2C_CssEditorDetached,{attach:d.attach}),d.onClick=d.onClick.bind(d),d.updateCss=d.updateCss.bind(d),d.saveCss=d.saveCss.bind(d),d.detach=d.detach.bind(d),d.codeMirror=d.codeMirror.bind(d)}setInitialState(){this.state={detached:this.props.detached||window.bdtemp.editorDetached}}componentDidMount(){let n=this;n.codeMirror()}componentDidUpdate(n,d){let r=this;d.detached&&!r.state.detached&&(BDV2.reactDom.unmountComponentAtNode(r.detachedRoot),r.codeMirror())}codeMirror(){let n=this;n.state.detached||(n.editor=CodeMirror.fromTextArea(n.refs.editor,n.options),n.editor.on("change",()=>{settingsCookie["bda-css-0"]&&n.updateCss()}))}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){let n=window.bdStorage.get("bdcustomcss"),d="";return n&&""!==n&&(d=atob(n)),d}render(){let n=this,{detached:d}=n.state;return BDV2.react.createElement("div",{className:"content-column default",style:{padding:"60px 40px 0px"}},d&&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:()=>{n.attach()}},"Attach")),!d&&BDV2.react.createElement("div",null,BDV2.react.createElement(V2Components.SettingsTitle,{text:"Custom CSS Editor"}),BDV2.react.createElement("textarea",{ref:"editor",value:n.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:()=>{n.onClick("update")}},"Update"),BDV2.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{n.onClick("save")}},"Save"),BDV2.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{n.onClick("detach")}},"Detach"),BDV2.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on detach")))))}onClick(n){let d=this;"update"===n?d.updateCss():"save"===n?d.saveCss():"detach"===n?d.detach():void 0}onChange(n,d){"live-update"===n?(settingsCookie["bda-css-0"]=d,mainCore.saveSettings()):void 0}updateCss(){let n=this;0==$("#customcss").length&&$("head").append("<style id=\"customcss\"></style>"),$("#customcss").html(n.editor.getValue())}saveCss(){let n=this;window.bdStorage.set("bdcustomcss",btoa(n.editor.getValue()))}detach(){let n=this;n.setState({detached:!0});let d=n.detachedRoot;return d?void BDV2.reactDom.render(n.detachedEditor,d):void console.log("FAILED TO INJECT ROOT: .app")}get detachedRoot(){let n=$("#bd-customcss-detach-container");return n.length?n[0]:this.injectDetachedRoot()?this.detachedRoot:null}injectDetachedRoot(){return!!$(".app").length&&($("<div/>",{id:"bd-customcss-detach-container"}).insertAfter($(".app")),!0)}attach(){let n=this;n.setState({detached:!1})}}class V2C_List extends BDV2.reactComponent{constructor(n){super(n)}render(){return BDV2.react.createElement("ul",{className:this.props.className},this.props.children)}}class V2C_ContentColumn extends BDV2.reactComponent{constructor(n){super(n)}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(n){super(n);let d=this;"function"==typeof d.props.plugin.getSettingsPanel&&(d.settingsPanel=d.props.plugin.getSettingsPanel()),d.onChange=d.onChange.bind(d),d.showSettings=d.showSettings.bind(d),d.setInitialState()}setInitialState(){this.state={checked:pluginCookie[this.props.plugin.getName()],settings:!1}}componentDidUpdate(){this.state.settings&&"object"==typeof this.settingsPanel&&this.refs.settingspanel.appendChild(this.settingsPanel)}render(){let n=this,{plugin:d}=this.props,r=d.getName(),o=d.getAuthor(),c=d.getDescription(),l=d.getVersion(),{settingsPanel:u}=this;return this.state.settings?BDV2.react.createElement("li",{style:{maxHeight:"500px",overflow:"auto"}},BDV2.react.createElement("div",{style:{float:"right",cursor:"pointer"},onClick:()=>{this.refs.settingspanel.innerHTML="",n.setState({settings:!1})}},BDV2.react.createElement(V2Components.XSvg,null)),"object"==typeof u&&BDV2.react.createElement("div",{ref:"settingspanel"}),"object"!=typeof u&&BDV2.react.createElement("div",{ref:"settingspanel",dangerouslySetInnerHTML:{__html:d.getSettingsPanel()}})):BDV2.react.createElement("li",null,BDV2.react.createElement("div",{className:"bda-left"},BDV2.react.createElement("span",{className:"bda-name"},r," v",l," by ",o),BDV2.react.createElement("div",{className:"scroller-wrap fade"},BDV2.react.createElement("div",{className:"scroller bda-description"},c))),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 n=this;n.setState({checked:!n.state.checked}),pluginCookie[n.props.plugin.getName()]=!n.state.checked,n.state.checked?n.props.plugin.stop():n.props.plugin.start(),$.cookie("bd-plugins",JSON.stringify(pluginCookie),{expires:365,path:"/"})}showSettings(){this.settingsPanel&&this.setState({settings:!0})}}class V2C_ThemeCard extends BDV2.reactComponent{constructor(n){super(n),this.setInitialState(),this.onChange=this.onChange.bind(this)}setInitialState(){this.state={checked:themeCookie[this.props.theme.name]}}render(){let{theme:n}=this.props,d=n.name.replace("_"," "),r=n.description,o=n.version,c=n.author;return BDV2.react.createElement("li",null,BDV2.react.createElement("div",{className:"bda-left"},BDV2.react.createElement("span",{className:"bda-name"},d," v",o," by ",c),BDV2.react.createElement("div",{className:"scroller-wrap fade"},BDV2.react.createElement("div",{className:"scroller bda-description"},r))),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 n=this;n.setState({checked:!n.state.checked}),themeCookie[n.props.theme.name]=!n.state.checked,n.state.checked?$(`#${n.props.theme.name}`).remove():$("head").append(`<style id="${n.props.theme.name}">${unescape(n.props.theme.css)}</style>`),$.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(n){super(n)}componentDidMount(){$(window).on(`keyup.${this.props.id}`,n=>{27===n.which&&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 layer-kosS71",id:this.props.id,ref:"root"},this.props.children)}}class V2C_SidebarView extends BDV2.reactComponent{constructor(n){super(n)}render(){let{sidebar:n,content:d}=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:n.fade||!0,dark:n.dark||!0,children:n.component})),BDV2.react.createElement("div",{className:"content-region"},BDV2.react.createElement(V2Components.Scroller,{key:"contentScroller",ref:"contentScroller",fade:d.fade||!0,dark:d.dark||!0,children:d.component})))}}class V2C_ServerCard extends BDV2.reactComponent{constructor(n){super(n)}render(){let{server:n}=this.props;return BDV2.react.createElement("div",{className:`ui-card ui-card-primary bd-server-card${n.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(${n.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"},n.name)),BDV2.react.createElement("div",{className:"ui-form-item"},BDV2.react.createElement("h5",{className:"ui-form-title h5 margin-reset"},n.online,"/",n.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"}},n.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"}},n.categories.join(", ")),n.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")),n.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")),!n.error&&!n.joined&&BDV2.react.createElement("button",{type:"button",className:"ui-button filled brand small grow",style:{minHeight:"12px",marginTop:"4px"},onClick:()=>{this.join(n.identifier)}},BDV2.react.createElement("div",{className:"ui-button-contents"},"Join"))))))}join(){let d=this;d.props.join(d.props.server)}}class V2C_PublicServers extends BDV2.reactComponent{constructor(n){super(n),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:!0,servers:[],next:null,connection:{state:0,user:null}}}close(){BDV2.reactDom.unmountComponentAtNode(document.getElementById(this.props.rootId))}search(n,d){let r=this;$.ajax({method:"GET",url:`${r.endPoint}${n}`,success:o=>{let c=o.results.reduce((b,g)=>{return g.joined=!1,b.push(g),b},[]);d||(c=r.state.servers.concat(c));let l=o.size+o.from;l>=o.total&&(l=o.total,o.next=null);let u=`Showing 1-${l} of ${o.total} results in ${r.categoryButtons[r.state.selectedCategory]}`;r.state.term&&(u+=` for ${r.state.term}`),r.setState({loading:!1,title:u,servers:c,next:o.next}),d&&(r.refs.sbv.refs.contentScroller.refs.scroller.scrollTop=0)},error:o=>{r.setState({loading:!1,title:"Failed to load servers. Check console for details"}),console.log(o)}})}join(n){let d=this;if(!d.state.loading)return d.setState({loading:!0}),n.nativejoin?(d.setState({loading:!1}),$(".guilds-add").click(),$(".join .btn-primary").click(),void $(".join-server input").val(n.invitecode)):void $.ajax({method:"GET",url:`${d.joinEndPoint}/${n.identifier}`,crossDomain:!0,xhrFields:{withCredentials:!0},success:()=>{let o=d.state.servers;o.map(c=>{c.identifier===n.identifier&&(n.joined=!0)}),d.setState({loading:!1,servers:o})},error:r=>{console.log(`[BetterDiscord] Failed to join server ${n.name}. Reason: `),console.log(r);let o=d.state.servers;o.map(c=>{c.identifier===n.identifier&&(n.error=!0)}),d.setState({loading:!1,servers:o})}})}get bdServer(){return BDV2.react.createElement(V2Components.ServerCard,{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:!0,invitecode:"0Tmfo5ZbORCRqbAd",pinned:!0},pinned:!0,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 n=this;$.ajax({method:"GET",url:`${n.joinEndPoint}/session`,crossDomain:!0,xhrFields:{withCredentials:!0},success:d=>{n.setState({selectedCategory:0,connection:{state:2,user:d}}),n.search("",!0)},error:d=>{return 403===d.status?void n.setState({title:"Not connected to discordservers.com!",loading:!0,selectedCategory:-1,connection:{state:1,user:null}}):void console.log(d)}})}get windowOptions(){return{width:520,height:710,backgroundColor:"#282b30",show:!0,resizable:!1,maximizable:!1,minimizable:!1,alwaysOnTop:!0,frame:!1,center:!1}}connect(){let n=this,d=n.windowOptions;d.x=Math.round(window.screenX+window.innerWidth/2-d.width/2),d.y=Math.round(window.screenY+window.innerHeight/2-d.height/2),n.joinWindow=new(window.require("electron").remote.BrowserWindow)(d);let r=window.location.hostname.split(".")[0],o=n.connectEndPoint+("canary"===r||"ptb"===r?`/${r}`:"");n.joinWindow.on("close",()=>{n.checkConnection()}),n.joinWindow.webContents.on("did-navigate",(c,l)=>{l.includes("connect/callback")&&n.joinWindow.close()}),n.joinWindow.loadURL(o)}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((n,d)=>{return BDV2.react.createElement(V2Components.TabBar.Item,{id:d,onClick:this.changeCategory,key:d,text:n,selected:this.state.selectedCategory===d})}),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(n){let d=this;if(!(d.state.loading||13!==n.which)){d.setState({loading:!0,title:"Loading...",term:n.target.value});let r=`?term=${n.target.value}`;0!==d.state.selectedCategory&&(r+=`&category=${d.categoryButtons[d.state.selectedCategory]}`),d.search(r,!0)}}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(n){let d=this;if(!d.state.loading)return d.refs.searchinput.value="",d.setState({loading:!0,selectedCategory:n,title:"Loading...",term:null}),0===n?void d.search("",!0):void d.search(`?category=${d.categoryButtons[n]}`,!0)}get content(){let n=this;return 1===n.state.connection.state?n.notConnected:[BDV2.react.createElement("div",{ref:"content",key:"pc",className:"content-column default"},BDV2.react.createElement(V2Components.SettingsTitle,{text:n.state.title}),n.bdServer,n.state.servers.map((d,r)=>{return BDV2.react.createElement(V2Components.ServerCard,{key:r,server:d,join:n.join})}),n.state.next&&BDV2.react.createElement("button",{type:"button",onClick:()=>{n.state.loading||(n.setState({loading:!0}),n.search(n.state.next,!1))},className:"ui-button filled brand small grow",style:{width:"100%",marginTop:"10px",marginBottom:"10px"}},BDV2.react.createElement("div",{className:"ui-button-contents"},n.state.loading?"Loading":"Load More")),0<n.state.servers.length&&BDV2.react.createElement(V2Components.SettingsTitle,{text:n.state.title})),BDV2.react.createElement(V2Components.Tools,{key:"pt",ref:"tools",onClick:n.close})]}get notConnected(){let n=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:n.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"))),n.bdServer),BDV2.react.createElement(V2Components.Tools,{key:"nct",ref:"tools",onClick:n.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 n=this,{connection:d}=n.state;return 2===d.state?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: ",`${d.user.username}#${d.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:n.connect},"Reconnect")))):BDV2.react.createElement("span",null)}}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 n=$("#pubslayerroot");return n.length?n[0]:this.injectRoot()?this.root:null}injectRoot(){return!!$(".layers, .layers-20RVFW").length&&($(".layers, .layers-20RVFW").append($("<span/>",{id:"pubslayerroot"})),!0)}render(){let n=this.root;return n?void BDV2.reactDom.render(this.component,n):void console.log("FAILED TO LOCATE ROOT: .layers")}}class V2_SettingsPanel_Sidebar{constructor(n){this.onClick=n}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 n=$("#bd-settings-sidebar");return n.length?n[0]:this.injectRoot()?this.root:null}injectRoot(){let n=$("[class*=side] > [class*=item]:not([class*=Danger])").last();return!!n.length&&($("<span/>",{id:"bd-settings-sidebar"}).insertBefore(n.prev()),!0)}render(){let n=this.root;return n?void BDV2.reactDom.render(this.component,n):void console.log("FAILED TO LOCATE ROOT: [class*=side] > [class*=item]:not([class*=Danger])")}}class V2_SettingsPanel{constructor(){let n=this;n.sideBarOnClick=n.sideBarOnClick.bind(n),n.onChange=n.onChange.bind(n),n.updateSettings=this.updateSettings.bind(n),n.sidebar=new V2_SettingsPanel_Sidebar(n.sideBarOnClick)}get root(){let n=$("#bd-settingspane-container");return n.length?n[0]:this.injectRoot()?this.root:null}injectRoot(){return!!$(".layer .ui-standard-sidebar-view, .layer-kosS71 .ui-standard-sidebar-view").length&&($(".layer .ui-standard-sidebar-view, .layer-kosS71 .ui-standard-sidebar-view").append($("<div/>",{class:"content-region",id:"bd-settingspane-container"})),!0)}get coreSettings(){return this.getSettings("core")}get emoteSettings(){return this.getSettings("emote")}getSettings(n){return Object.keys(settings).reduce((d,r)=>{let o=settings[r];return o.cat===n&&o.implemented&&!o.hidden&&(o.text=r,d.push(o)),d},[])}sideBarOnClick(n){let d=this;$(".content-region").first().hide(),$(d.root).show();"core"===n?d.renderCoreSettings():"emotes"===n?d.renderEmoteSettings():"customcss"===n?d.renderCustomCssEditor():"plugins"===n?d.renderPluginPane():"themes"===n?d.renderThemePane():void 0}onClick(){}onChange(n,d){settingsCookie[n]=d,this.updateSettings()}updateSettings(){let n=settingsCookie;n["bda-es-0"]?$("#twitchcord-button-container").show():$("#twitchcord-button-container").hide(),n["bda-gs-b"]?$("body").addClass("bd-blue"):$("body").removeClass("bd-blue"),n["bda-gs-2"]?$("body").addClass("bd-minimal"):$("body").removeClass("bd-minimal"),n["bda-gs-3"]?$("body").addClass("bd-minimal-chan"):$("body").removeClass("bd-minimal-chan"),n["bda-gs-1"]?$("#bd-pub-li").show():$("#bd-pub-li").hide(),n["bda-gs-4"]?voiceMode.enable():voiceMode.disable(),n["bda-gs-5"]?$("#app-mount").addClass("bda-dark"):$("#app-mount").removeClass("bda-dark"),n["bda-es-6"]?(emoteNamePopup=$("<div class='tipsy tipsy-se' style='display: block; top: 82px; left: 1630.5px; visibility: visible; opacity: 0.8;'><div class='tipsy-inner'></div></div>"),$(document).on("mouseover",".emote",function(){var d=$(this).offset(),r=$(this).attr("alt");$(emoteNamePopup).find(".tipsy-inner").text(r),$(emoteNamePopup).css("left",d.left-25),$(emoteNamePopup).css("top",d.top-32),$("div[data-reactid='.0.1.1']").append($(emoteNamePopup))}),$(document).on("mouseleave",".emote",function(){$(".tipsy").remove()})):$(document).off("mouseover",".emote"),n["bda-gs-8"]?dMode.enable():dMode.disable(),mainCore.saveSettings()}renderSidebar(){let n=this;$("[class*=side] > [class*=item]").off("click.v2settingspanel").on("click.v2settingspanel",()=>{BDV2.reactDom.unmountComponentAtNode(n.root),$(n.root).hide(),$(".content-region").first().show()}),n.sidebar.render()}get coreComponent(){return BDV2.react.createElement(V2Components.Scroller,{fade:!0,dark:!0,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:!0,dark:!0,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:!0,dark:!0,children:[BDV2.react.createElement(V2Components.CssEditor,{key:"csseditor"}),BDV2.react.createElement(V2Components.Tools,{key:"tools"})]})}get pluginsComponent(){let n=Object.keys(bdplugins).reduce((c,l)=>{return c.push(BDV2.react.createElement(V2Components.PluginCard,{key:l,plugin:bdplugins[l].plugin})),c},[]),d=BDV2.react.createElement(V2Components.List,{key:"plugin-list",className:"bda-slist",children:n}),r=BDV2.react.createElement("button",{className:"bd-pfbtn",onClick:()=>{betterDiscordIPC.send("asynchronous-message",{arg:"opendir",path:"plugindir"})}},"Open Plugin Folder"),o=BDV2.react.createElement(V2Components.ContentColumn,{key:"pcolumn",title:"Plugins",children:[r,d]});return BDV2.react.createElement(V2Components.Scroller,{fade:!0,dark:!0,children:[o,BDV2.react.createElement(V2Components.Tools,{key:"tools"})]})}get themesComponent(){let n=Object.keys(bdthemes).reduce((c,l)=>{return c.push(BDV2.react.createElement(V2Components.ThemeCard,{key:l,theme:bdthemes[l]})),c},[]),d=BDV2.react.createElement(V2Components.List,{key:"theme-list",className:"bda-slist",children:n}),r=BDV2.react.createElement("button",{className:"bd-pfbtn",onClick:()=>{betterDiscordIPC.send("asynchronous-message",{arg:"opendir",path:"themedir"})}},"Open Theme Folder"),o=BDV2.react.createElement(V2Components.ContentColumn,{key:"tcolumn",title:"Themes",children:[r,d]});return BDV2.react.createElement(V2Components.Scroller,{fade:!0,dark:!0,children:[o,BDV2.react.createElement(V2Components.Tools,{key:"tools"})]})}renderCoreSettings(){let n=this.root;return n?void BDV2.reactDom.render(this.coreComponent,n):void console.log("FAILED TO LOCATE ROOT: .layer .ui-standard-sidebar-view")}renderEmoteSettings(){let n=this.root;return n?void BDV2.reactDom.render(this.emoteComponent,n):void console.log("FAILED TO LOCATE ROOT: .layer .ui-standard-sidebar-view")}renderCustomCssEditor(){let n=this.root;return n?void BDV2.reactDom.render(this.customCssComponent,n):void console.log("FAILED TO LOCATE ROOT: .layer .ui-standard-sidebar-view")}renderPluginPane(){let n=this.root;return n?void BDV2.reactDom.render(this.pluginsComponent,n):void console.log("FAILED TO LOCATE ROOT: .layer .ui-standard-sidebar-view")}renderThemePane(){let n=this.root;return n?void BDV2.reactDom.render(this.themesComponent,n):void console.log("FAILED TO LOCATE ROOT: .layer .ui-standard-sidebar-view")}}