globalThis.hyperEdit=(()=>{"object"==typeof globalThis.hyperEdit&&globalThis.hyperEdit.destructor();const d={usesBetterDiscord:"object"==typeof globalThis.BdApi,modules:new Map,interceptListeners:[],_interceptIdCount:1-Number.MAX_SAFE_INTEGER,intercept:(e,t,n)=>(d.interceptListeners.push({method:e.toUpperCase(),url:t,callback:n,id:d._interceptIdCount}),d._interceptIdCount++),__token:null,nonce:{seen:new Set,add(e){for(d.nonce.seen.add(e);100<d.nonce.seen.size;)d.nonce.seen.delete(d.nonce.seen.first())},generate(){let e=BigInt(Date.now()-new Date("2015"))<<22n;for(;d.nonce.seen.has(e.toString());)e+=1n;return e=e.toString(),d.nonce.add(e),e}},$req:globalThis.XMLHttpRequest,$wsSend:globalThis.WebSocket.prototype.send};globalThis.XMLHttpRequest=class XMLHttpRequest extends d.$req{__open_opts=null;__headers=new Map;__mime="text/xml";__listeners=new Map;constructor(...e){super(...e)}setRequestHeader(e,t){return this.__headers.set(e,t),"Authorization"==e&&(d.__token=t),super.setRequestHeader(e,t)}overrideMimeType(e){return this.__mime=e,super.overrideMimeType(e)}open(t,n,e,s,r){this.__open_opts={method:t,url:n,async:e,user:s,password:r};for(let e=0;e<d.interceptListeners.length;++e)t==d.interceptListeners[e].method&&d.interceptListeners[e].url.test(n)&&d.interceptListeners[e].callback(this);return super.open(t,n,e,s,r)}addEventListener(e,t,n){this.__listeners.set(e,{func:t,opts:n}),super.addEventListener(e,t,n)}__hardAbort(){var e=()=>{};this.send=e,this.open=e,this.setRequestHeader=e,Object.defineProperties(this,{status:{get:()=>500,set:e=>e},readyState:{get:()=>d.$req.DONE,set:e=>e}}),setImmediate(()=>this.onreadystatechange.call(this))}__clone(){const e=new globalThis.XMLHttpRequest;e.overrideMimeType(this.__mime),e.open(this.__open_opts.method,this.__open_opts.url,this.__open_opts.async,this.__open_opts.user,this.__open_opts.password);for(var[t,n]of this.__headers)e.setRequestHeader(t,n);e.onreadystatechange=this.onreadystatechange.bind(e);for(var[s,r]of this.__listeners)e.addEventListener(s,r.func,r.opts);return e}},globalThis.WebSocket.prototype.send=function(e){d.$wsSend.call(this,e)},d.usesBetterDiscord&&(d.$acr=globalThis.BdApi.findModuleByProps("applyChatRestrictions").applyChatRestrictions,globalThis.BdApi.findModuleByProps("applyChatRestrictions").applyChatRestrictions=()=>Promise.resolve({valid:!0}));const NL="\n";class Module{constructor(e){this.name=e,this.enabled=!0,this.commands=new Map}destructor(){}}class HyperEditCommandError extends Error{name="HyperEditCommandError";constructor(e){super(e+"\n\n\t->help")}}class Argument{type="Generic";label="Unknown";precedence=0;min=Number.NEGATIVE_INFINITY;max=Number.POSITIVE_INFINITY;oneOf=[];allowInfinite=!1;isArrayArg=!1;optional=!1;constructor(e,t){this.label=e,void 0!==t&&("number"==typeof t.min&&(this.min=t.min),"number"==typeof t.max&&(this.max=t.max),Array.isArray(t.oneOf)&&(this.oneOf=Array.from(t.oneOf)),"boolean"==typeof t.allowInfinite&&(this.allowInfinite=t.allowInfinite),"boolean"==typeof t.isArrayArg&&(this.isArrayArg=t.isArrayArg),"boolean"==typeof t.optional&&(this.optional=t.optional))}get identifier(){var e=this.optional?"[]":"<>";return""+e[0]+(this.isArrayArg?"...":"")+this.label+":"+this.type+e[1]}constrain(e){return this.oneOf.length&&!this.oneOf.includes(e)?"Must be one of: "+this.oneOf.join(", "):""}validate(e){return!0}parse(e){return e}}class StringArgument extends Argument{type="String";precedence=1;constrain(e){return e.length<this.min?`Must be at least ${this.min} characters long`:e.length>this.max?`Must not exceed ${this.max} characters in length`:super.constrain(e.toLowerCase())}}class FloatArgument extends Argument{type="Number";precedence=2;validate(e){return e==e}constrain(e){return this.allowInfinite||e!=Number.POSITIVE_INFINITY&&e!=Number.NEGATIVE_INFINITY?e<this.min?"Must be at least "+this.min:e>this.max?"Must be at most "+this.max:super.constrain(e):"Must not be infinite"}parse(e){return Number(e)}}class IntegerArgument extends FloatArgument{type="Integer";precedence=2;validate(e){return Number.isInteger(e)}}class ArgumentSequence{constructor(e,t,n){this.cmdname=t,this.args=Array.from(e),this.func=n,this.required=0;for(let e=this.optional=0;e<this.args.length;++e){if(this.args[e].optional)this.args[e].isArrayArg?this.optional=Number.POSITIVE_INFINITY:this.optional+=1;else if(this.required+=1,e&&this.args[e-1].optional)throw new TypeError("Required Argument can not follow optional Argument!");if(this.args[e].isArrayArg&&e!=this.args.length-1)throw new TypeError("Array Argument may only be at the end of the sequence!")}}usage(n=-1){var e=this.args.map((e,t)=>{t=t==n?"!":"";return t+e.identifier+t}).join(" ");return"->"+this.cmdname+(e.length?" ":"")+e+"<-"}cumulativePrecedence(){let e=0;for(const t of this.args)e+=t.precedence;return e}valuesFromArgs(n){const s={values:[],error:""};if(n.length<this.required)return s.error=`Valid range: ${this.required}-${this.required+this.optional}, received: ${n.length} args${NL} @ `+this.usage(),s;for(let e=0,t=0;e<n.length;++e){const a=this.args[t];if(!a)break;var r=a.parse(n[e]);if(!a.validate(r))return s.error=`Expected ${a.identifier}; Received "${r}"${NL} @ `+this.usage(e),s;a.isArrayArg?(Array.isArray(s.values.last())||s.values.push([]),s.values.last().push(r)):(s.values.push(r),t+=1)}return s}constrainValues(n){let s="";for(let t=0,e=0;t<n.length;++t){const r=this.args[e];if(r.isArrayArg){if(!Array.isArray(n[t]))return new TypeError("Uh oh, received non array for array arg arguement");for(let e=0;e<n[t].length;++e)if(s=r.constrain(n[t][e]))return new HyperEditCommandError(`"${s}" - received "${n[t][e]}"`+NL+this.usage(t))}else{if(s=r.constrain(n[t]))return new HyperEditCommandError(`"${s}" - received "${n[t]}"`+NL+this.usage(t));e+=1}}return s}}class Command{constructor(e,t,n,s,...r){if(this.enabled=!0,this.name=e,this.aliases=t||[],this.desc=n,s.length!=r.length)throw new TypeError("Functions and Overload amount dont match");this.sequences=s.map((e,t)=>new ArgumentSequence(e,this.name,r[t])),this.thisArg={f:this.constructor.prototype.f.bind(this)};for(const a in this)this.thisArg[a]=this[a];this.module=null}assignModule(e){this.module=e;for(const t of Object.getOwnPropertyNames(e.constructor.prototype))if("constructor"!=t){const n=e.constructor.prototype[t];"function"==typeof n?this.thisArg[t]=n.bind(e):this.thisArg[t]=n}}f(n){return(e,...t)=>this.sequences[n].func.call(this.thisArg,e,...t)}run(t,n){const s=[],r=[];for(let e=0;e<this.sequences.length;++e){var a=this.sequences[e].valuesFromArgs(n);a.error?r[e]=a.error:s.push([this.sequences[e],a.values])}if(!s.length)throw new HyperEditCommandError("No overloads possible!"+NL+NL+r.join("\n\n"));const o=s.sort(([e],[t])=>Math.max(n.length-(e.required+e.optional),0)-Math.max(n.length-(t.required+t.optional),0)||t.cumulativePrecedence()-e.cumulativePrecedence());for(let e=0;e<o.length;++e){var i=o[e][0].constrainValues(o[e][1]);if(!(i instanceof HyperEditCommandError))return o[e][0].func.call(this.thisArg,t,...o[e][1]);o[e].push(i)}throw o[0][2]}}return d.modules.set("chat",new class Chat extends Module{constructor(){super("chat")}}),d.modules.get("chat").commands.set("annoyed",new Command("annoyed",["dissatisfied","frustrated"],"annoyed emoticon",[[new IntegerArgument("Index",{optional:!0})]],async function(e,t=null){const n=["(＃＞＜)","(；⌣̀_⌣́)","(￣□￣」)","(＃￣0￣)","(＃￣ω￣)","(￢_￢;)","(＞ｍ＜)","(」°ロ°)」","(〃＞＿＜;〃)","(＾＾＃)","(︶︹︺)","(￣ヘ￣)","<(￣ ﹌ ￣)>","(￣︿￣)","(＞﹏＜)","(--_--)","凸(￣ヘ￣)","ヾ( ￣O￣)ツ","(⇀‸↼‶)","o(>< )o","(」＞＜)」","(ᗒᗣᗕ)՞","(눈_눈)"];return null==t?n.random():n[t%n.length]})),d.modules.get("chat").commands.get("annoyed").assignModule(d.modules.get("chat")),d.modules.get("chat").commands.set("clear",new Command("clear",["cl","clr"],"post an empty message full of newlines",[[new IntegerArgument("Newlines",{min:1,max:1998,optional:!0})]],async(e,t)=>String.fromCharCode(8205)+"\n".repeat(t||100)+String.fromCharCode(8205)+"\n")),d.modules.get("chat").commands.get("clear").assignModule(d.modules.get("chat")),d.modules.get("chat").commands.set("confusion",new Command("confusion",[],"confused emoticon",[[new IntegerArgument("Index",{optional:!0})]],async function(e,t=null){const n=["(￣ω￣;)","σ(￣、￣〃)","(￣～￣;)","(-_-;)・・・","┐('～`;)┌","(・_・ヾ","(〃￣ω￣〃ゞ","┐(￣ヘ￣;)┌","(・_・;)","(￣_￣)・・・","╮(￣ω￣;)╭","(¯ . ¯;)","(＠_＠)","(・・;)ゞ","Σ(￣。￣ﾉ)","(・・ ) ?","(•ิ_•ิ)?","(◎ ◎)ゞ","(ーー;)","ლ(ಠ_ಠ ლ)",'ლ(¯ロ¯"ლ)',"(¯ . ¯٥)","(¯ ¯٥)"];return null==t?n.random():n[t%n.length]})),d.modules.get("chat").commands.get("confusion").assignModule(d.modules.get("chat")),d.modules.get("chat").commands.set("doubt",new Command("doubt",[],"doubting emoticon",[[new IntegerArgument("Index",{optional:!0})]],async function(e,t=null){const n=["(￢_￢)","(→_→)","(￢ ￢)","(￢‿￢ )","(¬_¬ )","(←_←)","(¬ ¬ )","(¬‿¬ )","(↼_↼)","(⇀_⇀)","(ᓀ ᓀ)"];return null==t?n.random():n[t%n.length]})),d.modules.get("chat").commands.get("doubt").assignModule(d.modules.get("chat")),d.modules.get("chat").commands.set("indifference",new Command("indifference",["shrug"],"indifferent emoticon",[[new IntegerArgument("Index",{optional:!0})]],async function(e,t=null){const n=["ヽ(ー_ー )ノ","ヽ(´ー` )┌","┐(‘～` )┌","ヽ(　￣д￣)ノ","┐(￣ヘ￣)┌","ヽ(￣～￣　)ノ","╮(￣_￣)╭","ヽ(ˇヘˇ)ノ","┐(￣～￣)┌","┐(︶▽︶)┌","╮(￣～￣)╭","¯\\_(ツ)_/¯","╮(︶︿︶)╭","┐(￣∀￣)┌","┐( ˘ ､ ˘ )┌","╮(︶▽︶)╭","╮( ˘ ､ ˘ )╭","┐( ˘_˘ )┌","╮( ˘_˘ )╭","┐(￣ヮ￣)┌","┐(シ)┌"];return null==t?n.random():n[t%n.length]})),d.modules.get("chat").commands.get("indifference").assignModule(d.modules.get("chat")),d.modules.get("chat").commands.set("joy",new Command("joy",[],"joyful emoticon",[[new IntegerArgument("Index",{optional:!0})]],async function(e,t=null){const n=["(* ^ ω ^)","(´ ∀ ` *)","(o^▽^o)","(⌒▽⌒)☆","<(￣︶￣)>","(´｡• ω •｡`)","(￣ω￣)","(＠＾◡＾)","ヽ(*・ω・)ﾉ","(o´▽`o)","(*´▽`*)","｡ﾟ( ﾟ^∀^ﾟ)ﾟ｡","( ´ ω ` )","(((o(*°▽°*)o)))","(≧◡≦)","(´• ω •`)","(＾▽＾)","(⌒ω⌒)","╰(▔∀▔)╯","(─‿‿─)","(*^‿^*)","(✯◡✯)","(◕‿◕)","(*≧ω≦*)","(☆▽☆)","(⌒‿⌒)","＼(≧▽≦)／","☆ ～('▽^人)","(*°▽°*)","٩(｡•́‿•̀｡)۶","(✧ω✧)","ヽ(*⌒▽⌒*)ﾉ","(´｡• ᵕ •｡`)","( ´ ▽ ` )","(￣▽￣)","╰(*´︶`*)╯","ヽ(>∀<☆)ノ","o(≧▽≦)o","(☆ω☆)","(っ˘ω˘ς )","＼(￣▽￣)／","(*¯︶¯*)","＼(＾▽＾)／","٩(◕‿◕)۶","(o˘◡˘o)","\\(★ω★)/","\\(^ヮ^)/","(〃＾▽＾〃)","(╯✧▽✧)╯","o(>ω<)o","o( ❛ᴗ❛ )o","｡ﾟ(TヮT)ﾟ｡","( ‾́ ◡ ‾́ )","(ﾉ´ヮ`)ﾉ*: ･ﾟ","(b ᵔ▽ᵔ)b","(๑˃ᴗ˂)ﻭ","(๑˘︶˘๑)","( ˙꒳​˙ )","(´･ᴗ･ ` )","(ﾉ◕ヮ◕)ﾉ*:･ﾟ✧","(„• ֊ •„)","(.❛ ᴗ ❛.)","(⁀ᗢ⁀)","(￢‿￢ )","(¬‿¬ )","(*￣▽￣)b","( ˙▿˙ )","(¯▿¯)","( ◕▿◕ )","＼(٥⁀▽⁀ )／","(„• ᴗ •„)","(ᵔ◡ᵔ)","( ´ ▿ ` )"];return null==t?n.random():n[t%n.length]})),d.modules.get("chat").commands.get("joy").assignModule(d.modules.get("chat")),d.modules.get("chat").commands.set("love",new Command("love",[],"loving emoticon",[[new IntegerArgument("Index",{optional:!0})]],async function(e,t=null){const n=["(♡-_-♡)","ヽ(♡‿♡)ノ","(─‿‿─)♡","(´｡• ᵕ •｡`) ♡","(｡・//ε//・｡)","(´ ω `♡)","♡( ◡‿◡ )","(◕‿◕)♡","(/▽＼*)｡o○♡","(ღ˘⌣˘ღ)","(♡°▽°♡)","♡(｡- ω -)","♡ ～('▽^人)","(´• ω •`) ♡","(´ ε ` )♡","(´｡• ω •｡`) ♡","( ´ ▽ ` ).｡ｏ♡","╰(*´︶`*)╯♡","(*˘︶˘*).｡.:*♡","(♡˙︶˙♡)","♡＼(￣▽￣)／♡","(≧◡≦) ♡","(⌒▽⌒)♡","٩(♡ε♡)۶","σ(≧ε≦σ) ♡","♡ (⇀ 3 ↼)","♡ (￣З￣)","(❤ω❤)","(´♡‿♡`)","(°◡°♡)","Σ>―(〃°ω°〃)♡→","(´,,•ω•,,)♡","(´꒳`)♡"];return null==t?n.random():n[t%n.length]})),d.modules.get("chat").commands.get("love").assignModule(d.modules.get("chat")),d.modules.get("chat").commands.set("pain",new Command("pain",[],"pain emoticon",[[new IntegerArgument("Index",{optional:!0})]],async function(e,t=null){const n=["~(>_<~)","☆⌒(> _ <)","☆⌒(>。<)","(☆_@)","(×_×)","(x_x)","(×_×)⌒☆","(x_x)⌒☆","(×﹏×)","☆(＃××)","(＋_＋)","[ ± _ ± ]","٩(× ×)۶","(ﾒ﹏ﾒ)"];return null==t?n.random():n[t%n.length]})),d.modules.get("chat").commands.get("pain").assignModule(d.modules.get("chat")),d.modules.get("chat").commands.set("sad",new Command("sad",[],"sad emoticon",[[new IntegerArgument("Index",{optional:!0})]],async function(e,t=null){const n=["(ノ_<。)","(-_-)","(´-ω-`)","(μ_μ)","(-ω-、)","o(TヘTo)","( ; ω ; )","(｡╯︵╰｡)","( ﾟ，_ゝ｀)","(个_个)","(╯︵╰,)","｡･ﾟ(ﾟ><ﾟ)ﾟ･｡","( ╥ω╥ )","(╯_╰)","(╥_╥)",".｡･ﾟﾟ･(＞_＜)･ﾟﾟ･｡.","(／ˍ・、)","(ノ_<、)","(╥﹏╥)","｡ﾟ(｡ﾉωヽ｡)ﾟ｡","(つω`｡)","(｡T ω T｡)","(ﾉω･､)","･ﾟ･(｡>ω<｡)･ﾟ･","(T_T)","(>_<)","(っ˘̩╭╮˘̩)っ","｡ﾟ･ (>﹏<) ･ﾟ｡","o(〒﹏〒)o","(｡•́︿•̀｡)","(ಥ﹏ಥ)","(ಡ‸ಡ)"];return null==t?n.random():n[t%n.length]})),d.modules.get("chat").commands.get("sad").assignModule(d.modules.get("chat")),d.modules.set("extensions",new class Extensions extends Module{constructor(){super("extensions"),Map.prototype.find=function(e){for(var[t,n]of this)if(e(n,t))return n},Set.prototype.first=function(){return this.values().next().value},Array.prototype.random=function(){if(0!=this.length)return this[Math.floor(Math.random()*this.length)]},Array.prototype.last=function(){return this[this.length-1]}}destructor(){delete Map.prototype.find,delete Set.prototype.first,delete Array.prototype.random,delete Array.prototype.last}}),d.modules.set("fun",new class FunModule extends Module{constructor(){super("fun")}}),d.modules.get("fun").commands.set("minesweeper",new Command("minesweeper",["msweep"],"A game of minesweeper using spoiler tags",[[new IntegerArgument("Width",{min:1,max:30}),new IntegerArgument("Height",{min:1,max:50}),new FloatArgument("Density",{min:0,max:1})]],async function(e,r,a,t){const o=new Array(r*a);let n=0,s=r*a;for(;0<s--;)Math.random()<t&&(o[s]=-1,n+=1);for(let e=0;e<a;++e)for(let s=0;s<r;++s)if(-1!=o[e*r+s]){let n=0;for(let t=-1;t<=1;++t){var i,l=e+t;if(!(l<0||a<=l))for(let e=-1;e<=1;++e)(t||e)&&((i=s+e)<0||r<=i||-1==o[l*r+i]&&(n+=1))}o[e*r+s]=n}var d=[":zero:",":one:",":two:",":three:",":four:",":five:",":six:",":seven:",":eight:"];let m=`**${n} Bombs!** ${r}x${a}
`;for(let t=0;t<a;++t){for(let e=0;e<r;++e){var g=o[t*r+e];m+=`||${-1==g?"💥":d[g]}||`}m+="\n"}return m})),d.modules.get("fun").commands.get("minesweeper").assignModule(d.modules.get("fun")),d.modules.set("image",new class ImageModule extends Module{constructor(){super("image")}loadImage(n){return new Promise(e=>{const t=new Image;t.onload=()=>e(t),t.src=n})}async foreachImage(a,e){for(let r=0;r<a.length;++r)if(a[r].type.startsWith("image/")){const n=await e(await new Promise((n,e)=>{const s=new FileReader;s.onload=async()=>{var e=await this.loadImage(s.result);const t=document.createElement("canvas");t.width=e.width,t.height=e.height,t.getContext("2d").drawImage(e,0,0),n(t)},s.onerror=e,s.readAsDataURL(a[r])}),r);var t=await new Promise(t=>{n.toBlob(e=>{t(new File([e],a[r].name,{type:"image/png"}))},"image/png",1)});a[r]=t}}resizeCanvas(e,t,n){const s=document.createElement("canvas");s.width=e.width,s.height=e.height,s.getContext("2d").drawImage(e,0,0),e.width=t,e.height=n,e.getContext("2d").drawImage(s,0,0,t,n)}splitText(e,r){const a=[e];e:for(;;){for(let s=0;s<a.length;++s)if(!r(a[s])){var o=a[s].split(" ");if(1!=o.length){let e="",t="",n=0;for(;n<o.length;){if(!r(e+" "+o[n])){e=e||o[n++];break}e+=" "+o[n++]}for(;n<o.length;)t+=" "+o[n++];a.splice(s,1,e.trim(),t.trim());continue e}}break}return a}}),d.modules.get("image").commands.set("arial",new Command("arial",[],"arial meme image",[[new StringArgument("Text",{optional:!0,isArrayArg:!0})]],async function(e,t){const i=t.join(" ");return i&&await this.foreachImage(e.files,async t=>{Math.min(t.width,t.height)<512&&(t.width<t.height?this.resizeCanvas(t,512,t.height/t.width*512):this.resizeCanvas(t,t.width/t.height*512,512));var n=t.width/512*30*(.4*Math.random()+.8);const s=t.getContext("2d");s.font=n+"px Arial";var r=this.splitText(i,e=>s.measureText(e).width<=t.width);console.log(t.width);var e=n*r.length+12;const a=document.createElement("canvas");a.width=t.width,a.height=t.height+e;const o=a.getContext("2d");o.fillStyle="white",o.fillRect(0,0,a.width,e),o.drawImage(t,0,e),o.font=n+"px Arial",o.fillStyle="black",o.textAlign="left",o.textBaseline="top",o.strokeSize=2;for(let e=0;e<r.length;++e)o.fillText(r[e],6,6+e*n);return a}),""})),d.modules.get("image").commands.get("arial").assignModule(d.modules.get("image")),d.modules.get("image").commands.set("imagemap",new Command("imagemap",["imgmap"],"Iterates all pixels in image, takes [r,g,b,a]",[[new StringArgument("javascript",{isArrayArg:!0})]],async function(e,t){const i=new Function("return ((r,g,b,a) =>"+(t.join(" ")||"[r,g,b,a];")+");")();return await this.foreachImage(e.files,async e=>{const t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height);for(let e=0;e<n.data.length;e+=4){var[s,r,a,o]=i(n.data[e]/255,n.data[e+1]/255,n.data[e+2]/255,n.data[e+3]/255);n.data[e]=255*s||n.data[e],n.data[e+1]=255*r||n.data[e+1],n.data[e+2]=255*a||n.data[e+2],n.data[e+3]=255*o||n.data[e+3]}return t.putImageData(n,0,0),e}),""})),d.modules.get("image").commands.get("imagemap").assignModule(d.modules.get("image")),d.modules.get("image").commands.set("impact",new Command("impact",[],"impact meme image",[[new StringArgument("Top Text"),new StringArgument("Bottom Text",{optional:!0})]],async function(e,o,i){return await this.foreachImage(e.files,async t=>{Math.min(t.width,t.height)<512&&(t.width<t.height?this.resizeCanvas(t,512,t.height/t.width*512):this.resizeCanvas(t,t.width/t.height*512,512));const n=t.getContext("2d");n.fillStyle="white",n.strokeStyle="black",n.textAlign="center",n.strokeSize=2;var s=t.width/512*50*(.4*Math.random()+.8);if(n.font=s+"px Impact",o){n.textBaseline="top";var r=this.splitText(o.toUpperCase(),e=>n.measureText(e).width<=t.width);for(let e=0;e<r.length;++e)n.fillText(r[e],t.width/2,6+e*s),n.strokeText(r[e],t.width/2,6+e*s)}if(i){n.textBaseline="bottom";var a=this.splitText(i.toUpperCase(),e=>n.measureText(e).width<=t.width);for(let e=a.length-1;0<=e;--e)n.fillText(a[e],t.width/2,t.height-6-e*s),n.strokeText(a[e],t.width/2,t.height-6-e*s)}return t}),""})),d.modules.get("image").commands.get("impact").assignModule(d.modules.get("image")),d.modules.get("image").commands.set("jpg",new Command("jpg",["jpeg","needsmorejpg","needsmorejpeg"],"greatly reduce image quality",[[new FloatArgument("Quality",{min:0,max:1})]],async function(e,n){return await this.foreachImage(e.files,async e=>{const t=new Image;return t.src=e.toDataURL("image/jpeg",n),await new Promise(e=>t.onload=e),e.getContext("2d").drawImage(t,0,0),e}),""})),d.modules.get("image").commands.get("jpg").assignModule(d.modules.get("image")),d.modules.get("image").commands.set("wall",new Command("wall",[],"create a wall of images",[[]],async function(e){return await this.foreachImage(e.files,async e=>{const n=e.getContext("2d");var s=await this.loadImage(e.toDataURL("image/png",1));e.width=Math.min(3*s.width,2100),e.height=Math.min(3*s.height,2100),n.clearRect(0,0,e.width,e.height),n.transform(.5,-.4,0,.8,0,0);for(let t=-2;t<=8;++t)for(let e=-2;e<=4;++e)n.drawImage(s,e*s.width,t*s.height);return e}),""})),d.modules.get("image").commands.get("wall").assignModule(d.modules.get("image")),d.modules.set("meta",new class extends Module{constructor(){super("meta"),d.intercept("POST",/\/channels\/[0-9]{17,19}\/messages$/i,e=>{e.send=async function(t,n){try{const a={files:[]};if("string"==typeof n){var e=JSON.parse(n);for(const i in e)a[i]=e[i]}else{if(!(n instanceof FormData))return d.$req.prototype.send.call(t,n);var s=JSON.parse(n.get("payload_json"));for(const l in s)a[l]=s[l];for(const m of a.attachments)a.files[m.id]=n.get(`files[${m.id}]`)}void 0!==a.nonce&&d.nonce.add(a.nonce);const o=d.modules.get("meta");if(a.content=await o.commands.get("run").f(0)(a,[a.content]),0==a.content.length&&0==a.files.length)return t.__hardAbort();if(a.content.length>=this.maxMessageLength){var r=this.splitMessageContent(a.content);console.log(r);const g=new Array(r.length+Math.max(0,Math.floor((a.files.length-1)/this.maxFileAmt)));g[0]=t;for(let e=1;e<g.length;g[e++]=g[0].__clone());const c=a.files,u=a.attachments;delete a.files,delete a.attachments,delete a.content;let e=0;for(;e<r.length;){const n=Object.assign({},a);n.content=r[e],e&&(n.nonce=d.nonce.generate()),e==r.length-1?(n.files=c.splice(0,this.maxFileAmt),n.files.length&&(n.attachments=u.splice(0,this.maxFileAmt))):(n.files=[],delete n.type,delete n.sticker_ids,n.tts=!1),e!=r.length-1&&await new Promise(e=>setTimeout(e,1500)),e+=1}t.__hardAbort()}else this.sendMessage(t,a)}catch(e){return console.error(e),e instanceof HyperEditCommandError?alert(e.message):alert(e.stack),t.__hardAbort()}}.bind(this,e)})}sendMessage(e,t){var n=t.files;if(delete t.files,t.content=t.content.replaceAll(d.__token,"[[REDACTED]]"),n.length){const s=new FormData;s.set("payload_json",JSON.stringify(t));for(let e=0;e<n.length;++e)s.set(`files[${e}]`,n[e]);return d.$req.prototype.send.call(e,s)}return d.$req.prototype.send.call(e,JSON.stringify(t))}maxMessageLength=2e3;maxFileAmt=10;splitMessageContent(e){const s=this.maxMessageLength;var t=(e=e.replace(/\t/g,"\t")).match(new RegExp(`[^${" ".replace("\n","\\n")}]{${.95*s},}`,"gm"));if(t)for(var r of t){let t=0,n=[];r.split("").forEach(e=>{n[t]&&(n[t].length>=.95*s||"\n"==e&&n[t].length>=.95*s-100)&&t++,n[t]=n[t]?n[t]+e:e}),e=e.replace(r,n.join(" "))}let n=[],a=0;e.split(" ").forEach(e=>{n[a]&&(n[a]+""+e).length>.975*s&&a++,n[a]=n[a]?n[a]+" "+e:e});let o=null,i=null;for(let t=0;t<n.length;t++){o?(n[t]=o+n[t],o=null):i&&(n[t]=i+n[t],i=null);var l=n[t].match(/`{3,}[\S]*\n|`{3,}/gm);let e=n[t].match(/[^`]{0,1}`{1,2}[^`]|[^`]`{1,2}[^`]{0,1}/gm);l&&l.length%2==1?(n[t]=n[t]+"```",o=l[l.length-1]+"\n"):e&&e.length%2==1&&(i=e[e.length-1].replace(/[^`]/g,""),n[t]=n[t]+i)}return n}}),d.modules.get("meta").commands.set("eval",(()=>{const random=(M1=M1.bind(M1),Object.assign(M1,{int(e=0,t=1,n=!0,s=!0){return n||--t,s&&--e,Math.floor(Math.random()*(t-e)+e+1)}}));function M1(){switch(arguments.length){case 0:return Math.random();case 1:if("number"==typeof arguments[0])return Math.random()*arguments[0];if("string"==typeof arguments[0]||Array.isArray(arguments[0]))return arguments[0][Math.floor(Math.random()*arguments[0].length)];throw new TypeError("Invalid Overload");case 2:return Math.random()*(arguments[1]-arguments[0])+arguments[0];default:new TypeError("invalid Overload")}}return d.random=random,new Command("eval",["ev"],"Evaluate javascript code",[[new StringArgument("javascript",{isArrayArg:!0})]],async(msg,code)=>eval(code.join(" ")))})()),d.modules.get("meta").commands.get("eval").assignModule(d.modules.get("meta")),d.modules.get("meta").commands.set("help",new Command("help",["info","about"],"display a help page",[[]],async function(e){let t=`
<----!HyperEdit Info Page!---->
   ->help

Commands start with prefix ->
Commands are terminated with suffix <-
Termination suffix can be implied
Command name follows directly after prefix, arguments follow name
<>  = required argument
[]  = optional argument
... = Array argument
   ->name argument1 argument2
Arguments can be grouped into a single one with quotes
   ->name "this is a single argument despite spaces" "second argument"
Arguments are presented as NAME:TYPE
Commands can be run inside commands
   ->impact ->eval Math.random()<- ->eval Math.random()<-<-
   
`;return d.modules.forEach(e=>{e.commands.size&&(t+=`--${e.name}--`+NL),e.commands.forEach(e=>{t+=e.name+": "+e.desc+NL,e.sequences.forEach(e=>{t+=`	`+e.usage()+NL}),t+=NL})}),alert(t),""})),d.modules.get("meta").commands.get("help").assignModule(d.modules.get("meta")),d.modules.get("meta").commands.set("run",new Command("run",["runcommand"],"recursively evaluate hyperedit commands",[[new StringArgument("Hyperedit Commands",{isArrayArg:!0})]],async function(o,e){let t=e.join(" ");const i=t=>{var e=[...t.matchAll(/([-+|]\/?>)/gi)];const n=[...t.matchAll(/(<-)/gi)].map(e=>e.index+2);for(;n.length<e.length;)n.push(t.length);const s=e=>"object"==typeof e?e.index:e;var r=[...e,...n].sort((e,t)=>s(e)-s(t));const a=[],o=[];for(let e=0;e<r.length;++e){var i,l=r[e];"object"==typeof l?a.push(l):"number"==typeof l&&(i=a.pop(),0==a.length&&o.push({start:i.index+i[0].length,end:l,prefix:i[0],substring:t.slice(i.index+i[0].length,l)}))}return o},l=async t=>{t.substring.endsWith("<-")&&(t.substring=t.substring.substring(0,t.substring.length-2));var n=i(t.substring);for(let e=n.length-1;0<=e;--e)t.substring=t.substring.substring(0,n[e].start-n[e].prefix.length)+await l(n[e])+t.substring.substring(n[e].end);t.substring=t.substring.replace(/"((?:\\.|[^"\\])*)"/g,e=>e.substring(1,e.length-1).replace(/\s+/g,String.fromCharCode(10240)));const[s,...e]=t.substring.split(/\s+/).map(e=>e.replace(new RegExp(String.fromCharCode(10240),"g")," ")),r=d.modules.find(e=>e.enabled&&e.commands.find(e=>e.name==s||e.aliases.includes(s)));if(!r)throw new HyperEditCommandError("Unknown Command!: "+s);const a=r.commands.find(e=>e.name==s||e.aliases.includes(s));return a.run(o,e)};var n=i(t);for(let e=n.length-1;0<=e;--e)t=t.substring(0,n[e].start-n[e].prefix.length)+await l(n[e])+t.substring(n[e].end);return t})),d.modules.get("meta").commands.get("run").assignModule(d.modules.get("meta")),d.modules.set("utility",new class Utility extends Module{constructor(){super("utility")}}),d.modules.get("utility").commands.set("hash",new Command("hash",[],"hashes a piece of text",[[new StringArgument("Algorithm",{oneOf:["sha256"]})]],async function(e,t){return""})),d.modules.get("utility").commands.get("hash").assignModule(d.modules.get("utility")),d.destructor=()=>{d.modules.forEach(e=>e.destructor()),globalThis.XMLHttpRequest=d.$req,globalThis.WebSocket.prototype.send=d.$wsSend,d.usesBetterDiscord&&(globalThis.BdApi.findModuleByProps("applyChatRestrictions").applyChatRestrictions=d.$acr),delete globalThis.hyperEdit},d})();