From 375950af4e2ec3e323a61071aae2999e239b0e51 Mon Sep 17 00:00:00 2001 From: 0xE90 Date: Tue, 21 Jul 2026 17:56:02 +0300 Subject: [PATCH] ViewIcons: add avatar decoration support (#4383) --- packages/discord-types/src/utils.d.ts | 4 ++-- src/plugins/viewIcons/index.tsx | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/discord-types/src/utils.d.ts b/packages/discord-types/src/utils.d.ts index 1dbebbb26..6d06d6400 100644 --- a/packages/discord-types/src/utils.d.ts +++ b/packages/discord-types/src/utils.d.ts @@ -1,4 +1,4 @@ -import { Channel, Guild, GuildMember, Message, User } from "."; +import { AvatarDecorationData, Channel, Guild, GuildMember, Message, User } from "."; import type { ReactNode } from "react"; import { LiteralUnion } from "type-fest"; @@ -203,7 +203,7 @@ export interface IconUtils { getUserAvatarURL(user: User, canAnimate?: boolean, size?: number, format?: string): string; getDefaultAvatarURL(id: string, discriminator?: string): string; getUserBannerURL(data: { id: string, banner: string, canAnimate?: boolean, size: number; }): string | undefined; - getAvatarDecorationURL(data: { avatarDecoration: string, size: number; canCanimate?: boolean; }): string | undefined; + getAvatarDecorationURL(data: { avatarDecoration: AvatarDecorationData, size: number; canAnimate?: boolean; }): string | undefined; getGuildMemberAvatarURL(member: GuildMember, canAnimate?: string): string | null; getGuildMemberAvatarURLSimple(data: { guildId: string, userId: string, avatar: string, canAnimate?: boolean; size?: number; }): string; diff --git a/src/plugins/viewIcons/index.tsx b/src/plugins/viewIcons/index.tsx index 267206146..42c9aaeff 100644 --- a/src/plugins/viewIcons/index.tsx +++ b/src/plugins/viewIcons/index.tsx @@ -99,6 +99,8 @@ const UserContext: NavContextMenuPatchCallback = (children, { user, guildId }: U if (!user) return; const memberAvatar = GuildMemberStore.getMember(guildId!, user.id)?.avatar || null; + const avatarDecoration = user.avatarDecorationData ?? user.avatarDecoration; + children.splice(-1, 0, ( )} + {avatarDecoration && ( + openAvatar(IconUtils.getAvatarDecorationURL({ + avatarDecoration, + size: 1024, + canAnimate: true + })!)} + icon={ImageIcon} + /> + )} )); }; @@ -180,7 +194,7 @@ const GroupDMContext: NavContextMenuPatchCallback = (children, { channel }: Grou export default definePlugin({ name: "ViewIcons", authors: [Devs.Ven, Devs.TheKodeToad, Devs.Nuckyz, Devs.nyx], - description: "Makes avatars and banners in user profiles clickable, adds View Icon/Banner entries in the user, server and group channel context menu.", + description: "Makes avatars and banners in user profiles clickable, adds View Icon/Banner/Avatar Decoration entries in the user, server and group channel context menu.", tags: ["Media", "Servers", "Appearance"], searchTerms: ["ImageUtilities"], dependencies: ["DynamicImageModalAPI"],