BetterDiscordApp-rauenzi/js/main.min.js

55 lines
86 KiB
JavaScript
Raw Normal View History

2018-10-14 19:08:51 +02:00
(function(){let t=window.require("fs"),a=window.require("process"),o=a.platform,l=("win32"===o?a.env.APPDATA:"darwin"===o?a.env.HOME+"/Library/Preferences":process.env.HOME+"/.config")+"/BetterDiscord/",d="localStorage.json",u={};if(t.existsSync(`${l}${d}`))try{u=JSON.parse(t.readFileSync(`${l}${d}`))}catch(b){console.log(b)}else if(t.existsSync(d))try{u=JSON.parse(t.readFileSync(d))}catch(b){console.log(b)}var h=u;h.setItem=function(b,f){h[b]=f,this.save()},h.getItem=function(b){return h[b]||null},h.save=function(){t.writeFileSync(`${l}${d}`,JSON.stringify(this),null,4)};var g=new Proxy(h,{set:function(b,f,y){h[f]=y,h.save()},get:function(b,f){return h[f]||null}});window.localStorage=g})(),(()=>{let t=document.createElement("div");t.className="bd-loaderv2",t.title="BetterDiscord is loading...",document.body.appendChild(t)})();var betterDiscordIPC=require("electron").ipcRenderer;window.bdStorage={},window.bdStorage.get=function(t){return betterDiscordIPC.sendSync("synchronous-message",{arg:"storage",cmd:"get","var":t})},window.bdStorage.set=function(t,a){betterDiscordIPC.sendSync("synchronous-message",{arg:"storage",cmd:"set","var":t,data:a})},window.bdPluginStorage={},window.bdPluginStorage.get=function(t,a){return betterDiscordIPC.sendSync("synchronous-message",{arg:"pluginstorage",cmd:"get",pn:t,"var":a})},window.bdPluginStorage.set=function(t,a,o){betterDiscordIPC.sendSync("synchronous-message",{arg:"pluginstorage",cmd:"set",pn:t,"var":a,data:o})};var bdSettings={},bdSettingsStorage={},releaseChannel=DiscordNative.globals.releaseChannel;bdSettingsStorage.initialize=function(){let t=require("fs"),a={stable:{},canary:{},ptb:{}};if(t.existsSync(bdConfig.dataPath+"/bdsettings.json"))try{a=JSON.parse(t.readFileSync(bdConfig.dataPath+"/bdsettings.json")),a.hasOwnProperty("settings")&&(a={[releaseChannel]:a})}catch(o){a={stable:{},canary:{},ptb:{}}}bdSettings=a?a:{stable:{},canary:{},ptb:{}}},bdSettingsStorage.get=function(t){return bdSettings[releaseChannel][t]?bdSettings[releaseChannel][t]:null},bdSettingsStorage.set=function(t,a){let o=require("fs");bdSettings[releaseChannel][t]=a;try{return o.writeFileSync(bdConfig.dataPath+"/bdsettings.json",JSON.stringify(bdSettings,null,4)),!0}catch(l){return Utils.err(l),!1}};var settingsPanel,emoteModule,quickEmoteMenu,voiceMode,pluginModule,themeModule,dMode,publicServersModule,supportedVersion="0.2.81",bbdVersion="0.1.2",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 sma
An update for BandagedBD is available (${bdConfig.updater.LatestVersion})! Please Reinstall!<br /><br />
<a href='https://github.com/rauenzi/BetterDiscordApp/releases/latest' target='_blank'>Download Installer</a>
`),Utils.log("Initializing Settings"),this.initSettings(),classNormalizer=new ClassNormalizer,emoteModule=new EmoteModule,quickEmoteMenu=new QuickEmoteMenu,Utils.log("Initializing EmoteModule"),window.emotePromise=emoteModule.init().then(()=>{emoteModule.initialized=!0,Utils.log("Initializing QuickEmoteMenu"),quickEmoteMenu.init()}),publicServersModule=new V2_PublicServers,voiceMode=new VoiceMode,dMode=new devMode,this.injectExternals(),await this.checkForGuilds(),Utils.log("Updating Settings"),settingsPanel=new V2_SettingsPanel,settingsPanel.updateSettings(),!bdpluginErrors&&(bdpluginErrors=[]),!bdthemeErrors&&(bdthemeErrors=[]),Utils.log("Loading Plugins"),pluginModule=new PluginModule,pluginModule.loadPlugins(),Utils.log("Loading Themes"),themeModule=new ThemeModule,themeModule.loadThemes(),$("#customcss").detach().appendTo(document.head),window.addEventListener("beforeunload",function(){settingsCookie["bda-dc-0"]&&document.querySelector(".btn.btn-disconnect").click()}),publicServersModule.initialize(),emoteModule.autoCapitalize(),Utils.log("Removing Loading Icon"),document.getElementsByClassName("bd-loaderv2")[0].remove(),Utils.log("Initializing Main Observer"),this.initObserver(),settingsCookie["fork-ps-1"]&&(Utils.log("Collecting Startup Errors"),this.showStartupErrors()))},Core.prototype.checkForGuilds=function(){return new Promise(t=>{const a=function(){return 0<document.querySelectorAll(`.${BDV2.guildClasses.guilds} .${BDV2.guildClasses.guild}`).length?t(bdConfig.deferLoaded=!0):void setTimeout(a,100)};$(document).ready(function(){setTimeout(a,100)})})},Core.prototype.injectExternals=function(){Utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js")},Core.prototype.initSettings=function(){if(bdSettingsStorage.initialize(),!bdSettingsStorage.get("settings"))settingsCookie=defaultCookie,this.saveSettings();else for(var t in this.loadSettings(),$("<style id=\"customcss\">").html(atob(window.bdStorage.get("bdcustomcss"))).appendTo(document.head),defaultCookie)void 0==settingsCookie[t]&&(settingsCookie[t]=defaultCookie[t],this.saveSettings())},Core.prototype.saveSettings=function(){bdSettingsStorage.set("settings",settingsCookie)},Core.prototype.loadSettings=function(){settingsCookie=bdSettingsStorage.get("settings")},Core.prototype.initObserver=function(){const t=new MutationObserver(a=>{for(let d,o=0,l=a.length;o<l;o++)if(d=a[o],"undefined"!=typeof pluginModule&&pluginModule.rawObserver(d),d.addedNodes.length&&d.addedNodes[0]instanceof Element){let h=d.addedNodes[0];h.classList.contains("layer-3QrUeG")&&(h.getElementsByClassName("guild-settings-base-section").length&&h.setAttribute("layer-id","server-settings"),h.getElementsByClassName("socialLinks-3jqNFy").length&&(h.setAttribute("layer-id","user-settings"),h.setAttribute("id","user-settings"),!document.getElementById("bd-settings-sidebar")&&settingsPanel.renderSidebar())),h.classList.contains("popout-3sVMXz")&&!h.classList.contains("popoutLeft-30WmrD")&&h.getElementsByClassName("emojiPicker-3m1S-j").length&&quickEmoteMenu.obsCallback(h)}});t.observe(document,{childList:!0,subtree:!0})},Core.prototype.inject24Hour=function(){if(!this.cancel24Hour){const t=/([0-9]{1,2}):([0-9]{1,2})\s(AM|PM)/;this.cancel24Hour=Utils.monkeyPatch(BDV2.TimeFormatter,"calendarFormat",{after:a=>{if(settingsCookie["bda-gs-6"]){const o=a.returnValue.match(t);return o&&4===o.length?"AM"===o[3]?a.returnValue=a.returnValue.replace(o[0],`${"12"===o[1]?"00":o[1].padStart(2,"0")}:${o[2]}`):a.returnValue=a.returnValue.replace(o[0],`${parseInt(o[1])+12}:${o[2]}`):void 0}}})}},Core.prototype.injectColoredText=function(){this.cancelColoredText||(this.cancelColoredText=Utils.monkeyPatch(BDV2.MessageContentComponent.prototype,"render",{after:t=>{settingsCookie["bda-gs-7"]&&Utils.monkeyPatch(t.returnValue.props,"children",{silent:!0,after:({returnValue:a})=>{const o=a.props.children[1],l=t.thisObject.props.message.colorString;return o&&l&&(o.props.style={color:l}),a}})}}))},Core.prototype.removeColoredText=function(){document.querySelectorAll(".markup-2BOw-j").forEach(t=>{t.
2018-08-19 23:15:23 +02:00
<div class="bd-backdrop backdrop-1wrmKB"></div>
2018-05-05 16:54:21 +02:00
<div class="bd-modal modal-1UGdnR">
<div class="bd-modal-inner inner-1JeGVc">
<div class="header header-1R_AjF">
<div class="title">${t}</div>
</div>
<div class="bd-modal-body">
<div class="scroller-wrap fade">
<div class="scroller">
${a}
</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>`);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")},Core.prototype.showStartupErrors=function(){function t(l){let d=$(`<div class="errors">`);for(let u of l){let h=$(`<div class="error">
<div class="table-column column-name">${u.name?u.name:u.file}</div>
<div class="table-column column-reason">${u.reason}</div>
<div class="table-column column-error"><a class="error-link" href="">${u.error?u.error.message:""}</a></div>
</div>`);d.append(h),u.error&&h.find("a").on("click",g=>{g.preventDefault(),Utils.err(`Error details for ${u.name?u.name:u.file}.`,u.error)})}return d}if(bdpluginErrors&&bdthemeErrors&&(bdpluginErrors.length||bdthemeErrors.length)){let a=$(`<div class="bd-modal-wrapper theme-dark">
2018-08-19 23:15:23 +02:00
<div class="bd-backdrop backdrop-1wrmKB"></div>
2018-05-05 16:54:21 +02:00
<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>
2018-10-14 19:08:51 +02:00
</div>`),o=[t(bdpluginErrors),t(bdthemeErrors)];a.find(".tab-bar-item").on("click",l=>{l.preventDefault(),a.find(".tab-bar-item").removeClass("selected"),$(l.target).addClass("selected"),a.find(".scroller").empty().append(o[$(l.target).index()])}),a.find(".footer button").on("click",()=>{a.addClass("closing"),setTimeout(()=>{a.remove()},300)}),a.find(".bd-backdrop").on("click",()=>{a.addClass("closing"),setTimeout(()=>{a.remove()},300)}),a.appendTo("#app-mount"),a.find(".tab-bar-item")[0].click()}},Core.prototype.showToast=function(t,a={}){if(bdConfig.deferLoaded){if(!document.querySelector(".bd-toasts")){let h=document.createElement("div");h.classList.add("bd-toasts");let g=document.querySelector(".chat-3bRxxu form, #friends, .noChannel-Z1DQK7, .activityFeed-28jde9");h.style.setProperty("left",g?g.getBoundingClientRect().left+"px":"0px"),h.style.setProperty("width",g?g.offsetWidth+"px":"100%"),h.style.setProperty("bottom",(document.querySelector(".chat-3bRxxu form")?document.querySelector(".chat-3bRxxu form").offsetHeight:80)+"px"),document.querySelector(".app").appendChild(h)}const{type:o="",icon:l=!0,timeout:d=3e3}=a;let u=document.createElement("div");u.classList.add("bd-toast"),o&&u.classList.add("toast-"+o),o&&l&&u.classList.add("icon"),u.innerText=t,document.querySelector(".bd-toasts").appendChild(u),setTimeout(()=>{u.classList.add("closing"),setTimeout(()=>{u.remove(),document.querySelectorAll(".bd-toasts .bd-toast").length||document.querySelector(".bd-toasts").remove()},300)},d)}},window.emotesFfz={},window.emotesBTTV={},window.emotesBTTV2={},window.emotesTwitch={},window.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 t={TwitchGlobal:{url:"https://twitchemotes.com/api_cache/v3/global.json",backup:"https://cdn.staticaly.com/gh/rauenzi/BetterDiscordApp/master/data/emotedata_twitch_global.json",variable:"TwitchGlobal",oldVariable:"emotesTwitch",getEmoteURL:a=>`https://static-cdn.jtvnw.net/emoticons/v1/${a.id}/1.0`,getOldData:(a,o)=>{return{id:a.match(/\/([0-9]+)\//)[1],code:o,emoticon_set:0,description:null}}},TwitchSubscriber:{url:"https://twitchemotes.com/api_cache/v3/subscriber.json",backup:"https://cdn.staticaly.com/gh/rauenzi/BetterDiscordApp/master/data/emotedata_twitch_subscriber.json",variable:"TwitchSubscriber",oldVariable:"subEmotesTwitch",parser:a=>{let o={};for(let l in a){let d=a[l];for(let g,u=0,h=d.emotes.length;u<h;u++)g=d.emotes[u],o[g.code]=g.id}return o},backupParser:a=>{return a},getEmoteURL:a=>`https://static-cdn.jtvnw.net/emoticons/v1/${a}/1.0`,getOldData:a=>a.match(/\/([0-9]+)\//)[1]},FrankerFaceZ:{url:"https://cdn.staticaly.com/gh/rauenzi/BetterDiscordApp/master/data/emotedata_ffz.json",variable:"FrankerFaceZ",oldVariable:"emotesFfz",getEmoteURL:a=>`https://cdn.frankerfacez.com/emoticon/${a}/1`,getOldData:a=>a.match(/\/([0-9]+)\//)[1]},BTTV:{url:"https://api.betterttv.net/emotes",variable:"BTTV",oldVariable:"emotesBTTV",parser:a=>{let o={};for(let u,l=0,d=a.emotes.length;l<d;l++)u=a.emotes[l],o[u.regex]=u.url;return o},getEmoteURL:a=>`${a}`,getOldData:a=>a},BTTV2:{url:"https://cdn.staticaly.com/gh/rauenzi/BetterDiscordApp/master/data/emotedata_bttv.json",variable:"BTTV2",oldVariable:"emotesBTTV2",getEmoteURL:a=>`https://cdn.betterttv.net/emote/${a}/1x`,getOldData:a=>a.match(/emote\/(.+)\//)[1]}};for(await this.getBlacklist(),await this.loadEmoteData(t);!BDV2.MessageContentComponent;)await new Promise(a=>setTimeout(a,100));this.cancelEmoteRender||(this.cancelEmoteRender=Utils.monkeyPatch(BDV2.MessageContentComponent.prototype,"render",{after:({returnValue:a})=>{Utils.mon