diff --git a/BetterSpotifyIntegration/index.js b/BetterSpotifyIntegration/index.js deleted file mode 100644 index c6b0711..0000000 --- a/BetterSpotifyIntegration/index.js +++ /dev/null @@ -1 +0,0 @@ -(function(a,i,l,f,y,m,c){"use strict";const p=i.findByProps("useStateFromStores"),s=i.findByStoreName("SpotifyStore"),d=i.findByProps("Sizes","Looks"),g=i.findByProps("play","sync");function v(e){const r=p.useStateFromStores([s],function(){return s.getActivity()?.party?.id}),t=e.isCurrentUser||e.activity?.party?.id===r;return React.createElement(c.View,{pointerEvents:t?"none":"auto"},React.createElement(d,{text:t?"You are already along for this ride":"Listen Along",size:d.Sizes.SMALL,style:{marginTop:12,backgroundColor:e.activityButtonColor,opacity:t?.5:1},renderIcon:function(){return React.createElement(c.Image,{style:{height:16,width:16,marginRight:8,tintColor:"white"},source:m.getAssetIDByName("ic_headphone")})},onPress:function(){return void g.sync(e.activity,e.user.id)}}))}let u;var S={onLoad(){const e=function(){return l.i18n.Messages.USER_ACTIVITY_HEADER_LISTENING?.intlMessage?.format({name:"Spotify"})};u=f.before("default",i.findByName("UserProfileSection",!1),function([r]){if(r.title!==e())return;const t=y.findInReactTree(r.children,function(n){return n?.style?.padding===0}),o=t?.children?.findIndex?.(function(n){return n?.type?.name==="Actions"});if(o&&o!==-1){const n=t.children[o];t.children[o]=React.createElement(React.Fragment,null,n,React.createElement(v,n.props))}})},onUnload(){u?.()}};return a.default=S,Object.defineProperty(a,"__esModule",{value:!0}),a})({},vendetta.metro,vendetta.metro.common,vendetta.patcher,vendetta.utils,vendetta.ui.assets,vendetta.metro.common.ReactNative); diff --git a/BetterSpotifyIntegration/manifest.json b/BetterSpotifyIntegration/manifest.json deleted file mode 100644 index be7bfd7..0000000 --- a/BetterSpotifyIntegration/manifest.json +++ /dev/null @@ -1 +0,0 @@ -{"authors":[{"name":"pylix","id":"492949202121261067"}],"main":"index.js","name":"BetterSpotifyIntegration","description":"Shrimply better integration with Spotify","vendetta":{},"hash":"17b87ab5ceb755b2574636d166d9315c859363d0cf9029dcca3f1aa14cf434dc"} \ No newline at end of file diff --git a/HideGiftButton/index.js b/HideGiftButton/index.js deleted file mode 100644 index b69f833..0000000 --- a/HideGiftButton/index.js +++ /dev/null @@ -1 +0,0 @@ -(function(e,a,i,c,s){"use strict";const u=a.findByName("ChatInput");let n;var d={onLoad(){const f=["ic_thread_normal_24px","ic_gift"].map(function(r){return c.getAssetIDByName(r)});n=i.after("render",u.prototype,function(r,p){const o=s.findInReactTree(p,function(t){return"forceAnimateButtons"in t.props&&t.props.actions});o.props.actions=o.props.actions.filter(function(t){return!f.includes(t.source)})})},onUnload:n};return e.default=d,Object.defineProperty(e,"__esModule",{value:!0}),e})({},vendetta.metro,vendetta.patcher,vendetta.ui.assets,vendetta.utils); diff --git a/HideGiftButton/manifest.json b/HideGiftButton/manifest.json deleted file mode 100644 index 25a13a9..0000000 --- a/HideGiftButton/manifest.json +++ /dev/null @@ -1 +0,0 @@ -{"authors":[{"name":"pylix","id":"492949202121261067"}],"main":"index.js","name":"HideGiftButton","description":"Hides the gift button in the chat input.","vendetta":{"icon":"ic_gift_24px"},"hash":"82469237648afb9c76c35bd6e64222d40933bddeca7c11335977147cbaebd6c5"} \ No newline at end of file diff --git a/HoldGIFSend/index.js b/HoldGIFSend/index.js deleted file mode 100644 index 58b4279..0000000 --- a/HoldGIFSend/index.js +++ /dev/null @@ -1 +0,0 @@ -(function(e,o,c){"use strict";const t=o.findByProps("selectGIF"),r=c.instead("selectGIF",t,function(n){n[1]?n[1]=n[1].url:n[0]=n[0].url,t.insertText(...n)});return e.onUnload=r,e})({},vendetta.metro,vendetta.patcher); diff --git a/HoldGIFSend/manifest.json b/HoldGIFSend/manifest.json deleted file mode 100644 index 2de0a65..0000000 --- a/HoldGIFSend/manifest.json +++ /dev/null @@ -1 +0,0 @@ -{"authors":[{"name":"pylix","id":"492949202121261067"}],"main":"index.js","name":"HoldGIFSend","description":"Hold GIF links to chat input before sending them.","vendetta":{"icon":"gif"},"hash":"3c082ce4efced3cdae6261ee9a17ff5f9c8a06d570c04d54da4eaf0c24b6ac50"} \ No newline at end of file diff --git a/Last.fm/index.js b/Last.fm/index.js index 3b2d731..922f53d 100644 --- a/Last.fm/index.js +++ b/Last.fm/index.js @@ -1 +1 @@ -(function(S,A,a,p,g,Z,T,N){"use strict";const i={DEFAULT_APP_NAME:"Music",DEFAULT_TIME_INTERVAL:5,APPLICATION_ID:"1054951789318909972",MIN_UPDATE_INTERVAL:3,MAX_RETRY_ATTEMPTS:3,RETRY_DELAY:5e3,LFM_API_BASE_URL:"https://ws.audioscrobbler.com/2.0",LFM_DEFAULT_COVER_HASHES:["2a96cbd8b46e442fc41c2b86b821562f","c6f59c1e5e7240a4c0d427abd71f3dbb"],DEFAULT_SETTINGS:{username:"",apiKey:"",appName:"Music",timeInterval:5,showTimestamp:!0,listeningTo:!0,ignoreSpotify:!0,verboseLogging:!1},GITHUB_URL:"https://github.com/kmmiio99o/letup",GITHUB_COMMITS_URL:"https://github.com/kmmiio99o/letup/commits/main/"};function P(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function k(t,e){for(var n=0;ni.MAX_RETRY_ATTEMPTS)throw this.retryCount=0,e;return await new Promise(function(n){return setTimeout(n,i.RETRY_DELAY)}),this.fetchLatestScrobble()}}},{key:"handleAlbumCover",value:async function(e){return!e||i.LFM_DEFAULT_COVER_HASHES.some(function(n){return e.includes(n)})?null:e}},{key:"getLastError",value:function(){return this.lastError}},{key:"resetRetryCount",value:function(){this.retryCount=0}}],[{key:"getInstance",value:function(){return t.instance||(t.instance=new t),t.instance}}]),t}().getInstance();var Y=function(t){return t[t.PLAYING=0]="PLAYING",t[t.STREAMING=1]="STREAMING",t[t.LISTENING=2]="LISTENING",t[t.COMPETING=5]="COMPETING",t}(Y||{});const l=function(...t){return o.verboseLogging&&console.log("[Last.fm]",...t)},M=function(){function t(){P(this,t)}return U(t,[{key:"updateActivity",value:async function(){if(c.pluginStopped){l("Plugin is stopped, skipping update"),this.stopUpdates();return}l("Fetching last track...");try{if(!o.username||!o.apiKey)throw new Error("Username or API key not set");if(o.ignoreSpotify){if($.findActivity(function(s){return s.sync_id})){l("Spotify is currently playing, clearing activity"),d("isSpotifyIgnored",!0),w();return}d("isSpotifyIgnored",!1)}const e=await F.fetchLatestScrobble();if(d("lastTrack",e),!e.nowPlaying){l("Last track is not currently playing"),w();return}if(c.lastTrackUrl===e.url){l("Track hasn't changed");return}const n={name:o.appName||i.DEFAULT_APP_NAME,flags:0,type:o.listeningTo?2:0,details:e.name,state:e.artist,status_display_type:1,application_id:i.APPLICATION_ID};if(n.name.includes("{{"))for(const s in e)n.name=n.name.replace(`{{${s}}}`,e[s]||"");if(o.showTimestamp&&(n.timestamps={start:Date.now()|0}),e.album){const s=await x([e.albumArt]);s[0]&&(n.assets={large_image:s[0],large_text:e.album})}l("Setting activity:",n),d("lastActivity",n),await C(n),c.lastTrackUrl=e.url,c.lastActivity=n,this.consecutiveFailures=0,l("Activity set successfully!")}catch(e){console.error("[Last.fm] Update error:",e),this.handleError(e)}}},{key:"handleError",value:function(e){this.consecutiveFailures++,d("lastError",e),this.consecutiveFailures>=i.MAX_RETRY_ATTEMPTS&&(l(`Failed ${this.consecutiveFailures} times, initiating reconnection...`),this.startReconnection())}},{key:"startReconnection",value:function(){var e=this;this.isReconnecting||(this.isReconnecting=!0,this.stopUpdates(),l("Starting reconnection process"),this.reconnectTimer=setInterval(function(){l("Attempting to reconnect..."),e.initialize().then(function(){l("Reconnection successful"),e.stopReconnection()}).catch(function(n){l("Reconnection failed:",n)})},i.RETRY_DELAY))}},{key:"stopReconnection",value:function(){this.reconnectTimer&&(clearInterval(this.reconnectTimer),this.reconnectTimer=void 0),this.isReconnecting=!1,this.consecutiveFailures=0}},{key:"stopUpdates",value:function(){this.updateTimer&&(clearInterval(this.updateTimer),this.updateTimer=void 0)}},{key:"initialize",value:async function(){var e=this;if(c.pluginStopped)throw new Error("Plugin is stopped");this.stopUpdates(),await this.updateActivity();const n=Math.max((Number(o.timeInterval)||i.DEFAULT_SETTINGS.timeInterval)*1e3,i.MIN_UPDATE_INTERVAL*1e3);this.updateTimer=setInterval(function(){return e.updateActivity()},n),l(`Update timer started with interval: ${n}ms`)}},{key:"stop",value:function(){c.pluginStopped=!0,this.stopUpdates(),this.stopReconnection(),w()}}],[{key:"getInstance",value:function(){return t.instance||(t.instance=new t),t.instance}}]),t}().getInstance(),G=function(){return M.initialize()},V=function(){return M.stop()},K=[{version:"2.3.0",date:"2025-09-19",changes:["1. I TRIED SO HARD 2. remove backend error 3. factor settings tab 4. factor V2 5. factor V3 6. factor V4 7. factor V5 8. factor V6 9. Full settings refactor :3"]},{version:"2.2.0",date:"2025-09-13",changes:["Remember kids! Do not sniff crack!"]},{version:"2.0.0",date:"2025-09-13",changes:["Fix settings scrolling"]},{version:"1.3.0",date:"2025-09-13",changes:["fix reanimated"]},{version:"1.2.0",date:"2025-09-13",changes:["test"]},{version:"1.1.0",date:"2025-09-12",changes:["fixed reanimated issue??"]}],H="2.3.0",{ScrollView:j}=T.findByProps("ScrollView"),{TableRowGroup:y,TableSwitchRow:R,Stack:L,TableRow:u}=T.findByProps("TableSwitchRow","TableRowGroup","Stack","TableRow"),{TextInput:b}=T.findByProps("TextInput");T.findByProps("FormText");const f=function(t,e=""){return A.plugin.storage[t]??e},h=function(t,e){return A.plugin.storage[t]=e};function z(){const[t,e]=a.React.useReducer(function(r){return~r},0),n=function(){return e()},[s,E]=a.React.useState(!1),Q=async function(){const r=f("username"),m=f("apiKey");if(!r||!m){g.showToast("Please enter both username and API key",p.getAssetIDByName("Small"));return}E(!0);try{await F.fetchLatestScrobble(),g.showToast("Connection successful!",p.getAssetIDByName("Check")),await G()}catch(W){g.showToast(`Connection failed: ${W.message}`,p.getAssetIDByName("Small"))}finally{E(!1)}};return a.React.createElement(j,{style:{flex:1},contentContainerStyle:{padding:10}},a.React.createElement(L,{spacing:8},a.React.createElement(y,{title:"Account Settings"},a.React.createElement(L,{spacing:4},a.React.createElement(b,{placeholder:"Last.fm Username",value:f("username"),onChange:function(r){h("username",r),n()},isClearable:!0}),a.React.createElement(b,{placeholder:"API Key",value:f("apiKey"),onChange:function(r){h("apiKey",r),n()},secureTextEntry:!0,isClearable:!0}),a.React.createElement(u,{label:"Get API Key",subLabel:"https://www.last.fm/api/",onPress:function(){return N.Linking.openURL("https://www.last.fm/api/")}})),a.React.createElement(u,{label:"Test Connection",trailing:s?a.React.createElement(u.Arrow,{loading:!0}):a.React.createElement(u.Arrow,null),onPress:Q,disabled:s})),a.React.createElement(y,{title:"Display Settings"},a.React.createElement(L,{spacing:4},a.React.createElement(b,{placeholder:`App Name (Default: ${i.DEFAULT_SETTINGS.appName})`,value:f("appName",i.DEFAULT_SETTINGS.appName),onChange:function(r){h("appName",r),n()},isClearable:!0}),a.React.createElement(b,{placeholder:`Update Interval (Default: ${i.DEFAULT_SETTINGS.timeInterval}s)`,value:String(f("timeInterval",i.DEFAULT_SETTINGS.timeInterval)),onChange:function(r){const m=Number(r);m>=i.MIN_UPDATE_INTERVAL?(h("timeInterval",m),n()):g.showToast(`Minimum interval is ${i.MIN_UPDATE_INTERVAL} seconds`,p.getAssetIDByName("Small"))},keyboardType:"numeric",isClearable:!0}))),a.React.createElement(y,{title:"Options"},a.React.createElement(R,{label:"Show 'Listening to' instead of 'Playing'",value:f("listeningTo",i.DEFAULT_SETTINGS.listeningTo),onValueChange:function(r){h("listeningTo",r),n()}}),a.React.createElement(R,{label:"Show Timestamp",value:f("showTimestamp",i.DEFAULT_SETTINGS.showTimestamp),onValueChange:function(r){h("showTimestamp",r),n()}}),a.React.createElement(R,{label:"Ignore when Spotify is playing",value:f("ignoreSpotify",i.DEFAULT_SETTINGS.ignoreSpotify),onValueChange:function(r){h("ignoreSpotify",r),n()}}),a.React.createElement(R,{label:"Verbose Logging",value:f("verboseLogging",i.DEFAULT_SETTINGS.verboseLogging),onValueChange:function(r){h("verboseLogging",r),n()}})),a.React.createElement(y,{title:"Plugin Status"},a.React.createElement(u,{label:"Status",subLabel:c.pluginStopped?"Stopped":"Running"}),a.React.createElement(u,{label:"Last Update",subLabel:c.lastTrackUrl?"Success":"No track data"})),a.React.createElement(y,{title:"About"},a.React.createElement(u,{label:"Version",subLabel:H}),a.React.createElement(u,{label:"View Changelog",trailing:a.React.createElement(u.Arrow,null),onPress:function(){N.Linking.openURL(i.GITHUB_COMMITS_URL)}})),a.React.createElement(y,{title:"Changelog"},K.map(function(r,m){return a.React.createElement(u,{key:m,label:`v${r.version} (${r.date})`,subLabel:r.changes.join(", ")})}))))}const c={pluginStopped:!1,lastActivity:void 0,updateInterval:void 0,lastTrackUrl:void 0},B=i.DEFAULT_SETTINGS;for(const t in B)A.plugin.storage[t]=A.plugin.storage[t]??B[t];const o=new Proxy(A.plugin.storage,{get(t,e){return t[e]},set(t,e,n){return t[e]=n,!0}});let _=0;const q=3,X=5e3;async function I(){try{await G(),_=0}catch(t){console.error("[Last.fm] Initialization error:",t),_++,_i.MAX_RETRY_ATTEMPTS)throw this.retryCount=0,e;return await new Promise(function(n){return setTimeout(n,i.RETRY_DELAY)}),this.fetchLatestScrobble()}}},{key:"handleAlbumCover",value:async function(e){return!e||i.LFM_DEFAULT_COVER_HASHES.some(function(n){return e.includes(n)})?null:e}},{key:"getLastError",value:function(){return this.lastError}},{key:"resetRetryCount",value:function(){this.retryCount=0}}],[{key:"getInstance",value:function(){return t.instance||(t.instance=new t),t.instance}}]),t}().getInstance();var Y=function(t){return t[t.PLAYING=0]="PLAYING",t[t.STREAMING=1]="STREAMING",t[t.LISTENING=2]="LISTENING",t[t.COMPETING=5]="COMPETING",t}(Y||{});const l=function(...t){return o.verboseLogging&&console.log("[Last.fm]",...t)},M=function(){function t(){P(this,t)}return U(t,[{key:"updateActivity",value:async function(){if(c.pluginStopped){l("Plugin is stopped, skipping update"),this.stopUpdates();return}l("Fetching last track...");try{if(!o.username||!o.apiKey)throw new Error("Username or API key not set");if(o.ignoreSpotify){if($.findActivity(function(s){return s.sync_id})){l("Spotify is currently playing, clearing activity"),d("isSpotifyIgnored",!0),L();return}d("isSpotifyIgnored",!1)}const e=await F.fetchLatestScrobble();if(d("lastTrack",e),!e.nowPlaying){l("Last track is not currently playing"),L();return}if(c.lastTrackUrl===e.url){l("Track hasn't changed");return}const n={name:o.appName||i.DEFAULT_APP_NAME,flags:2,type:o.listeningTo?2:0,details:e.name,state:`by ${e.artist}`,status_display_type:1,application_id:i.APPLICATION_ID};if(n.name.includes("{{"))for(const s in e)n.name=n.name.replace(`{{${s}}}`,e[s]||"");if(o.showTimestamp&&typeof e.from=="number"&&(n.timestamps={start:e.from*1e3,...typeof e.to=="number"&&{end:e.to*1e3}}),e.album){const s=await x([e.albumArt]);s[0]&&(n.assets={large_image:s[0],large_text:`on ${e.album}`})}l("Setting activity:",n),d("lastActivity",n),await D(n),c.lastTrackUrl=e.url,c.lastActivity=n,this.consecutiveFailures=0,l("Activity set successfully!")}catch(e){console.error("[Last.fm] Update error:",e),this.handleError(e)}}},{key:"handleError",value:function(e){this.consecutiveFailures++,d("lastError",e),this.consecutiveFailures>=i.MAX_RETRY_ATTEMPTS&&(l(`Failed ${this.consecutiveFailures} times, initiating reconnection...`),this.startReconnection())}},{key:"startReconnection",value:function(){var e=this;this.isReconnecting||(this.isReconnecting=!0,this.stopUpdates(),l("Starting reconnection process"),this.reconnectTimer=setInterval(function(){l("Attempting to reconnect..."),e.initialize().then(function(){l("Reconnection successful"),e.stopReconnection()}).catch(function(n){l("Reconnection failed:",n)})},i.RETRY_DELAY))}},{key:"stopReconnection",value:function(){this.reconnectTimer&&(clearInterval(this.reconnectTimer),this.reconnectTimer=void 0),this.isReconnecting=!1,this.consecutiveFailures=0}},{key:"stopUpdates",value:function(){this.updateTimer&&(clearInterval(this.updateTimer),this.updateTimer=void 0)}},{key:"initialize",value:async function(){var e=this;if(c.pluginStopped)throw new Error("Plugin is stopped");this.stopUpdates(),await this.updateActivity();const n=Math.max((Number(o.timeInterval)||i.DEFAULT_SETTINGS.timeInterval)*1e3,i.MIN_UPDATE_INTERVAL*1e3);this.updateTimer=setInterval(function(){return e.updateActivity()},n),l(`Update timer started with interval: ${n}ms`)}},{key:"stop",value:function(){c.pluginStopped=!0,this.stopUpdates(),this.stopReconnection(),L()}}],[{key:"getInstance",value:function(){return t.instance||(t.instance=new t),t.instance}}]),t}().getInstance(),G=function(){return M.initialize()},V=function(){return M.stop()},K=[{version:"2.3.0",date:"2025-09-19",changes:["1. I TRIED SO HARD 2. remove backend error 3. factor settings tab 4. factor V2 5. factor V3 6. factor V4 7. factor V5 8. factor V6 9. Full settings refactor :3"]},{version:"2.2.0",date:"2025-09-13",changes:["Remember kids! Do not sniff crack!"]},{version:"2.0.0",date:"2025-09-13",changes:["Fix settings scrolling"]},{version:"1.3.0",date:"2025-09-13",changes:["fix reanimated"]},{version:"1.2.0",date:"2025-09-13",changes:["test"]},{version:"1.1.0",date:"2025-09-12",changes:["fixed reanimated issue??"]}],H="2.3.0",{ScrollView:j}=T.findByProps("ScrollView"),{TableRowGroup:y,TableSwitchRow:b,Stack:w,TableRow:u}=T.findByProps("TableSwitchRow","TableRowGroup","Stack","TableRow"),{TextInput:R}=T.findByProps("TextInput");T.findByProps("FormText");const f=function(t,e=""){return A.plugin.storage[t]??e},h=function(t,e){return A.plugin.storage[t]=e};function z(){const[t,e]=a.React.useReducer(function(r){return~r},0),n=function(){return e()},[s,E]=a.React.useState(!1),Q=async function(){const r=f("username"),m=f("apiKey");if(!r||!m){g.showToast("Please enter both username and API key",p.getAssetIDByName("Small"));return}E(!0);try{await F.fetchLatestScrobble(),g.showToast("Connection successful!",p.getAssetIDByName("Check")),await G()}catch(W){g.showToast(`Connection failed: ${W.message}`,p.getAssetIDByName("Small"))}finally{E(!1)}};return a.React.createElement(j,{style:{flex:1},contentContainerStyle:{padding:10}},a.React.createElement(w,{spacing:8},a.React.createElement(y,{title:"Account Settings"},a.React.createElement(w,{spacing:4},a.React.createElement(R,{placeholder:"Last.fm Username",value:f("username"),onChange:function(r){h("username",r),n()},isClearable:!0}),a.React.createElement(R,{placeholder:"API Key",value:f("apiKey"),onChange:function(r){h("apiKey",r),n()},secureTextEntry:!0,isClearable:!0}),a.React.createElement(u,{label:"Get API Key",subLabel:"https://www.last.fm/api/",onPress:function(){return N.Linking.openURL("https://www.last.fm/api/")}})),a.React.createElement(u,{label:"Test Connection",trailing:s?a.React.createElement(u.Arrow,{loading:!0}):a.React.createElement(u.Arrow,null),onPress:Q,disabled:s})),a.React.createElement(y,{title:"Display Settings"},a.React.createElement(w,{spacing:4},a.React.createElement(R,{placeholder:`App Name (Default: ${i.DEFAULT_SETTINGS.appName})`,value:f("appName",i.DEFAULT_SETTINGS.appName),onChange:function(r){h("appName",r),n()},isClearable:!0}),a.React.createElement(R,{placeholder:`Update Interval (Default: ${i.DEFAULT_SETTINGS.timeInterval}s)`,value:String(f("timeInterval",i.DEFAULT_SETTINGS.timeInterval)),onChange:function(r){const m=Number(r);m>=i.MIN_UPDATE_INTERVAL?(h("timeInterval",m),n()):g.showToast(`Minimum interval is ${i.MIN_UPDATE_INTERVAL} seconds`,p.getAssetIDByName("Small"))},keyboardType:"numeric",isClearable:!0}))),a.React.createElement(y,{title:"Options"},a.React.createElement(b,{label:"Show 'Listening to' instead of 'Playing'",value:f("listeningTo",i.DEFAULT_SETTINGS.listeningTo),onValueChange:function(r){h("listeningTo",r),n()}}),a.React.createElement(b,{label:"Show Timestamp",value:f("showTimestamp",i.DEFAULT_SETTINGS.showTimestamp),onValueChange:function(r){h("showTimestamp",r),n()}}),a.React.createElement(b,{label:"Ignore when Spotify is playing",value:f("ignoreSpotify",i.DEFAULT_SETTINGS.ignoreSpotify),onValueChange:function(r){h("ignoreSpotify",r),n()}}),a.React.createElement(b,{label:"Verbose Logging",value:f("verboseLogging",i.DEFAULT_SETTINGS.verboseLogging),onValueChange:function(r){h("verboseLogging",r),n()}})),a.React.createElement(y,{title:"Plugin Status"},a.React.createElement(u,{label:"Status",subLabel:c.pluginStopped?"Stopped":"Running"}),a.React.createElement(u,{label:"Last Update",subLabel:c.lastTrackUrl?"Success":"No track data"})),a.React.createElement(y,{title:"About"},a.React.createElement(u,{label:"Version",subLabel:H}),a.React.createElement(u,{label:"View Changelog",trailing:a.React.createElement(u.Arrow,null),onPress:function(){N.Linking.openURL(i.GITHUB_COMMITS_URL)}})),a.React.createElement(y,{title:"Changelog"},K.map(function(r,m){return a.React.createElement(u,{key:m,label:`v${r.version} (${r.date})`,subLabel:r.changes.join(", ")})}))))}const c={pluginStopped:!1,lastActivity:void 0,updateInterval:void 0,lastTrackUrl:void 0},B=i.DEFAULT_SETTINGS;for(const t in B)A.plugin.storage[t]=A.plugin.storage[t]??B[t];const o=new Proxy(A.plugin.storage,{get(t,e){return t[e]},set(t,e,n){return t[e]=n,!0}});let _=0;const q=3,X=5e3;async function I(){try{await G(),_=0}catch(t){console.error("[Last.fm] Initialization error:",t),_++,_0&&e.React.createElement(l.FlatList,{data:t.exempted,keyExtractor:function(r){return r},renderItem:function({item:r}){const i=f.getUser(r);if(!i)throw new Error("User not found/is not cached");return e.React.createElement(p,{label:i.username,leading:e.React.createElement(l.Image,{style:E.avatar,source:{uri:i.getAvatarURL()}}),trailing:e.React.createElement(l.TouchableOpacity,{onPress:function(){t.exempted=t.exempted.filter(function(U){return U!==r})}},e.React.createElement(d,{source:u.getAssetIDByName("Small"),disableColor:!0}))})},ItemSeparatorComponent:h}),n&&e.React.createElement(e.React.Fragment,null,e.React.createElement(h,null),e.React.createElement(S,{onFinish:function(){return a(!1)}}))))}c.storage.isBlacklistMode??=!1,c.storage.exempted??=[];const t=c.storage,B=R.findByProps("createPendingReply");var T={settings:w,onUnload:y.patcher.before("createPendingReply",B,function([n]){const a=c.storage.exempted.includes(n.message?.author?.id);n.shouldMention&&=c.storage.isBlacklistMode?!a:a})};return s.default=T,s.settings=t,Object.defineProperty(s,"__esModule",{value:!0}),s})({},vendetta,vendetta.metro,vendetta.plugin,vendetta.metro.common,vendetta.storage,vendetta.ui.assets,vendetta.ui.components,window.React,vendetta.metro.common.ReactNative); diff --git a/NoAutoReplyMention/manifest.json b/NoAutoReplyMention/manifest.json deleted file mode 100644 index fb0dd24..0000000 --- a/NoAutoReplyMention/manifest.json +++ /dev/null @@ -1 +0,0 @@ -{"authors":[{"name":"pylix","id":"492949202121261067"}],"main":"index.js","name":"NoAutoReplyMention","description":"Turns off auto mention when replying to someone.","vendetta":{"icon":"ic_notif_off"},"hash":"0d882ee8d7efd8a700489134d93dff5e71b086947f27f7903470342de1f21bd7"} \ No newline at end of file diff --git a/NoIdle/index.js b/NoIdle/index.js deleted file mode 100644 index b70814e..0000000 --- a/NoIdle/index.js +++ /dev/null @@ -1 +0,0 @@ -(function(t,e,n){"use strict";const o=e.patcher.before("dispatch",n.FluxDispatcher,function([{type:c}]){if(c==="IDLE")return[{type:"IDLE",idle:!1}]});return t.onUnload=o,t})({},vendetta,vendetta.metro.common); diff --git a/NoIdle/manifest.json b/NoIdle/manifest.json deleted file mode 100644 index 10000b6..0000000 --- a/NoIdle/manifest.json +++ /dev/null @@ -1 +0,0 @@ -{"authors":[{"name":"pylix","id":"492949202121261067"}],"main":"index.js","name":"NoIdle","description":"Prevent status from idling when Discord is in the background.","vendetta":{"icon":"StatusIdle"},"hash":"586fb75d5825daaf8c82c8f82a3f949409442f4300d7d4a3453a422457fbe113"} \ No newline at end of file diff --git a/PyonInstaller/index.js b/PyonInstaller/index.js deleted file mode 100644 index 07c73f6..0000000 --- a/PyonInstaller/index.js +++ /dev/null @@ -1 +0,0 @@ -(function(e,n,t,o){"use strict";var r={onLoad(){var a=this;n.plugins.removePlugin(n.plugin.id),setTimeout(function(){return o.showConfirmationAlert({title:"Install Pyoncord?",content:"Loader's settings will be overriden to load Pyoncord instead. You may not be able to revert to Vendetta whenever Pyoncord breaks!",confirmText:"Continue and Restart",cancelText:"Nevermind",onConfirm:a.install})},300)},async install(){t.config.customLoadUrl?(t.config.customLoadUrl.enabled=!0,t.config.customLoadUrl.url="https://raw.githubusercontent.com/pyoncord/pyoncord/builds/pyoncord.js",setTimeout(globalThis.nativeModuleProxy.BundleUpdaterManager.reload,100)):alert("not a proper vendetta loader!")}};return e.default=r,Object.defineProperty(e,"__esModule",{value:!0}),e})({},vendetta,vendetta.loader,vendetta.ui.alerts); diff --git a/PyonInstaller/manifest.json b/PyonInstaller/manifest.json deleted file mode 100644 index a5ec179..0000000 --- a/PyonInstaller/manifest.json +++ /dev/null @@ -1 +0,0 @@ -{"authors":[{"name":"pylix","id":"492949202121261067"}],"main":"index.js","name":"PyoncordInstaller","description":"installs pyoncord.exe (virus)","hash":"1b5e098c2311414d11f88ec82b9cf69a4032ff39ee880f300fd34725742ba8a5"} \ No newline at end of file diff --git a/RichPresence/index.js b/RichPresence/index.js deleted file mode 100644 index 4cb02d8..0000000 --- a/RichPresence/index.js +++ /dev/null @@ -1 +0,0 @@ -(function(a,s,g,d){"use strict";function b(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function o(t,n){for(var e=0;e0:t||t===0||t===!1}function h(t){return JSON.parse(JSON.stringify(t,function(n,e){if(e===t)return e;if(!(typeof n=="string"&&n.startsWith("_")))switch(typeof e){case"object":{if(Array.isArray(e)&&e.length===0)return;const r=Object.entries(e).filter(function(A){return l(A[1])});return r.length>0?Object.fromEntries(r):void 0}default:return l(e)?e:void 0}}))}var y=function(t){return t[t.PLAYING=0]="PLAYING",t[t.STREAMING=1]="STREAMING",t[t.LISTENING=2]="LISTENING",t[t.WATCHING=3]="WATCHING",t[t.COMPETING=5]="COMPETING",t}(y||{});const u=g.findByProps("getAssetIds"),c=Date.now(),i=s.plugin.storage;typeof i.selected?.length!="number"&&Object.assign(i,{selected:"default",selections:{default:I()}});function I(){return{name:"Discord",application_id:"1054951789318909972",flags:0,type:0,timestamps:{_enabled:!1,start:c},assets:{},buttons:[{},{}]}}async function f(t){if(typeof t!="object")throw new Error("Invalid activity");if(t){const n=t?.timestamps?._enabled;if(t=h(t),n?t.timestamps.start||=c:delete t.timestamps,t.assets){const e=[t.application_id,[t.assets.large_image,t.assets.small_image]];let r=u.getAssetIds(...e);r.length||(r=await u.fetchAssetIds(...e)),t.assets.large_image=r[0],t.assets.small_image=r[1]}t.buttons?.length?(t.buttons=t.buttons.filter(function(e){return e.label&&e.url}),t.buttons.length?Object.assign(t,{metadata:{button_urls:t.buttons.map(function(e){return e.url})},buttons:t.buttons.map(function(e){return e.label})}):delete t.buttons):delete t.buttons}return d.FluxDispatcher.dispatch({type:"LOCAL_ACTIVITY_UPDATE",activity:t,pid:1608,socketId:"RichPresence@Vendetta"}),t}var p=new(function(){function t(){b(this,t)}return m(t,[{key:"onLoad",value:function(){s.logger.log("Sending RPC request");const n=i.selections[i.selected];if(!n)throw new Error("Selected activity does not exist");f(n).then(function(e){s.logger.log("RPC request sent"),s.logger.log(e)}).catch(function(e){s.logger.error("An error occured while sending RPC request :("),s.logger.error(e?.stack??e)})}},{key:"onUnload",value:function(){s.logger.log("Stopping RPC request"),f(null)}}]),t}());return a.default=p,Object.defineProperty(a,"__esModule",{value:!0}),a})({},vendetta,vendetta.metro,vendetta.metro.common); diff --git a/RichPresence/manifest.json b/RichPresence/manifest.json deleted file mode 100644 index c1d4b1c..0000000 --- a/RichPresence/manifest.json +++ /dev/null @@ -1 +0,0 @@ -{"authors":[{"name":"pylix","id":"492949202121261067"}],"main":"index.js","name":"RichPresence","description":"Sets Discord Rich Presence for your profile.","vendetta":{"icon":"games"},"hash":"f1ad2100a02c2600fc1c4206a9c8659e14718193b7acf3220d41501203c6afd9"} \ No newline at end of file