diff --git a/src/plugins/whoReacted/index.tsx b/src/plugins/whoReacted/index.tsx index 6dab3c7ccf..264e1aa510 100644 --- a/src/plugins/whoReacted/index.tsx +++ b/src/plugins/whoReacted/index.tsx @@ -16,14 +16,15 @@ * along with this program. If not, see . */ +import { definePluginSettings } from "@api/Settings"; import ErrorBoundary from "@components/ErrorBoundary"; import { Devs } from "@utils/constants"; import { sleep } from "@utils/misc"; import { Queue } from "@utils/Queue"; import { useForceUpdater } from "@utils/react"; -import definePlugin from "@utils/types"; +import definePlugin, { OptionType } from "@utils/types"; import { CustomEmoji, Message, ReactionEmoji, User } from "@vencord/discord-types"; -import { ChannelStore, Constants, FluxDispatcher, React, RestAPI, useEffect, useLayoutEffect, UserStore, UserSummaryItem } from "@webpack/common"; +import { ChannelStore, Constants, FluxDispatcher, React, RestAPI, useEffect, useLayoutEffect, UserStore, RelationshipStore, UserSummaryItem } from "@webpack/common"; interface ReactionCacheEntry { fetched: boolean; @@ -39,6 +40,14 @@ interface ReactionProps { let Scroll: any = null; const queue = new Queue(); let reactions: Record = {}; +const settings = definePluginSettings({ + hideBlockedUsers: { + description: "Whether to hide blocked or ignored reactions", + type: OptionType.BOOLEAN, + default: true, + restartNeeded: false + } +}); function fetchReactions(msg: Message, emoji: ReactionEmoji, type: number) { const key = emoji.name + (emoji.id ? `:${emoji.id}` : ""); @@ -86,7 +95,10 @@ function handleClickAvatar(event: React.UIEvent) { event.stopPropagation(); } -function ReactionUsers({ message, emoji, type }: ReactionProps) { +function ReactionUsers({ message, users }: { + message: Message, + users: User[] +}) { const forceUpdate = useForceUpdater(); useLayoutEffect(() => { // bc need to prevent autoscrolling @@ -105,9 +117,6 @@ function ReactionUsers({ message, emoji, type }: ReactionProps) { return () => FluxDispatcher.unsubscribe("MESSAGE_REACTION_ADD_USERS", cb); }, [message.id, forceUpdate]); - const reactions = getReactionsWithQueue(message, emoji, type); - const users = Array.from(reactions, ([id]) => UserStore.getUser(id)).filter(Boolean); - return (
{ - return props.message.reactions.length > 10 + renderUsers: ErrorBoundary.wrap(({ message, emoji, type }: ReactionProps) => { + const reactionMap = getReactionsWithQueue(message, emoji, type) + const users = Array.from(reactionMap, ([id]) => UserStore.getUser(id)) + .filter(Boolean) + .filter((user) => !settings.store.hideBlockedUsers + || !RelationshipStore.isBlockedOrIgnored(user.id)); + return message.reactions.length > 10 || users.length === 0 ? null - : ; + : ; }, { noop: true }), setScrollObj(scroll: any) { diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 61550c00a0..22230399c7 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -638,6 +638,10 @@ export const Devs = /* #__PURE__*/ Object.freeze({ name: "prism", id: 390884143749136386n, }, + paige: { + name: "paige", + id: 1375697625864601650n + }, } satisfies Record); // iife so #__PURE__ works correctly