From 8d97863db6d1c6e628a057e3cb66ea1634d0a3f9 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Tue, 17 Jun 2025 21:58:12 +0200 Subject: [PATCH] Fix ImplicitRelationships, RelationshipNotifier & ServerInfo --- src/plugins/implicitRelationships/index.ts | 18 ++++++++---------- src/plugins/noBlockedMessages/index.ts | 5 +---- src/plugins/quickReply/index.ts | 4 ---- src/plugins/relationshipNotifier/utils.ts | 2 +- src/plugins/serverInfo/GuildInfoModal.tsx | 4 ++-- src/webpack/common/stores.ts | 6 +----- src/webpack/common/types/stores.d.ts | 17 +++++++++++++++++ 7 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/plugins/implicitRelationships/index.ts b/src/plugins/implicitRelationships/index.ts index 13c12ed9..edaf4be9 100644 --- a/src/plugins/implicitRelationships/index.ts +++ b/src/plugins/implicitRelationships/index.ts @@ -23,7 +23,7 @@ import { findStoreLazy } from "@webpack"; import { Constants, FluxDispatcher, GuildStore, RelationshipStore, RestAPI, SnowflakeUtils, UserStore } from "@webpack/common"; import { Settings } from "Vencord"; -const UserAffinitiesStore = findStoreLazy("UserAffinitiesStore"); +const UserAffinitiesStore = findStoreLazy("UserAffinitiesV2Store"); export default definePlugin({ name: "ImplicitRelationships", @@ -117,7 +117,7 @@ export default definePlugin({ wrapSort(comparator: Function, row: any) { return row.type === 5 - ? -(UserAffinitiesStore.getUserAffinity(row.user.id)?.affinity ?? 0) + ? (UserAffinitiesStore.getUserAffinity(row.user.id)?.communicationRank ?? 0) : comparator(row); }, @@ -139,17 +139,15 @@ export default definePlugin({ // 1. Have an affinity for // 2. Do not have a relationship with await this.refreshUserAffinities(); - const userAffinities: Set = UserAffinitiesStore.getUserAffinitiesUserIds(); - const relationships = RelationshipStore.getRelationships(); - const nonFriendAffinities = Array.from(userAffinities).filter( - id => !RelationshipStore.getRelationshipType(id) - ); - nonFriendAffinities.forEach(id => { - relationships[id] = 5; + const userAffinities: Record[] = UserAffinitiesStore.getUserAffinities(); + const relationships = RelationshipStore.getMutableRelationships(); + const nonFriendAffinities = userAffinities.filter(a => !RelationshipStore.getRelationshipType(a.otherUserId)); + nonFriendAffinities.forEach(a => { + relationships[a.otherUserId] = 5; }); RelationshipStore.emitChange(); - const toRequest = nonFriendAffinities.filter(id => !UserStore.getUser(id)); + const toRequest = nonFriendAffinities.filter(a => !UserStore.getUser(a.otherUserId)); const allGuildIds = Object.keys(GuildStore.getGuilds()); const sentNonce = SnowflakeUtils.fromTimestamp(Date.now()); let count = allGuildIds.length * Math.ceil(toRequest.length / 100); diff --git a/src/plugins/noBlockedMessages/index.ts b/src/plugins/noBlockedMessages/index.ts index efa4ed08..973e3796 100644 --- a/src/plugins/noBlockedMessages/index.ts +++ b/src/plugins/noBlockedMessages/index.ts @@ -21,12 +21,9 @@ import { Devs } from "@utils/constants"; import { runtimeHashMessageKey } from "@utils/intlHash"; import { Logger } from "@utils/Logger"; import definePlugin, { OptionType } from "@utils/types"; -import { findByPropsLazy } from "@webpack"; -import { i18n } from "@webpack/common"; +import { i18n, RelationshipStore } from "@webpack/common"; import { Message } from "discord-types/general"; -const RelationshipStore = findByPropsLazy("getRelationships", "isBlocked"); - interface MessageDeleteProps { // Internal intl message for BLOCKED_MESSAGE_COUNT collapsedReason: () => any; diff --git a/src/plugins/quickReply/index.ts b/src/plugins/quickReply/index.ts index 5a6b45f9..dcd2038c 100644 --- a/src/plugins/quickReply/index.ts +++ b/src/plugins/quickReply/index.ts @@ -19,19 +19,15 @@ import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; -import { findByPropsLazy } from "@webpack"; import { ChannelStore, ComponentDispatch, FluxDispatcher as Dispatcher, MessageActions, MessageStore, PermissionsBits, PermissionStore, SelectedChannelStore, UserStore } from "@webpack/common"; import { Message } from "discord-types/general"; import NoBlockedMessagesPlugin from "plugins/noBlockedMessages"; import NoReplyMentionPlugin from "plugins/noReplyMention"; -const RelationshipStore = findByPropsLazy("getRelationships", "isBlocked"); - const isMac = navigator.platform.includes("Mac"); // bruh let currentlyReplyingId: string | null = null; let currentlyEditingId: string | null = null; - const enum MentionOptions { DISABLED, ENABLED, diff --git a/src/plugins/relationshipNotifier/utils.ts b/src/plugins/relationshipNotifier/utils.ts index 84e812a7..75cf2d3a 100644 --- a/src/plugins/relationshipNotifier/utils.ts +++ b/src/plugins/relationshipNotifier/utils.ts @@ -172,7 +172,7 @@ export async function syncFriends() { friends.friends = []; friends.requests = []; - const relationShips = RelationshipStore.getRelationships(); + const relationShips = RelationshipStore.getMutableRelationships(); for (const id in relationShips) { switch (relationShips[id]) { case RelationshipType.FRIEND: diff --git a/src/plugins/serverInfo/GuildInfoModal.tsx b/src/plugins/serverInfo/GuildInfoModal.tsx index 60401b71..8300380d 100644 --- a/src/plugins/serverInfo/GuildInfoModal.tsx +++ b/src/plugins/serverInfo/GuildInfoModal.tsx @@ -220,12 +220,12 @@ function FriendsTab({ guild, setCount }: RelationshipProps) { } function BlockedUsersTab({ guild, setCount }: RelationshipProps) { - const blockedIds = Object.keys(RelationshipStore.getRelationships()).filter(id => RelationshipStore.isBlocked(id)); + const blockedIds = Object.keys(RelationshipStore.getMutableRelationships()).filter(id => RelationshipStore.isBlocked(id)); return UserList("blocked", guild, blockedIds, setCount); } function IgnoredUserTab({ guild, setCount }: RelationshipProps) { - const ignoredIds = Object.keys(RelationshipStore.getRelationships()).filter(id => RelationshipStore.isIgnored(id)); + const ignoredIds = Object.keys(RelationshipStore.getMutableRelationships()).filter(id => RelationshipStore.isIgnored(id)); return UserList("ignored", guild, ignoredIds, setCount); } diff --git a/src/webpack/common/stores.ts b/src/webpack/common/stores.ts index 1dcda187..e0c00f6d 100644 --- a/src/webpack/common/stores.ts +++ b/src/webpack/common/stores.ts @@ -46,11 +46,7 @@ export let SelectedChannelStore: Stores.SelectedChannelStore & t.FluxStore; export let SelectedGuildStore: t.FluxStore & Record; export let ChannelStore: Stores.ChannelStore & t.FluxStore; export let GuildMemberStore: Stores.GuildMemberStore & t.FluxStore; -export let RelationshipStore: Stores.RelationshipStore & t.FluxStore & { - /** Get the date (as a string) that the relationship was created */ - getSince(userId: string): string; - isIgnored(userId: string): boolean; -}; +export let RelationshipStore: t.RelationshipStore; export let EmojiStore: t.EmojiStore; export let ThemeStore: t.ThemeStore; diff --git a/src/webpack/common/types/stores.d.ts b/src/webpack/common/types/stores.d.ts index 67148303..497de739 100644 --- a/src/webpack/common/types/stores.d.ts +++ b/src/webpack/common/types/stores.d.ts @@ -233,3 +233,20 @@ export type useStateFromStores = ( dependencies?: any, isEqual?: (old: T, newer: T) => boolean ) => T; + +export class RelationshipStore extends FluxStore { + getFriendIDs(): string[]; + /** Related to friend nicknames experiment. */ + getNickname(userId: string): string; + getPendingCount(): number; + getRelationshipCount(): number; + /** @returns Enum value from constants.RelationshipTypes */ + getRelationshipType(userId: string): number; + /** @returns Format: [userId: Enum value from constants.RelationshipTypes] */ + getMutableRelationships(): Record; + isBlocked(userId: string): boolean; + isFriend(userId: string): boolean; + + getSince(userId: string): string; + isIgnored(userId: string): boolean; +}