From d6fd6373ef1cb501764b0cbef7ae55f41a24a879 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Wed, 30 Jul 2025 11:01:44 -0400 Subject: [PATCH] Patch Fixes Co-Authored-By: sadan4 <117494111+sadan4@users.noreply.github.com> --- .../src/stores/GuildRoleStore.d.ts | 11 ++++++++--- .../src/stores/RelationshipStore.d.ts | 4 ++-- src/plugins/ircColors/index.ts | 4 ++-- .../components/RolesAndUsersPermissions.tsx | 4 ++-- .../components/UserPermissions.tsx | 4 ++-- src/plugins/permissionsViewer/index.tsx | 13 ++++++------- src/plugins/permissionsViewer/utils.ts | 13 +++++-------- src/plugins/serverInfo/GuildInfoModal.tsx | 2 +- src/plugins/showHiddenChannels/index.tsx | 4 ++-- src/plugins/showHiddenThings/index.ts | 17 ++++++++++++++--- 10 files changed, 44 insertions(+), 32 deletions(-) diff --git a/packages/discord-types/src/stores/GuildRoleStore.d.ts b/packages/discord-types/src/stores/GuildRoleStore.d.ts index bf0d4042a..01e1cf831 100644 --- a/packages/discord-types/src/stores/GuildRoleStore.d.ts +++ b/packages/discord-types/src/stores/GuildRoleStore.d.ts @@ -1,7 +1,12 @@ -import { FluxStore, Role } from ".."; +import { FluxStore, Guild, Role } from ".."; export class GuildRoleStore extends FluxStore { + serializeAllGuildRoles(): Array<{ partitionKey: string; values: Record; }>; + getUnsafeMutableRoles(guildId: string): Record; + getManyRoles(guildId: string, roleIds: string[]): Role[]; getRole(guildId: string, roleId: string): Role; - getRoles(guildId: string): Record; - getAllGuildRoles(): Record>; + getNumRoles(guildId: string): number; + getEveryoneRole(guild: Guild): Role; + getRolesSnapshot(guildId: string): Record; + getSortedRoles(guildId: string): Role[]; } diff --git a/packages/discord-types/src/stores/RelationshipStore.d.ts b/packages/discord-types/src/stores/RelationshipStore.d.ts index 946596004..5874a85fc 100644 --- a/packages/discord-types/src/stores/RelationshipStore.d.ts +++ b/packages/discord-types/src/stores/RelationshipStore.d.ts @@ -27,11 +27,11 @@ export class RelationshipStore extends FluxStore { getSinces(): Record; getFriendCount(): number; + getRelationshipCount(): number; + getOutgoingCount(): number; getPendingCount(): number; getPendingIgnoredCount(): number; getSpamCount(): number; - getRelationshipCount(): number; - getOutgoingCount(): number; getMutableRelationships(): Map; getVersion(): number; diff --git a/src/plugins/ircColors/index.ts b/src/plugins/ircColors/index.ts index ed79c180a..3375a0c02 100644 --- a/src/plugins/ircColors/index.ts +++ b/src/plugins/ircColors/index.ts @@ -75,8 +75,8 @@ export default definePlugin({ { find: "#{intl::GUILD_OWNER}),children:", replacement: { - match: /(?<=roleName:\i,)color:/, - replace: "color:$self.calculateNameColorForListContext(arguments[0]),originalColor:" + match: /(?<=roleName:\i,)(colorString:)/, + replace: "$1$self.calculateNameColorForListContext(arguments[0]),originalColor:" }, predicate: () => settings.store.memberListColors } diff --git a/src/plugins/permissionsViewer/components/RolesAndUsersPermissions.tsx b/src/plugins/permissionsViewer/components/RolesAndUsersPermissions.tsx index 28beabe1e..a1c9fac11 100644 --- a/src/plugins/permissionsViewer/components/RolesAndUsersPermissions.tsx +++ b/src/plugins/permissionsViewer/components/RolesAndUsersPermissions.tsx @@ -84,7 +84,7 @@ function RolesAndUsersPermissionsComponent({ permissions, guild, modalProps, hea const [selectedItemIndex, selectItem] = useState(0); const selectedItem = permissions[selectedItemIndex]; - const roles = GuildRoleStore.getRoles(guild.id); + const roles = GuildRoleStore.getSortedRoles(guild.id); return ( {permissions.map((permission, index) => { const user: User | undefined = UserStore.getUser(permission.id ?? ""); - const role: Role | undefined = roles[permission.id ?? ""]; + const role: Role | undefined = roles.find(role => role.id === permission.id); const roleIconSrc = role != null ? getRoleIconSrc(role) : undefined; return ( diff --git a/src/plugins/permissionsViewer/components/UserPermissions.tsx b/src/plugins/permissionsViewer/components/UserPermissions.tsx index 5185abb3c..305896168 100644 --- a/src/plugins/permissionsViewer/components/UserPermissions.tsx +++ b/src/plugins/permissionsViewer/components/UserPermissions.tsx @@ -24,7 +24,7 @@ import { filters, findBulk, proxyLazyWebpack } from "@webpack"; import { PermissionsBits, Text, Tooltip, useMemo, UserStore } from "@webpack/common"; import { PermissionsSortOrder, settings } from ".."; -import { cl, getGuildPermissionSpecMap, getSortedRoles, sortUserRoles } from "../utils"; +import { cl, getGuildPermissionSpecMap, getSortedRolesForMember, sortUserRoles } from "../utils"; import openRolesAndUsersPermissionsModal, { PermissionType, type RoleOrUserPermission } from "./RolesAndUsersPermissions"; interface UserPermission { @@ -94,7 +94,7 @@ function UserPermissionsComponent({ guild, guildMember, closePopout }: { guild: const [rolePermissions, userPermissions] = useMemo(() => { const userPermissions: UserPermissions = []; - const userRoles = getSortedRoles(guild, guildMember); + const userRoles = getSortedRolesForMember(guild, guildMember); const rolePermissions: Array = userRoles.map(role => ({ type: PermissionType.Role, diff --git a/src/plugins/permissionsViewer/index.tsx b/src/plugins/permissionsViewer/index.tsx index ed2471fb9..4587bcaab 100644 --- a/src/plugins/permissionsViewer/index.tsx +++ b/src/plugins/permissionsViewer/index.tsx @@ -31,7 +31,7 @@ import { Button, ChannelStore, Dialog, GuildMemberStore, GuildRoleStore, GuildSt import openRolesAndUsersPermissionsModal, { PermissionType, RoleOrUserPermission } from "./components/RolesAndUsersPermissions"; import UserPermissions from "./components/UserPermissions"; -import { getSortedRoles, sortPermissionOverwrites } from "./utils"; +import { getSortedRolesForMember, sortPermissionOverwrites } from "./utils"; const PopoutClasses = findByPropsLazy("container", "scroller", "list"); const RoleButtonClasses = findByPropsLazy("button", "buttonInner", "icon", "banner"); @@ -73,11 +73,10 @@ function MenuItem(guildId: string, id?: string, type?: MenuItemParentType) { .with(MenuItemParentType.User, () => { const member = GuildMemberStore.getMember(guildId, id!)!; - const permissions: RoleOrUserPermission[] = getSortedRoles(guild, member) - .map(role => ({ - type: PermissionType.Role, - ...role - })); + const permissions: RoleOrUserPermission[] = getSortedRolesForMember(guild, member).map(role => ({ + type: PermissionType.Role, + ...role + })); if (guild.ownerId === id) { permissions.push({ @@ -107,7 +106,7 @@ function MenuItem(guildId: string, id?: string, type?: MenuItemParentType) { }; }) .otherwise(() => { - const permissions = Object.values(GuildRoleStore.getRoles(guild.id)).map(role => ({ + const permissions = GuildRoleStore.getSortedRoles(guild.id).map(role => ({ type: PermissionType.Role, ...role })); diff --git a/src/plugins/permissionsViewer/utils.ts b/src/plugins/permissionsViewer/utils.ts index 022dca6e1..2a8efe965 100644 --- a/src/plugins/permissionsViewer/utils.ts +++ b/src/plugins/permissionsViewer/utils.ts @@ -28,12 +28,10 @@ export const { getGuildPermissionSpecMap } = findByPropsLazy("getGuildPermission export const cl = classNameFactory("vc-permviewer-"); -export function getSortedRoles({ id }: Guild, member: GuildMember) { - const roles = GuildRoleStore.getRoles(id); - - return [...member.roles, id] - .map(id => roles[id]) - .sort((a, b) => b.position - a.position); +export function getSortedRolesForMember({ id: guildId }: Guild, member: GuildMember) { + return GuildRoleStore + .getSortedRoles(guildId) + .filter(role => role.id === guildId || member.roles.includes(role.id)); } export function sortUserRoles(roles: Role[]) { @@ -48,8 +46,7 @@ export function sortUserRoles(roles: Role[]) { } export function sortPermissionOverwrites(overwrites: T[], guildId: string) { - const roles = GuildRoleStore.getRoles(guildId); - + const roles = Object.fromEntries(GuildRoleStore.getSortedRoles(guildId).map(role => [role.id, role] as const)); return overwrites.sort((a, b) => { if (a.type !== PermissionType.Role || b.type !== PermissionType.Role) return 0; diff --git a/src/plugins/serverInfo/GuildInfoModal.tsx b/src/plugins/serverInfo/GuildInfoModal.tsx index 84fff15a9..a76113027 100644 --- a/src/plugins/serverInfo/GuildInfoModal.tsx +++ b/src/plugins/serverInfo/GuildInfoModal.tsx @@ -235,7 +235,7 @@ function ServerInfoTab({ guild }: GuildProps) { "Verification Level": ["None", "Low", "Medium", "High", "Highest"][guild.verificationLevel] || "?", "Server Boosts": `${guild.premiumSubscriberCount ?? 0} (Level ${guild.premiumTier ?? 0})`, "Channels": GuildChannelStore.getChannels(guild.id)?.count - 1 || "?", // - null category - "Roles": Object.keys(GuildRoleStore.getRoles(guild.id)).length - 1, // - @everyone + "Roles": GuildRoleStore.getSortedRoles(guild.id).length - 1, // - @everyone }; return ( diff --git a/src/plugins/showHiddenChannels/index.tsx b/src/plugins/showHiddenChannels/index.tsx index 59ef433dc..e3d3301fb 100644 --- a/src/plugins/showHiddenChannels/index.tsx +++ b/src/plugins/showHiddenChannels/index.tsx @@ -334,8 +334,8 @@ export default definePlugin({ }, { // Include the @everyone role in the allowed roles list for Hidden Channels - match: /sortBy.{0,30}?\.filter\(\i=>(?<=channel:(\i).+?)/, - replace: (m, channel) => `${m}$self.isHiddenChannel(${channel})?true:` + match: /getSortedRoles.+?\.filter\(\i=>(?=!)/, + replace: m => `${m}$self.isHiddenChannel(arguments[0].channel)?true:` }, { // If the @everyone role has the required permissions, make the array only contain it diff --git a/src/plugins/showHiddenThings/index.ts b/src/plugins/showHiddenThings/index.ts index d80691fef..96ebf169c 100644 --- a/src/plugins/showHiddenThings/index.ts +++ b/src/plugins/showHiddenThings/index.ts @@ -18,7 +18,9 @@ import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; +import { Logger } from "@utils/Logger"; import definePlugin, { OptionType, PluginSettingDef } from "@utils/types"; +import { GuildMember, Role } from "@vencord/discord-types"; const opt = (description: string) => ({ type: OptionType.BOOLEAN, @@ -70,8 +72,8 @@ export default definePlugin({ find: "#{intl::GUILD_MEMBER_MOD_VIEW_PERMISSION_GRANTED_BY_ARIA_LABEL}),allowOverflow:", predicate: () => settings.store.showModView, replacement: { - match: /(role:)\i(?=,guildId.{0,100}role:(\i\[))/, - replace: "$1$2arguments[0].member.highestRoleId]", + match: /(role:)\i(?<=\i\.roles,\i\.highestRoleId,(\i)\].+)/, + replace: "$1$self.findHighestRole(arguments[0],$2)", } }, // allows you to open mod view on yourself @@ -83,5 +85,14 @@ export default definePlugin({ replace: "false" } } - ] + ], + + findHighestRole({ member }: { member: GuildMember; }, roles: Role[]): Role | undefined { + try { + return roles.find(role => role.id === member.highestRoleId); + } catch (e) { + new Logger("ShowHiddenThings").error("Failed to find highest role", e); + return undefined; + } + } });