BetterDiscordApp-v1/js/main.min.js

128 lines
103 KiB
JavaScript
Raw Normal View History

(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,hi
<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-