Patch Fixes
Co-Authored-By: sadan4 <117494111+sadan4@users.noreply.github.com>
This commit is contained in:
parent
a3bb887a93
commit
d6fd6373ef
10 changed files with 44 additions and 32 deletions
|
|
@ -1,7 +1,12 @@
|
|||
import { FluxStore, Role } from "..";
|
||||
import { FluxStore, Guild, Role } from "..";
|
||||
|
||||
export class GuildRoleStore extends FluxStore {
|
||||
serializeAllGuildRoles(): Array<{ partitionKey: string; values: Record<string, Role>; }>;
|
||||
getUnsafeMutableRoles(guildId: string): Record<string, Role>;
|
||||
getManyRoles(guildId: string, roleIds: string[]): Role[];
|
||||
getRole(guildId: string, roleId: string): Role;
|
||||
getRoles(guildId: string): Record<string, Role>;
|
||||
getAllGuildRoles(): Record<string, Record<string, Role>>;
|
||||
getNumRoles(guildId: string): number;
|
||||
getEveryoneRole(guild: Guild): Role;
|
||||
getRolesSnapshot(guildId: string): Record<string, Role>;
|
||||
getSortedRoles(guildId: string): Role[];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,11 +27,11 @@ export class RelationshipStore extends FluxStore {
|
|||
getSinces(): Record<number, string>;
|
||||
|
||||
getFriendCount(): number;
|
||||
getRelationshipCount(): number;
|
||||
getOutgoingCount(): number;
|
||||
getPendingCount(): number;
|
||||
getPendingIgnoredCount(): number;
|
||||
getSpamCount(): number;
|
||||
getRelationshipCount(): number;
|
||||
getOutgoingCount(): number;
|
||||
|
||||
getMutableRelationships(): Map<string, number>;
|
||||
getVersion(): number;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 (
|
||||
<ModalRoot
|
||||
|
|
@ -108,7 +108,7 @@ function RolesAndUsersPermissionsComponent({ permissions, guild, modalProps, hea
|
|||
<ScrollerThin className={cl("modal-list")} orientation="auto">
|
||||
{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 (
|
||||
|
|
|
|||
|
|
@ -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<RoleOrUserPermission> = userRoles.map(role => ({
|
||||
type: PermissionType.Role,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}));
|
||||
|
|
|
|||
|
|
@ -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<T extends { id: string; type: number; }>(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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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 (
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue