(function(q,ke,a,g,m,M,T,w,n,ne,b,E,_,Ae,X){"use strict";constLe=asyncfunction(){conste=await(awaitfetch("https://uselessfacts.jsph.pl/api/v2/facts/random")).json();return{text:e.text,source:e.source,language:e.language}},$e=asyncfunction(){return{text:(await(awaitfetch("https://dogapi.dog/api/v2/facts?limit=1")).json()).data[0].attributes.body}},De=asyncfunction(){conste=await(awaitfetch("https://catfact.ninja/fact")).json();return{text:e.fact,length:e.length}},Pe=asyncfunction(e,t){try{constr=awaitfetch(`https://api.obamabot.me/v2/image/petpet?image=${e.replace("webp","png")}`);if(r.ok){consts=awaitr.json();if(s&&s.url)returns}}catch(r){console.warn("[PetPet] Obama API failed, falling back to .ru:",r)}if(t)return{url:`https://ptc.pwn3t.ru/${t}.gif`};thrownewError("All PetPet APIs are down")},xe=asyncfunction(e="gary"){try{switch(e){case"gary":return(await(awaitfetch("https://api.garythe.cat/gary")).json()).url;case"goober":return(await(awaitfetch("https://api.garythe.cat/goober")).json()).url;case"catapi":return(await(awaitfetch("https://api.thecatapi.com/v1/images/search")).json())[0].url;case"minker":return"https://minky.materii.dev/";default:thrownewError("Invalid Gary image source value")}}catch(t){returnconsole.error(`[Gary API] Error fetching image from ${e}:`,t),null}},Y=g.findByProps("sendMessage"),J=function(e){lett=e.text;returna.storage.factSettings?.includeCitation&&e.source&&(t+=`
Source:${e.source}`),t},Be={name:"catfact",displayName:"catfact",description:"Sends a random cat fact.",displayDescription:"Sends a random cat fact.",applicationId:"-1",inputType:1,type:1,execute:async function(e,t){try{const r=await De(),s=Date.now().toString();return Y.sendMessage(t.channel.id,{content:J(r)},void 0,{nonce:s}),null}catch(r){return console.error("[CatFact] Error:",r),m.showToast("Failed to fetch cat fact",3e3),null}}},Fe={name:"dogfact",displayName:"dogfact",description:"Sends a dog fact.",displayDescription:"Sends a dog fact.",applicationId:"-1",inputType:1,type:1,execute:async function(e,t){try{const r=await $e(),s=Date.now().toString();return Y.sendMessage(t.channel.id,{content:J(r)},void 0,{nonce:s}),null}catch(r){return console.error("[DogFact] Error:",r),m.showToast("Failed to fetch dog fact",3e3),null}}},Me={name:"useless",displayName:"useless",description:"Sends a useless fact.",displayDescription:"Sends a useless fact.",applicationId:"-1",inputType:1,type:1,execute:async function(e,t){try{const r=await Le(),s=Date.now().toString();return Y.sendMessage(t.channel.id,{content:J(r)},void 0,{nonce:s}),null}catch(r){return console.error("[UselessFact] Error:",r),m.showToast("Failed to fetch useless fact",3e3),null}}},$={CONTENT:"This list is over 2000 characters. Send anyway?",CONFIRM:"Send",CANCEL:"Cancel"},_e={DETAILED:"detailed"},Q="",V={SLM_NOT_INSTALLED:"This list is over 2000 characters. Install the Split Large Messages plugin to send it.",SLM_NOT_ENABLED:"This list is over 2000 characters. Enable the Split Large Messages plugin to send it."},ae={SEMICOL:"; ",NEW_LINE:`
`},Ve="Nothing to see here, huh...",re="github.com/fres621/vendetta-plugins",k={ENABLED:"\u2705",DISABLED:"\u274C",SELECTED:"\u2705",NOT_SELECTED:"\u274C"},Ue=g.findByProps("sendMessage","receiveMessage"),D=g.findByProps("sendBotMessage"),se=(function(){try{return g.findByStoreName("UserStore").getCurrentUser()?.premiumType===2?4e3:2e3}catch{return 2e3}})(),ie=function(e){return Object.keys(e).includes(re)},oe=function(e){return Object.values(e).find(function(t){return t.id==re})?.enabled},le=function(e){return e.find(function(t){return t.name===_e.DETAILED})?.value??!1},U=function(e){return!e||!Array.isArray(e)||e.length===0?"Unknown":e.filter(function(t){return t&&(typeof t=="string"||typeof t=="object"&&t.name)}).map(function(t){return typeof t=="string"?t:t.name||"Unknown"}).join(ae.SEMICOL)||"Unknown"},ce=function(e){return e.join(ae.NEW_LINE).trimEnd()},W=function(e){return ce(e).length},O=async function(e,t){const r=Date.now().toString();await Ue.sendMessage(e,{content:ce(t)},void 0,{nonce:r})},de=function(e,t){return[`**My${e}List|${t}${e}s**`,Q]};async function We(e,t){try{const r=le(e),s=a.storage.themeListAlwaysDetailed??!1;if(!M.themes||typeof M.themes!="object"){const u=t.channel.id;return D.sendBotMessage(u,"No themes found or themes not loaded yet."),null}const i=Object.values(M.themes),o=t.channel.id,l=de("Theme",Object.keys(M.themes).length);if(i.length)for(const u of i){if(!u||typeof u!="object")continue;const{selected:d,data:f,id:v}=u,A=f?.name||"Unknown Theme",L=f?.description||"No description",P=f?.authors;r||s?l.push(`>**Name**:${A}`,`>**Selected**:${d?k.SELECTED:k.NOT_SELECTED}`,`>**Description**:${L}`,`>**Authors**:${U(P)}`,`>**[Install!](${v||"unknown"})**`,Q):l.push(`>${d?k.SELECTED:k.NOT_SELECTED}**${A}**by${U(P)}`)}else l.push(Ve);const c=W(l)>se;if(c&&!ie(T.plugins))D.sendBotMessage(o,V.SLM_NOT_INSTALLED);else if(c&&!oe(T.plugins))D.sendBotMessage(o,V.SLM_NOT_ENABLED);else{if(W(l)>2e3)return w.alerts.showConfirmationAlert({content:$.CONTENT,confirmText:$.CONFIRM,cancelText:$.CANCEL,onConfirm:async function(){return await O(o,l)}});await O(o,l)}}catch(r){return console.error("[ThemeList] Error:",r),null}}async function Oe(e,t){try{const r=le(e),s=a.storage.pluginListAlwaysDetailed??!1,i=t.channel.id;if(!T.plugins||typeof T.plugins!="object")return D.sendBotMessage(i,"No plugins found or plugins not loaded yet."),null;const o=de("Plugin",Object.keys(T.plugins).length);for(const c of Object.values(T.plugins)){if(!c||typeof c!="object")continue;const{enabled:u,manifest:d,id:f}=c,v=d?.name||"Unknown Plugin",A=d?.description||"No description",L=d?.authors;r||s?o.push(`>**Name**:${v}`,`>**Status**:${u?k.ENABLED:k.DISABLED}`,`>**Description**:${A}`,`>**Authors**:${U(L)}`,`>**[Install!](${f||"unknown"})**`,Q):o.push(`>${u?k.ENABLED:k.DISABLED}**${v}**by${U(L)}`)}const l=W(o)>se;if(l&&!ie(T.plugins))D.sendBotMessage(i,V.SLM_NOT_INSTALLED);else if(l&&!oe(T.plugins))D.sendBotMessage(i,V.SLM_NOT_ENABLED);else{if(W(o)>2e3)return w.alerts.showConfirmationAlert({content:$.CONTENT,confirmText:$.CONFIRM,cancelText:$.CANCEL,onConfirm:async function(){return await O(i,o)}});await O(i,o)}}catch(r){return console.error("[PluginList] Error:",r),null}}const Ge={name:"plugin-list",displayName:"plugin list",description:"Send your plugin list to the current channel",displayDescription:"Send your plugin list to the current channel",options:[{name:"detailed",description:"Whether to send a list with detailed information.",type:5,required:!1,displayName:"detailed",displayDescription:"Whether to send a list with detailed information."}],execute:Oe,applicationId:"-1",inputType:1,type:1},je={name:"theme-list",displayName:"theme list",description:"Send your theme list to the current channel",displayDescription:"Send your theme list to the current channel",options:[{name:"detailed",description:"Whether to send a list with detailed information.",type:5,required:!1,displayName:"detailed",displayDescription:"Whether to send a list with detailed information."}],execute:We,applicationId:"-1",inputType
`)},void 0,{nonce:l}),null}}catch(r){return console.error("[Sysinfo] Error:",r),null}}const dt={name:"sysinfo",displayName:"sysinfo",description:"Display system information",displayDescription:"Display system information",options:[{name:"ephemeral",displayName:"ephemeral",description:"Keep sysinfo ephemeral (default: true)",displayDescription:"Keep sysinfo ephemeral (default: true)",type:5,required:!1},...ye.slice(0,-1).map(function(e){return{name:e,displayName:e,description:`Displaythe${e}section.Setdefaultinsettings.`,displayDescription:`Displaythe${e}section.Setdefaultinsettings.`,type:5,required:!1}})],execute:ct,applicationId:"-1",inputType:1,type:1},pe=g.findByProps("sendMessage","receiveMessage"),ut=g.findByStoreName("SpotifyStore");async function ft(e,t){return a.storage.enabledCommands?.spotifyTrack?G(t,function(r){return`https://open.spotify.com/track/${r.id}`}):null}async function gt(e,t){return a.storage.enabledCommands?.spotifyAlbum?G(t,function(r){return`https://open.spotify.com/album/${r.album.id}`}):null}async function mt(e,t){return a.storage.enabledCommands?.spotifyArtists?G(t,function(r){return r.artists.map(function(s){return`[${s.name}](${s.external_urls.spotify})`}).join(`
`)}):null}async function yt(e,t){return a.storage.enabledCommands?.spotifyCover?G(t,function(r){return r.album.image.url}):null}async function G(e,t){try{const r=e.channel.id,s=ut?.getTrack?.();if(!s){const l=Date.now().toString();return pe.sendMessage(r,{content:"You are not listening to any track."},void 0,{nonce:l}),null}const i=t(s),o=Date.now().toString();return pe.sendMessage(r,{content:i},void 0,{nonce:o}),null}catch(r){return console.error("[Spotify Command] Error:",r),null}}const pt={name:"spotify track",displayName:"spotify track",description:"Sends your current Spotify track",displayDescription:"Sends your current Spotify track",applicationId:"-1",inputType:1,type:1,execute:ft},ht={name:"spotify album",displayName:"spotify album",description:"Sends your current track's album",displayDescription:"Sends your current track's album",applicationId:"-1",inputType:1,type:1,execute:gt},bt={name:"spotify artists",displayName:"spotify artists",description:"Sends your current track's artists",displayDescription:"Sends your current track's artists",applicationId:"-1",inputType:1,type:1,execute:mt},vt={name:"spotify cover",displayName:"spotify cover",description:"Sends your current track's cover",displayDescription:"Sends your current track's cover",applicationId:"-1",inputType:1,type:1,execute:yt},Ct=g.findByProps("sendMessage"),wt={name:"gary",displayName:"gary",description:"Send a random Gary image to the channel.",displayDescription:"Send a random Gary image to the channel.",options:[],execute:async function(e,t){try{a.storage.garySettings||(a.storage.garySettings={imageSource:"gary"});const r=a.storage.garySettings.imageSource||"gary";console.log(`[GaryCommand]Usingimagesource:${r}`);const s=await xe(r);if(!s)return console.log("[Gary Command] No image URL received"),null;console.log(`[GaryCommand]Sendingimage:${s}`);const i=Date.now().toString();return Ct.sendMessage(t.channel.id,{content:s},void 0,{nonce:i}),{type:4}}catch(r){return console.error("[Gary] Error:",r),null}},applicationId:"-1",inputType:1,type:1},he=g.findByProps("sendMessage","receiveMessage"),St=g.findByProps("getLastSelectedChannelId"),Rt=g.findByProps("createBotMessage"),Et=g.findByProps("BOT_AVATARS");function j(e,t,r){const s=e??St?.getChannelId?.(),i=Rt.createBotMessage({channelId:s,content:"",embeds:r});i.author.username="Astolfo",i.author.avatar="Astolfo",Et.BOT_AVATARS.Astolfo="https://i.pinimg.com/736x/50/77/1f/50771f45b1c015cfbb8b0853ba7b8521.jpg",typeof t=="string"?i.content=t:Object.assign(i,t),he.receiveMessage(s,i)}const Nt={name:"lovefemboys",displayName:"lovefemboys",description:"Get an image of a femboy",displayDescription:"Get an image of a femboy",options:[{name:"nsfw",displayName:"nsfw",description:"Get the result from r/femboys instead of r/femboy (NSFW)",displayDescription:"Get the result from r/femboys instead of r/femboy (NSFW)",required:!1,type:5},{name:"sort",displayName:"sort",description:"Changes the way reddit sorts.",displayDescription:"Changes the way reddit sorts",required:!1,type:3},{name:"silent",displayName:"silent",description:"Makes it so only you can see the message.",displayDescription:"Makes it so only you can see the message.",required:!1,type:5}],applicationId:"-1",inputType:1,type:1,execute:async function(e,t){try{const r=e.find(function(c){return c.name==="nsfw"})?.value;let s=e.find(function(c){return c.name==="sort"})?.value;const i=e.find(function(c){return c.name==="silent"})?.value;if(typeof s>"u"&&(s=a.storage.sortdefs),!["best","hot","new","rising","top","controversial"].includes(s)){j(t.channel.id,"Incorrect sorting type. Valid options are\n`best`, `hot`, `new`, `rising`, `top`, `controversial`.",[]);return}if(r&&!await new Promise(function(c){w.alerts.showConfirmationAlert({title:"\u26A0\uFE0F NSFW Content Warning",content:"This command will send NSFW (Not Safe For Work) content from r/femboys. Are you sure you want to continue?",confirmText:"Yes, Continue",onConfirm:function(){return c(!0)},cancelText:"Cancel",onCancel:function(){return c(!1)}})}))return null;let o=await fetch(`https://w
(Youcandisablethischeckinpluginsettings)`,[]);return}r&&(o=await fetch(`https://www.reddit.com/r/femboys/${s}.json?limit=100`).then(function(c){return c.json()})),o=o.data?.children?.[Math.floor(Math.random()*o.data?.children?.length)]?.data;const l=await fetch(`https://www.reddit.com/u/${o?.author}/about.json`).then(function(c){return c.json()});if(i??!0)j(t.channel.id,"",[{type:"rich",title:o?.title,url:`https://reddit.com${o?.permalink}`,author:{name:`u/${o?.author} \u2022 r/${o?.subreddit}`,proxy_icon_url:l?.data.icon_img.split("?")[0],icon_url:l?.data.icon_img.split("?")[0]},image:{proxy_url:o?.url_overridden_by_dest?.replace(/.gifv$/g,".gif")??o?.url.replace(/.gifv$/g,".gif"),url:o?.url_overridden_by_dest?.replace(/.gifv$/g,".gif")??o?.url?.replace(/.gifv$/g,".gif"),width:o?.preview?.images?.[0]?.source?.width,height:o?.preview?.images?.[0]?.source?.height},color:"0xf4b8e4"}]);else{const c=Date.now().toString();he.sendMessage(t.channel.id,{content:o?.url_overridden_by_dest??o?.url},void 0,{nonce:c})}}catch(r){console.error("[LoveFemboys] Error:",r),j(t.channel.id,"ERROR !!!!!!!!!!!! \u{1F62D}\u{1F62D}\u{1F62D} Check debug logs!! \u{1F97A}\u{1F97A}\u{1F97A}",[])}}},It=g.findByProps("sendMessage"),Tt=g.findByProps("sendBotMessage","sendMessage","receiveMessage"),kt={name:"ip",displayName:"ip",description:"IP address and domain lookup",displayDescription:"IP address and domain lookup",options:[{name:"query",displayName:"query",description:"Enter IPv4/IPv6 address or domain name",displayDescription:"Enter IPv4/IPv6 address or domain name",type:3,required:!0},{name:"send",displayName:"send",description:"Send to chat",displayDescription:"Send to chat",type:5,required:!1},{name:"ephemeral",displayName:"ephemeral",description:"Send as ephemeral message (only you can see)",displayDescription:"Send as ephemeral message (only you can see)",type:5,required:!1}],execute:async function(e,t){try{const r=e.find(function(d){return d.name==="query"})?.value,s=e.find(function(d){return d.name==="send"})?.value||!1,i=e.find(function(d){return d.name==="ephemeral"})?.value||!1;if(!r){const d="\u274C Query parameter is required!";return i?{type:4,data:{content:d,flags:64}}:(m.showToast(d,b.getAssetIDByName("CircleXIcon")),null)}!i&&!s&&m.showToast(`Looking up IP information for ${r}...`,b.getAssetIDByName("DownloadIcon"));const o=`http://ipwhois.app/json/${encodeURIComponent(r)}?objects=success,ip,type,as,org,isp,continent,country,country_capital,city,region,country_phone,latitude,longitude,timezone,currency,completed_requests`,l=await fetch(o);if(!l.ok)throw new Error(`HTTP ${l.status}: ${l.statusText}`);const c=await l.json();if(!c.success){const d=`\u274C Failed to lookup IP information for: ${r}`;return i?{type:4,data:{content:d,flags:64}}:(m.showToast(d,b.getAssetIDByName("CircleXIcon")),null)}const u=`\`\`\`json
${JSON.stringify(c,null,4)}
\`\`\``;if(i)return{type:4,data:{content:u,flags:64}};if(s){constd=Date.now().toString();returnIt.sendMessage(t.channel.id,{content:u},void0,{nonce:d}),{type:4}}elsereturnTt.sendBotMessage(t.channel.id,u),null}catch(r){console.error("[IP] Command error:",r);consts=`\u274C An error occurred while looking up IP information: ${r.message||"Unknown error"}`;returne?.find?.(function(i){returni.name==="ephemeral"})?.value??!1?{type:4,data:{content:s,flags:64}}:(m.showToast(s,b.getAssetIDByName("CircleXIcon")),null)}},applicationId:"-1",inputType:1,type:1},At=g.findByProps("sendMessage"),Lt=g.findByProps("sendBotMessage","sendMessage","receiveMessage"),$t=["avatar","classic","cuddle","fox_girl","gecg","holo","kemonomimi","kiss","neko","ngif","smug","spank","tickle","waifu","wallpaper","woof"];asyncfunctionDt(e,t){constr=[];for(lets=0;s<t;s++)try{s>0&&awaitnewPromise(function(l){returnsetTimeout(l,1e3)});consti=awaitfetch(`https://nekos.life/api/v2/img/${e}`);if(!i.ok){console.error(`[NekosLife] API request failed: ${i.status}`);continue}consto=awaiti.json();o.url&&r.push(o.url)}catch(i){console.error(`[NekosLife] Error fetching image ${s+1}:`,i)}returnr}functionPt(e){return!e||typeofe!="string"?!1:$t.includes(e.toLowerCase().trim())}constxt={name:"nekoslife",displayName:"nekoslife",description:"Get SFW images/gifs from nekos.life",displayDescription:"Get SFW images/gifs from nekos.life",options:[{name:"category",displayName:"category",description:"Category name (e.g. neko, waifu, cuddle, etc.)",displayDescription:"Category name (e.g. neko, waifu, cuddle, etc.)",type:3,required:!0},{name:"limit",displayName:"limit",description:"Number of images (1-5, default: 1)",displayDescription:"Number of images (1-5, default: 1)",type:4,required:!1},{name:"send",displayName:"send",description:"Send to chat",displayDescription:"Send to chat",type:5,required:!1},{name:"ephemeral",displayName:"ephemeral",description:"Send as ephemeral message (only you can see)",displayDescription:"Send as ephemeral message (only you can see)",type:5,required:!1}],execute:asyncfunction(e,t){try{console.log("[NekosLife] Command executed with args:",e);constr=e.find(function(f){returnf.name==="category"})?.value,s=e.find(function(f){returnf.name==="limit"})?.value,i=e.find(function(f){returnf.name==="send"})?.value||!1,o=e.find(function(f){returnf.name==="ephemeral"})?.value||!1;if(console.log("[NekosLife] Parsed values:",{categoryInput:r,limitInput:s,shouldSend:i,isEphemeral:o}),!r||typeofr!="string"){constf="\u274C Category is required! Examples: neko, waifu, cuddle, kiss";returnconsole.error("[NekosLife] No category provided"),o?{type:4,data:{content:f,flags:64}}:(m.showToast(f,b.getAssetIDByName("CircleXIcon")),null)}constl=r.toLowerCase().trim();if(!Pt(l)){constf=`\u274C Invalid SFW category "${r}". Valid: neko, waifu, cuddle, kiss, holo, etc.`;returno?{type:4,data:{content:f,flags:64}}:(m.showToast(f,b.getAssetIDByName("CircleXIcon")),null)}letc=1;s!=null&&(c=parseInt(String(s))||1,c=Math.max(1,Math.min(5,c))),console.log("[NekosLife] Processing SFW request:",{category:l,limit:c,shouldSend:i,isEphemeral:o}),o||m.showToast(`Fetching ${c} SFW image(s) from nekos.life...`,b.getAssetIDByName("DownloadIcon"));constu=awaitDt(l,c);if(u.length===0){constf="\u274C Failed to fetch images from nekos.life. Try again later!";returno?{type:4,data:{content:f,flags:64}}:(m.showToast(f,b.getAssetIDByName("CircleXIcon")),null)}constd=u.join(`
`);if(o)return console.log("[NekosLife] Sending ephemeral response"),{type:4,data:{content:d,flags:64}};if(i){console.log("[NekosLife] Sending to chat");const f=Date.now().toString();return At.sendMessage(t.channel.id,{content:d},void 0,{nonce:f}),null}else return console.log("[NekosLife] Sending as bot message"),Lt.sendBotMessage(t.channel.id,d),null}catch(r){console.error("[NekosLife] Command error:",r);const s="\u274C An error occurred while fetching images.";return e?.find?.(function(i){return i.name==="ephemeral"})?.value??!1?{type:4,data:{content:s,flags:64}}:(m.showToast(s,b.getAssetIDByName("CircleXIcon")),null)}},applicationId:"-1",inputType:1,type:1},Bt=g.findByProps("sendBotMessage","sendMessage"),x=g.findByProps("getAllFriendInvites","createFriendInvite","revokeFriendInvites"),Ft=g.findByProps("getCurrentUser")?.getCurrentUser;function be(e,t){const r=Date.now().toString();Bt.sendMessage(e.channel.id,{content:t},void 0,{nonce:r})}const Mt={name:"invite create",displayName:"invite create",description:"Generates a friend invite link.",displayDescription:"Generates a friend invite link.",type:1,applicationId:"-1",inputType:1,execute:async function(e,t){try{if(!Ft?.().phone)return m.showToast("You need a phone number connected to your account!",b.getAssetIDByName("Small")),null;const r=await x.createFriendInvite({code:null,recipient_phone_number_or_email:null,contact_visibility:0,filter_visibilities:[],filtered_invite_suggestions_index:0});if(r?.code){const s=Math.floor(new Date(r.expires_at).getTime()/1e3),i=`https://discord.gg/${r.code} \xB7 Expires: <t:${s}:R>`;be(t,i),m.showToast("Friend invite created!",b.getAssetIDByName("Check"))}else throw new Error("No invite code generated");return null}catch(r){return console.error("[FriendInvite] Create error:",r),m.showToast("Error creating friend invite",b.getAssetIDByName("Small")),null}}},_t={name:"view invites",displayName:"view invites",description:"View your current friend invite links that you've made.",displayDescription:"View your current friend invite links that you've made.",type:1,applicationId:"-1",execute:async function(e,t){try{const r=await x.getAllFriendInvites();if(!r?.length)return m.showToast("No active friend invites found",b.getAssetIDByName("Info")),null;const s=r.map(function(i){const o=Math.floor(new Date(i.expires_at).getTime()/1e3);return`_https://discord.gg/${i.code}_ \xB7 Expires: <t:${o}:R> \xB7 Uses: \`${i.uses}/${i.max_uses}\``});return be(t,`**Your Active Friend Invites:**