From e364779e5a061d8fd298eb7860c574f8528fac2c Mon Sep 17 00:00:00 2001 From: oma <57739965+Eazvy@users.noreply.github.com> Date: Tue, 21 Apr 2026 16:49:42 -0400 Subject: [PATCH] Pending Friend Request (#1002) * Add pending friend request plugin * Simplify pending friend request analytics location * Update index.tsx * bleh * Update index.tsx --------- Co-authored-by: thororen1234 <78185467+thororen1234@users.noreply.github.com> --- src/equicordplugins/friendshipRanks/index.tsx | 7 +- .../pendingFriendRequest/index.tsx | 94 +++++++++++++++++++ 2 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 src/equicordplugins/pendingFriendRequest/index.tsx diff --git a/src/equicordplugins/friendshipRanks/index.tsx b/src/equicordplugins/friendshipRanks/index.tsx index ff91f1cbd..c33b57b9e 100644 --- a/src/equicordplugins/friendshipRanks/index.tsx +++ b/src/equicordplugins/friendshipRanks/index.tsx @@ -6,7 +6,7 @@ import "./styles.css"; -import { BadgePosition, BadgeUserArgs, ProfileBadge } from "@api/Badges"; +import { BadgePosition, BadgeUserArgs } from "@api/Badges"; import { Badges } from "@api/index"; import ErrorBoundary from "@components/ErrorBoundary"; import { Flex } from "@components/Flex"; @@ -121,8 +121,9 @@ function shouldShowBadge(userId: string, requirement: number, index: number) { } function getBadgesToApply() { - const badgesToApply: ProfileBadge[] = ranks.map((rank, index) => { + return ranks.map((rank, index) => { return ({ + id: `friendship_ranks_badge_${index}`, description: rank.title, iconSrc: rank.iconSrc, position: BadgePosition.END, @@ -136,8 +137,6 @@ function getBadgesToApply() { }, }); }); - - return badgesToApply; } export default definePlugin({ diff --git a/src/equicordplugins/pendingFriendRequest/index.tsx b/src/equicordplugins/pendingFriendRequest/index.tsx new file mode 100644 index 000000000..43c5f6942 --- /dev/null +++ b/src/equicordplugins/pendingFriendRequest/index.tsx @@ -0,0 +1,94 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2026 Vendicated and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import type { NavContextMenuPatchCallback } from "@api/ContextMenu"; +import { EquicordDevs } from "@utils/constants"; +import definePlugin from "@utils/types"; +import { RelationshipType } from "@vencord/discord-types/enums"; +import { findByPropsLazy } from "@webpack"; +import { Menu, RelationshipStore } from "@webpack/common"; + +const RelationshipActions = findByPropsLazy("cancelFriendRequest", "addRelationship"); + +function isOutgoingFriendRequest(userId: string) { + return RelationshipStore.getRelationshipType(userId) === RelationshipType.OUTGOING_REQUEST; +} + +function cancelOutgoingFriendRequest(userId: string) { + if (!isOutgoingFriendRequest(userId)) return; + return RelationshipActions.cancelFriendRequest(userId); +} + +const userContextPatch: NavContextMenuPatchCallback = (children, { user }) => { + if (!user || !isOutgoingFriendRequest(user.id)) return; + + children.push( +