From 2f9b38ace8921c3cb243b4d67736714759212639 Mon Sep 17 00:00:00 2001 From: creations Date: Sat, 7 Jun 2025 21:08:10 -0400 Subject: [PATCH] fix required bot token, fix equicord and vencord contrib badges, move equicord to svg --- config/constants.ts | 24 +++++++++++++--- config/index.ts | 2 +- public/badges/equicord.svg | 5 ++++ public/badges/vencord.png | Bin 0 -> 900 bytes src/lib/badgeCache.ts | 33 ++++++++-------------- src/lib/badges.ts | 56 ++++++++++++++++++++++--------------- types/badge.d.ts | 1 + 7 files changed, 72 insertions(+), 49 deletions(-) create mode 100644 public/badges/equicord.svg create mode 100644 public/badges/vencord.png diff --git a/config/constants.ts b/config/constants.ts index ac3a5c6..b6ec990 100644 --- a/config/constants.ts +++ b/config/constants.ts @@ -85,16 +85,36 @@ const discordBadgeDetails = { tooltip: "Uses AutoMod", icon: "/public/badges/discord/USES_AUTOMOD.svg", }, + + // Custom + + VENCORD_CONTRIBUTOR: { + tooltip: "Vencord Contributor", + icon: "/public/badges/vencord.png", + }, + EQUICORD_CONTRIBUTOR: { + tooltip: "Equicord Contributor", + icon: "/public/badges/equicord.svg", + }, + + DISCORD_NITRO: { + tooltip: "Discord Nitro", + icon: "/public/badges/discord/NITRO.svg", + }, }; const badgeServices: BadgeService[] = [ { service: "Vencord", url: "https://badges.vencord.dev/badges.json", + pluginsUrl: + "https://raw.githubusercontent.com/Vencord/builds/main/plugins.json", }, { service: "Equicord", // Ekwekord ! WOOP url: "https://raw.githubusercontent.com/Equicord/Equibored/refs/heads/main/badges.json", + pluginsUrl: + "https://raw.githubusercontent.com/Equicord/Equibored/refs/heads/main/plugins.json", }, { service: "Nekocord", @@ -118,9 +138,6 @@ const badgeServices: BadgeService[] = [ }, ]; -const vencordEquicordContributorUrl = - "https://raw.githubusercontent.com/Equicord/Equibored/refs/heads/main/plugins.json"; - function getServiceDescription(service: string): string { const descriptions: Record = { Vencord: "Custom badges from Vencord Discord client", @@ -140,7 +157,6 @@ export { badgeServices, discordBadges, discordBadgeDetails, - vencordEquicordContributorUrl, getServiceDescription, gitUrl, }; diff --git a/config/index.ts b/config/index.ts index 5f7ad84..cd99868 100644 --- a/config/index.ts +++ b/config/index.ts @@ -18,7 +18,7 @@ const badgeFetchInterval: number = process.env.BADGE_FETCH_INTERVAL const botToken: string | undefined = process.env.DISCORD_TOKEN; function verifyRequiredVariables(): void { - const requiredVariables = ["HOST", "PORT", "DISCORD_TOKEN"]; + const requiredVariables = ["HOST", "PORT"]; let hasError = false; diff --git a/public/badges/equicord.svg b/public/badges/equicord.svg new file mode 100644 index 0000000..d60e5ce --- /dev/null +++ b/public/badges/equicord.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/badges/vencord.png b/public/badges/vencord.png new file mode 100644 index 0000000000000000000000000000000000000000..7f4300462f3bb2efd87a5337f08aaa0a9e48e563 GIT binary patch literal 900 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy#B(j9#r85lP9bN@+X1@aY=J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10qA0*8#1%*b!TXAXZkd-%)w!(T2O{(AB7_Zx?Q+&=vE^5Jh+4u89P_}lfv-)|oNbmH)*yCb1o#_R%lCdPnFPOpM*^M+1C&}C0g(;1@CI!ghEbxddW?lFz$+-9S#>;I@3IYrX?9sXRzwf>GUo?M- zim_B<*F)QL{g<3SDfU>stSr3}czi!shtuM}r}aNG_ploreite7k|mS<{D%7A10{c+ zr5{k3XU=_~_|HSh7wcOE6_z)@i;-l!IPIurReQr4#`kHb8$4D$V%&IPTSLKmX8*+uv*@*D zyDz^iYZYd>=;rU3!uad&!2}DL-lhbbcYBr04Q8(3G;c6*()n1jN-c&_L-6_2oMmbv z^^9wn=X2H_sM!~xGkx{dDp{c?P0VXcw(>0zPOQo^o3S8x#msfr8dVf874JUE!n)=1 zRVxQh# { const serviceKey = service.toLowerCase(); + + if (!USER_CACHE_SERVICES.includes(serviceKey) || nocache) { + return false; + } + const userCacheKey = `user_badges:${serviceKey}:${userId}`; - if (!nocache) { - try { - const cached = await redis.get(userCacheKey); - if (cached) { - const parsed: Badge[] = JSON.parse(cached); - results[serviceKey] = parsed; - return true; - } - } catch {} - } + try { + const cached = await redis.get(userCacheKey); + if (cached) { + const parsed: Badge[] = JSON.parse(cached); + results[serviceKey] = parsed; + return true; + } + } catch {} + return false; }); const cacheHits = await Promise.all(userCachePromises); - const servicesToFetch = services.filter((_, index) => !cacheHits[index]); await Promise.all( @@ -68,10 +73,16 @@ export async function fetchBadges( const userBadges = serviceData[userId]; if (Array.isArray(userBadges)) { + const origin = request ? getRequestOrigin(request) : ""; + for (const badgeItem of userBadges) { + const badgeUrl = badgeItem.badge.startsWith("/") + ? `${origin}${badgeItem.badge}` + : badgeItem.badge; + result.push({ tooltip: badgeItem.tooltip, - badge: badgeItem.badge, + badge: badgeUrl, }); } } @@ -199,8 +210,8 @@ export async function fetchBadges( if (data.avatar?.startsWith("a_")) { result.push({ - tooltip: "Discord Nitro", - badge: `${origin}/public/badges/discord/NITRO.svg`, + tooltip: discordBadgeDetails.DISCORD_NITRO.tooltip, + badge: `${origin}${discordBadgeDetails.DISCORD_NITRO.icon}`, }); } @@ -228,17 +239,16 @@ export async function fetchBadges( break; } + results[serviceKey] = result; + if ( - result.length > 0 || - serviceKey === "discord" || - serviceKey === "enmity" + USER_CACHE_SERVICES.includes(serviceKey) && + !nocache && + result.length > 0 ) { - results[serviceKey] = result; - if (!nocache) { - const userCacheKey = `user_badges:${serviceKey}:${userId}`; - await redis.set(userCacheKey, JSON.stringify(result)); - await redis.expire(userCacheKey, Math.min(redisTtl, 900)); - } + const userCacheKey = `user_badges:${serviceKey}:${userId}`; + await redis.set(userCacheKey, JSON.stringify(result)); + await redis.expire(userCacheKey, Math.min(redisTtl, 900)); } } catch (error) { echo.warn({ diff --git a/types/badge.d.ts b/types/badge.d.ts index 08043b9..5f235a7 100644 --- a/types/badge.d.ts +++ b/types/badge.d.ts @@ -19,6 +19,7 @@ type BadgeService = { user: string; badge: (id: string) => string; }); + pluginsUrl?: string; }; interface VencordEquicordData {