You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2 lines
4.9 KiB

(function(){"use strict";function l(n,e,t){var r=Symbol();const o=t.before,u=t.instead,f=t.after,X=new Proxy(e[n],{apply:(b,Z,[d,p])=>{o!==void 0&&o.apply(d,p);const E=t.instead!==void 0?u.apply(d,[b.bind(d),...p]):b.apply(d,p);return f===void 0?E:f.apply(d,[E].concat(p))}}),h=e[n];e[n]=function(){return X(this,arguments)};var v=()=>{e[n]=h};return e[r]={name:n,orig:h,unpatch:v},v}function D(n,e,t){return l(n,e,{before:t})}function P(n,e,t){return l(n,e,{instead:t})}function O(n,e,t){return l(n,e,{after:t})}var R={monkeyPatch:l,before:D,instead:P,after:O};function k(){let n={};return window.webpackChunkdiscord_app.push([[Math.random().toString(36)],{},e=>{n=e}]),n.c}function x(n,e){let t=[];for(const r in e){const o=e[r].exports;o&&(o.default&&o.__esModule&&n(o.default)?t.push(o.default):n(o)&&t.push(o))}return t}let s={modules:k(),filter:x,find:n=>s.filter(n,s.modules)[0],findAll:n=>s.filter(n,s.modules),findByProps:(...n)=>s.find(e=>n.every(t=>e[t]!==void 0)),findByPropsAll:(...n)=>s.findAll(e=>n.every(t=>e[t]!==void 0))};function I(){var n=!navigator.userAgentData&&/Safari\//.test(navigator.userAgent)&&!/Chrom(e|ium)\//.test(navigator.userAgent);if(!n||!indexedDB.databases)return Promise.resolve();var e;return new Promise(function(t){var r=function(){return indexedDB.databases().finally(t)};e=setInterval(r,100),r()}).finally(function(){return clearInterval(e)})}function i(n){return new Promise((e,t)=>{n.oncomplete=n.onsuccess=()=>e(n.result),n.onabort=n.onerror=()=>t(n.error)})}function y(n,e){const t=I().then(()=>{const r=indexedDB.open(n);return r.onupgradeneeded=()=>r.result.createObjectStore(e),i(r)});return(r,o)=>t.then(u=>o(u.transaction(e,r).objectStore(e)))}let m;function a(){return m||(m=y("keyval-store","keyval")),m}function c(n,e=a()){return e("readonly",t=>i(t.get(n)))}function _(n,e,t=a()){return t("readwrite",r=>(r.put(e,n),i(r.transaction)))}function M(n,e=a()){return e("readwrite",t=>(n.forEach(r=>t.put(r[1],r[0])),i(t.transaction)))}function B(n,e=a()){return e("readonly",t=>Promise.all(n.map(r=>i(t.get(r)))))}function T(n,e,t=a()){return t("readwrite",r=>new Promise((o,u)=>{r.get(n).onsuccess=function(){try{r.put(e(this.result),n),o(i(r.transaction))}catch(f){u(f)}}}))}function C(n,e=a()){return e("readwrite",t=>(t.delete(n),i(t.transaction)))}function L(n,e=a()){return e("readwrite",t=>(n.forEach(r=>t.delete(r)),i(t.transaction)))}function A(n=a()){return n("readwrite",e=>(e.clear(),i(e.transaction)))}function g(n,e){return n("readonly",t=>(t.openCursor().onsuccess=function(){!this.result||(e(this.result),this.result.continue())},i(t.transaction)))}function U(n=a()){const e=[];return g(n,t=>e.push(t.key)).then(()=>e)}function N(n=a()){const e=[];return g(n,t=>e.push(t.value)).then(()=>e)}function $(n=a()){const e=[];return g(n,t=>e.push([t.key,t.value])).then(()=>e)}var F=Object.freeze({__proto__:null,clear:A,createStore:y,del:C,delMany:L,entries:$,get:c,getMany:B,keys:U,promisifyRequest:i,set:_,setMany:M,update:T,values:N});const H={React:s.findByProps("__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","createElement"),ReactDOM:s.findByProps("__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","hydrate"),"idb-keyval":F};function W(n){n.demon.__commands={},n.demon.patcher.after("sendMessage",n.demon.webpack.findByProps("sendMessage"),(e,t)=>{let r;for(const o of Reflect.ownKeys(n.demon.__commands)){let u=n.demon.__commands[o];if(t[1].content.split(" ")[0]===">"+u.name){r=u.callback(t);break}}return r!==void 0&&(t[1].content=r),t})}function Y(n){let e=Symbol(n.name);return window.demon.__commands[e]=n,()=>{delete window.demon.__commands[e]}}var w={add:Y,init:W};async function G(n){return n.demon.__plugins={},!0}async function z(n,e){const t={metadata:e,iife:n,enabled:!1},r=await c("demoncord");return r.plugin[e.name]=t,await _("demoncord",r),!0}async function K(n){const e=await c("demoncord");return e.plugin[n]===void 0?(console.error("[Demoncord] Cannot remove non-existant plugin!"),!1):(e.plugin[n]=void 0,delete e.plugin[n],await _("demoncord",e),!0)}async function J(n){const e=await c("demoncord");if(e.plugin[n]===void 0)return console.error("[Demoncord] Cannot start non-existant plugin!"),!1;{console.log(`[Demoncord] Starting ${n}...`);const t=e.plugin[n],o=(0,eval)(t.iife).onStart;let u={};return o(u),console.log(`[Demoncord] Started ${n}!`),window.demon.__plugins[n]={status:1,ctx:u},!0}}async function Q(n){const e=await c("demoncord");if(e.plugin[n]===void 0)return console.error("[Demoncord] Cannot stop non-existant or non-running plugin!"),!1;{console.log(`[Demoncord] Stopping ${n}...`);const t=e.plugin[n];return(0,eval)(t.iife).onStop(window.demon.__plugins[n].ctx),console.log(`[Demoncord] Stopped ${n}!`),!0}}var S={init:G,addPlugin:z,delPlugin:K,startPlugin:J,stopPlugin:Q};async function V(n){n.demon={patcher:R,webpack:s,common:H,commands:{add:w.add},__DO_NOT_USE_OR_YOU_WILL_BE_FIRED_UNTO_THE_DEPTHS_OF_HELL:{plugins:S}},w.init(n),S.init(n)}window.demon&&delete window.demon,V(window)})();