/* * Vencord, a Discord client mod * Copyright (c) 2024 Vendicated and contributors * SPDX-License-Identifier: GPL-3.0-or-later */ import ErrorBoundary from "@components/ErrorBoundary"; import { Devs } from "@utils/constants"; import { getCurrentChannel } from "@utils/discord"; import { Logger } from "@utils/Logger"; import definePlugin from "@utils/types"; import { findByCodeLazy, findByPropsLazy, findLazy } from "@webpack"; import { Heading, RelationshipStore, Text } from "@webpack/common"; const containerWrapper = findByPropsLazy("memberSinceWrapper"); const container = findByPropsLazy("memberSince"); const getCreatedAtDate = findByCodeLazy('month:"short",day:"numeric"'); const locale = findByPropsLazy("getLocale"); const lastSection = findByPropsLazy("lastSection"); const section = findLazy((m: any) => m.section !== void 0 && Object.values(m).length === 1); export default definePlugin({ name: "FriendsSince", description: "Shows when you became friends with someone in the user popout", authors: [Devs.Elvyra, Devs.Antti], patches: [ // User popup - old layout { find: ".USER_PROFILE}};return", replacement: { match: /,{userId:(\i.id).{0,30}}\)/, replace: "$&,$self.friendsSinceOld({ userId: $1 })" } }, // DM User Sidebar - old layout { find: ".PROFILE_PANEL,", replacement: { match: /,{userId:([^,]+?)}\)/, replace: "$&,$self.friendsSinceOld({ userId: $1 })" } }, // User Profile Modal - old layout { find: ".userInfoSectionHeader,", replacement: { match: /(\.Messages\.USER_PROFILE_MEMBER_SINCE.+?userId:(.+?),textClassName:)(\i\.userInfoText)}\)/, replace: (_, rest, userId, textClassName) => `${rest}!$self.getFriendSince(${userId}) ? ${textClassName} : void 0 }), $self.friendsSinceOld({ userId: ${userId}, textClassName: ${textClassName} })` } }, // DM User Sidebar - new layout { find: ".PANEL}),nicknameIcons", replacement: { match: /USER_PROFILE_MEMBER_SINCE,.{0,100}userId:(\i\.id)}\)}\)/, replace: "$&,$self.friendsSinceNew({userId:$1,isSidebar:true})" } }, // User Profile Modal - new layout { find: "action:\"PRESS_APP_CONNECTION\"", replacement: { match: /USER_PROFILE_MEMBER_SINCE,.{0,100}userId:(\i\.id),.{0,100}}\)}\),/, replace: "$&,$self.friendsSinceNew({userId:$1,isSidebar:false})," } } ], getFriendSince(userId: string) { try { if (!RelationshipStore.isFriend(userId)) return null; return RelationshipStore.getSince(userId); } catch (err) { new Logger("FriendsSince").error(err); return null; } }, friendsSinceOld: ErrorBoundary.wrap(({ userId, textClassName }: { userId: string; textClassName?: string; }) => { if (!RelationshipStore.isFriend(userId)) return null; const friendsSince = RelationshipStore.getSince(userId); if (!friendsSince) return null; return (