BetterDiscordApp-rauenzi/js/main.min.js

52 lines
85 KiB
JavaScript
Raw Normal View History

(function(){let a=window.require("fs"),o=window.require("process"),d=o.platform,l=("win32"===d?o.env.APPDATA:"darwin"===d?o.env.HOME+"/Library/Preferences":process.env.HOME+"/.config")+"/BetterDiscord/",u="localStorage.json",h={};if(a.existsSync(`${l}${u}`))try{h=JSON.parse(a.readFileSync(`${l}${u}`))}catch(f){console.log(f)}else if(a.existsSync(u))try{h=JSON.parse(a.readFileSync(u))}catch(f){console.log(f)}var g=h;g.setItem=function(f,y){g[f]=y,this.save()},g.getItem=function(f){return g[f]||null},g.save=function(){a.writeFileSync(`${l}${u}`,JSON.stringify(this),null,4)};var b=new Proxy(g,{set:function(f,y,E){g[y]=E,g.save()},get:function(f,y){return g[y]||null}});window.localStorage=b})(),(()=>{let a=document.createElement("div");a.className="bd-loaderv2",a.title="BetterDiscord is loading...",document.body.appendChild(a)})(),window.bdStorage={},window.bdStorage.get=function(a){return betterDiscordIPC.sendSync("synchronous-message",{arg:"storage",cmd:"get","var":a})},window.bdStorage.set=function(a,o){betterDiscordIPC.sendSync("synchronous-message",{arg:"storage",cmd:"set","var":a,data:o})},window.bdPluginStorage={},window.bdPluginStorage.get=function(a,o){return betterDiscordIPC.sendSync("synchronous-message",{arg:"pluginstorage",cmd:"get",pn:a,"var":o})},window.bdPluginStorage.set=function(a,o,d){betterDiscordIPC.sendSync("synchronous-message",{arg:"pluginstorage",cmd:"set",pn:a,"var":o,data:d})};var bdSettings={},bdSettingsStorage={};bdSettingsStorage.initialize=function(){let a=require("fs"),o={};if(a.existsSync(bdConfig.dataPath+"/bdsettings.json"))try{o=JSON.parse(a.readFileSync(bdConfig.dataPath+"/bdsettings.json"))}catch(d){o={}}bdSettings=o?o:{}},bdSettingsStorage.get=function(a){return bdSettings[a]?bdSettings[a]:null},bdSettingsStorage.set=function(a,o){let d=require("fs");bdSettings[a]=o;try{return d.writeFileSync(bdConfig.dataPath+"/bdsettings.json",JSON.stringify(bdSettings,null,4)),!0}catch(l){return utils.err(l),!1}};var settingsPanel,emoteModule,utils,quickEmoteMenu,voiceMode,pluginModule,themeModule,dMode,publicServersModule,jsVersion=1.792,supportedVersion="0.2.81",bbdVersion="0.1.0",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"},"Startup Error Modal":{id:"fork-ps-1",info:"Show a modal with plugin/theme errors on startup",implemented:!0,hidden:!1,cat:"fork"},"Show Toasts":{id:"fork-ps-2",info:"Shows a small notification for starting and stopping plugins & themes",implemented:!0,hidden:!1,cat:"fork"},"Scroll To Settings":{id:"fork-ps-3",info:"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)",implemented:!0,hidden:!1,cat:"fork"},"
2018-05-05 16:54:21 +02:00
<div class="bd-backdrop backdrop-1ocfXc"></div>
<div class="bd-modal modal-1UGdnR">
<div class="bd-modal-inner inner-1JeGVc">
<div class="header header-1R_AjF">
2018-01-09 04:24:00 +01:00
<div class="title">${a}</div>
</div>
<div class="bd-modal-body">
<div class="scroller-wrap fade">
<div class="scroller">
2018-08-05 20:52:01 +02:00
${o}
</div>
</div>
</div>
2018-05-05 16:54:21 +02:00
<div class="footer footer-2yfCgX">
<button type="button">Okay</button>
</div>
</div>
</div>
2018-08-05 20:52:01 +02:00
</div>`);d.find(".footer button").on("click",()=>{d.addClass("closing"),setTimeout(()=>{d.remove()},300)}),d.find(".bd-backdrop").on("click",()=>{d.addClass("closing"),setTimeout(()=>{d.remove()},300)}),d.appendTo("#app-mount")},Core.prototype.showStartupErrors=function(){function a(l){let u=$(`<div class="errors">`);for(let h of l){let g=$(`<div class="error">
<div class="table-column column-name">${h.name?h.name:h.file}</div>
<div class="table-column column-reason">${h.reason}</div>
<div class="table-column column-error"><a class="error-link" href="">${h.error?h.error.message:""}</a></div>
</div>`);u.append(g),h.error&&g.find("a").on("click",b=>{b.preventDefault(),utils.err(`Error details for ${h.name?h.name:h.file}.`,h.error)})}return u}if(bdpluginErrors&&bdthemeErrors&&(bdpluginErrors.length||bdthemeErrors.length)){let o=$(`<div class="bd-modal-wrapper theme-dark">
2018-05-05 16:54:21 +02:00
<div class="bd-backdrop backdrop-1ocfXc"></div>
<div class="bd-modal bd-startup-modal modal-1UGdnR">
<div class="bd-modal-inner inner-1JeGVc">
<div class="header header-1R_AjF"><div class="title">Startup Errors</div></div>
<div class="bd-modal-body">
<div class="tab-bar-container">
<div class="tab-bar TOP">
<div class="tab-bar-item">Plugins</div>
<div class="tab-bar-item">Themes</div>
</div>
</div>
<div class="table-header">
<div class="table-column column-name">Name</div>
<div class="table-column column-reason">Reason</div>
<div class="table-column column-error">Error</div>
</div>
<div class="scroller-wrap fade">
<div class="scroller">
2017-11-04 16:04:50 +01:00
</div>
</div>
</div>
2018-05-05 16:54:21 +02:00
<div class="footer footer-2yfCgX">
<button type="button">Okay</button>
</div>
</div>
</div>
</div>`),d=[a(bdpluginErrors),a(bdthemeErrors)];o.find(".tab-bar-item").on("click",l=>{l.preventDefault(),o.find(".tab-bar-item").removeClass("selected"),$(l.target).addClass("selected"),o.find(".scroller").empty().append(d[$(l.target).index()])}),o.find(".footer button").on("click",()=>{o.addClass("closing"),setTimeout(()=>{o.remove()},300)}),o.find(".bd-backdrop").on("click",()=>{o.addClass("closing"),setTimeout(()=>{o.remove()},300)}),o.appendTo("#app-mount"),o.find(".tab-bar-item")[0].click()}},Core.prototype.showToast=function(a,o={}){if(bdConfig.deferLoaded){if(!document.querySelector(".bd-toasts")){let g=document.createElement("div");g.classList.add("bd-toasts");let b=document.querySelector(".chat-3bRxxu form, #friends, .noChannel-Z1DQK7, .activityFeed-28jde9");g.style.setProperty("left",b?b.getBoundingClientRect().left+"px":"0px"),g.style.setProperty("width",b?b.offsetWidth+"px":"100%"),g.style.setProperty("bottom",(document.querySelector(".chat-3bRxxu form")?document.querySelector(".chat-3bRxxu form").offsetHeight:80)+"px"),document.querySelector(".app").appendChild(g)}const{type:d="",icon:l=!0,timeout:u=3e3}=o;let h=document.createElement("div");h.classList.add("bd-toast"),d&&h.classList.add("toast-"+d),d&&l&&h.classList.add("icon"),h.innerText=a,document.querySelector(".bd-toasts").appendChild(h),setTimeout(()=>{h.classList.add("closing"),setTimeout(()=>{h.remove(),document.querySelectorAll(".bd-toasts .bd-toast").length||document.querySelector(".bd-toasts").remove()},300)},u)}};var emotesFfz={},emotesBTTV={},emotesBTTV2={},emotesTwitch={},subEmotesTwitch={};window.bdEmotes={TwitchGlobal:{},TwitchSubscriber:{},BTTV:{},FrankerFaceZ:{},BTTV2:{}},window.bdEmoteSettingIDs={TwitchGlobal:"bda-es-7",TwitchSubscriber:"bda-es-7",BTTV:"bda-es-2",FrankerFaceZ:"bda-es-1",BTTV2:"bda-es-2"};function EmoteModule(){}EmoteModule.prototype.init=async function(){this.modifiers=["flip","spin","pulse","spin2","spin3","1spin","2spin","3spin","tr","bl","br","shake","shake2","shake3","flap"],this.overrides=["twitch","bttv","ffz"],this.categories=["TwitchGlobal","TwitchSubscriber","BTTV","BTTV2","FrankerFaceZ"];let a={TwitchGlobal:{url:"https://twitchemotes.com/api_cache/v3/global.json",backup:"https://"+bdConfig.updater.CDN+"/"+bdConfig.repo+"/BetterDiscordApp/"+bdConfig.hash+"/data/emotedata_twitch_global.json",variable:"TwitchGlobal",oldVariable:"emotesTwitch",getEmoteURL:o=>`https://static-cdn.jtvnw.net/emoticons/v1/${o.id}/1.0`,getOldData:(o,d)=>{return{id:o.match(/\/([0-9]+)\//)[1],code:d,emoticon_set:0,description:null}}},TwitchSubscriber:{url:"https://twitchemotes.com/api_cache/v3/subscriber.json",backup:"https://"+bdConfig.updater.CDN+"/"+bdConfig.repo+"/BetterDiscordApp/"+bdConfig.hash+"/data/emotedata_twitch_subscriber.json",variable:"TwitchSubscriber",oldVariable:"subEmotesTwitch",parser:o=>{let d={};for(let l in o){let u=o[l];for(let b,h=0,g=u.emotes.length;h<g;h++)b=u.emotes[h],d[b.code]=b.id}return d},backupParser:o=>{return o},getEmoteURL:o=>`https://static-cdn.jtvnw.net/emoticons/v1/${o}/1.0`,getOldData:o=>o.match(/\/([0-9]+)\//)[1]},FrankerFaceZ:{url:"https://"+bdConfig.updater.CDN+"/"+bdConfig.repo+"/BetterDiscordApp/"+bdConfig.hash+"/data/emotedata_ffz.json",variable:"FrankerFaceZ",oldVariable:"emotesFfz",getEmoteURL:o=>`https://cdn.frankerfacez.com/emoticon/${o}/1`,getOldData:o=>o.match(/\/([0-9]+)\//)[1]},BTTV:{url:"https://api.betterttv.net/emotes",variable:"BTTV",oldVariable:"emotesBTTV",parser:o=>{let d={};for(let h,l=0,u=o.emotes.length;l<u;l++)h=o.emotes[l],d[h.regex]=h.url;return d},getEmoteURL:o=>`${o}`,getOldData:o=>o},BTTV2:{url:"https://"+bdConfig.updater.CDN+"/"+bdConfig.repo+"/BetterDiscordApp/"+bdConfig.hash+"/data/emotedata_bttv.json",variable:"BTTV2",oldVariable:"emotesBTTV2",getEmoteURL:o=>`https://cdn.betterttv.net/emote/${o}/1x`,getOldData:o=>o.match(/emote\/(.+)\//)[1]}};for(this.loadEmoteData(a),this.getBlacklist();!BDV2.MessageContentComponent;)await new Promise(o=>setTimeout(o,100));this.cancelEmoteRender||(this.cancelEmoteRender=Utils.monkeyPatch(BDV2.MessageContentComponen