From 0e0674fd98a6a92a2c9e3d4ee92d9da448578bf9 Mon Sep 17 00:00:00 2001
From: thororen1234 <78185467+thororen1234@users.noreply.github.com>
Date: Sat, 12 Oct 2024 07:59:33 -0400
Subject: [PATCH] BannersEverywhere: Fix Animate on Everything
---
.../bannersEverywhere/index.tsx | 52 +++++++++++++++++--
1 file changed, 49 insertions(+), 3 deletions(-)
diff --git a/src/equicordplugins/bannersEverywhere/index.tsx b/src/equicordplugins/bannersEverywhere/index.tsx
index c25a2aac..d3e6b164 100644
--- a/src/equicordplugins/bannersEverywhere/index.tsx
+++ b/src/equicordplugins/bannersEverywhere/index.tsx
@@ -21,7 +21,7 @@ interface iUSRBG extends Plugin {
const settings = definePluginSettings({
animate: {
- description: "Animate Discord banners (NOT USRBG)",
+ description: "Animate banners",
type: OptionType.BOOLEAN,
default: false
},
@@ -73,13 +73,59 @@ export default definePlugin({
memberListBannerHook(user: User) {
let url = this.getBanner(user.id);
if (!url) return;
- if (!settings.store.animate) url = url.replace(".gif", ".png");
+ if (!settings.store.animate) {
+ // Discord Banners
+ url = url.replace(".gif", ".png");
+ // Usrbg Banners
+ this.gifToPng(url)
+ .then(pngUrl => {
+ const imgElement = document.getElementById(`vc-banners-everywhere-${user.id}`) as HTMLImageElement;
+ if (imgElement) {
+ imgElement.src = pngUrl;
+ }
+ })
+ .catch();
+ }
return (
-
+
);
},
+ async checkImageExists(url: string): Promise {
+ return new Promise(resolve => {
+ const img = new Image();
+ img.onload = () => resolve(true);
+ img.onerror = () => resolve(false);
+ img.src = url;
+ });
+ },
+
+ async gifToPng(url: string): Promise {
+ const exists = await this.checkImageExists(url);
+ if (!exists) return "";
+
+ return new Promise((resolve, reject) => {
+ const img = new Image();
+ img.crossOrigin = "anonymous";
+ img.onload = () => {
+ const canvas = document.createElement("canvas");
+ canvas.width = img.width;
+ canvas.height = img.height;
+ const ctx = canvas.getContext("2d");
+ if (ctx) {
+ ctx.drawImage(img, 0, 0);
+ const pngDataUrl = canvas.toDataURL("image/png");
+ resolve(pngDataUrl);
+ } else {
+ reject(new Error("Failed to get canvas context."));
+ }
+ };
+ img.onerror = err => reject(err);
+ img.src = url;
+ });
+ },
+
getBanner(userId: string): string | undefined {
if (Vencord.Plugins.isPluginEnabled("USRBG") && (Vencord.Plugins.plugins.USRBG as iUSRBG).userHasBackground(userId)) {
let banner = (Vencord.Plugins.plugins.USRBG as iUSRBG).getImageUrl(userId);