diff --git a/src/plugins/betterRoleContext/index.tsx b/src/plugins/betterRoleContext/index.tsx index a9bab1a7..f9eae586 100644 --- a/src/plugins/betterRoleContext/index.tsx +++ b/src/plugins/betterRoleContext/index.tsx @@ -12,7 +12,7 @@ import { Devs } from "@utils/constants"; import { getCurrentGuild, openImageModal } from "@utils/discord"; import definePlugin, { OptionType } from "@utils/types"; import { findByPropsLazy } from "@webpack"; -import { GuildStore, Menu, PermissionStore } from "@webpack/common"; +import { GuildRoleStore, Menu, PermissionStore } from "@webpack/common"; const GuildSettingsActions = findByPropsLazy("open", "selectRole", "updateGuild"); @@ -80,7 +80,7 @@ export default definePlugin({ const guild = getCurrentGuild(); if (!guild) return; - const role = GuildStore.getRole(guild.id, id); + const role = GuildRoleStore.getRole(guild.id, id); if (!role) return; if (role.colorString) { diff --git a/src/plugins/mentionAvatars/index.tsx b/src/plugins/mentionAvatars/index.tsx index 5466a9e2..8f18567e 100644 --- a/src/plugins/mentionAvatars/index.tsx +++ b/src/plugins/mentionAvatars/index.tsx @@ -10,7 +10,7 @@ import { definePluginSettings } from "@api/Settings"; import ErrorBoundary from "@components/ErrorBoundary"; import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; -import { GuildStore, SelectedGuildStore, useState } from "@webpack/common"; +import { GuildRoleStore, SelectedGuildStore, useState } from "@webpack/common"; import { User } from "discord-types/general"; const settings = definePluginSettings({ @@ -89,7 +89,7 @@ export default definePlugin({ // Discord uses Role Mentions for uncached users because .... idk if (!roleId) return null; - const role = GuildStore.getRole(guildId, roleId); + const role = GuildRoleStore.getRole(guildId, roleId); if (!role?.icon) return ; diff --git a/src/plugins/permissionsViewer/components/RolesAndUsersPermissions.tsx b/src/plugins/permissionsViewer/components/RolesAndUsersPermissions.tsx index ed620d7f..46ddb146 100644 --- a/src/plugins/permissionsViewer/components/RolesAndUsersPermissions.tsx +++ b/src/plugins/permissionsViewer/components/RolesAndUsersPermissions.tsx @@ -23,7 +23,7 @@ import { copyToClipboard } from "@utils/clipboard"; import { getIntlMessage, getUniqueUsername } from "@utils/discord"; import { ModalCloseButton, ModalContent, ModalHeader, ModalProps, ModalRoot, ModalSize, openModal } from "@utils/modal"; import { findByCodeLazy } from "@webpack"; -import { ContextMenuApi, FluxDispatcher, GuildMemberStore, GuildStore, i18n, Menu, PermissionsBits, ScrollerThin, Text, Tooltip, useEffect, useMemo, UserStore, useState, useStateFromStores } from "@webpack/common"; +import { ContextMenuApi, FluxDispatcher, GuildMemberStore, GuildRoleStore, i18n, Menu, PermissionsBits, ScrollerThin, Text, Tooltip, useEffect, useMemo, UserStore, useState, useStateFromStores } from "@webpack/common"; import { UnicodeEmoji } from "@webpack/types"; import type { Guild, Role, User } from "discord-types/general"; @@ -85,7 +85,7 @@ function RolesAndUsersPermissionsComponent({ permissions, guild, modalProps, hea const [selectedItemIndex, selectItem] = useState(0); const selectedItem = permissions[selectedItemIndex]; - const roles = GuildStore.getRoles(guild.id); + const roles = GuildRoleStore.getRoles(guild.id); return ( { - const role = GuildStore.getRole(guild.id, roleId); + const role = GuildRoleStore.getRole(guild.id, roleId); if (!role) return; onClose(); diff --git a/src/plugins/permissionsViewer/index.tsx b/src/plugins/permissionsViewer/index.tsx index 3fd4428c..cc942f09 100644 --- a/src/plugins/permissionsViewer/index.tsx +++ b/src/plugins/permissionsViewer/index.tsx @@ -26,7 +26,7 @@ import { Devs } from "@utils/constants"; import { classes } from "@utils/misc"; import definePlugin, { OptionType } from "@utils/types"; import { findByPropsLazy } from "@webpack"; -import { Button, ChannelStore, Dialog, GuildMemberStore, GuildStore, match, Menu, PermissionsBits, Popout, TooltipContainer, useRef, UserStore } from "@webpack/common"; +import { Button, ChannelStore, Dialog, GuildMemberStore, GuildRoleStore, GuildStore, match, Menu, PermissionsBits, Popout, TooltipContainer, useRef, UserStore } from "@webpack/common"; import type { Guild, GuildMember } from "discord-types/general"; import openRolesAndUsersPermissionsModal, { PermissionType, RoleOrUserPermission } from "./components/RolesAndUsersPermissions"; @@ -107,7 +107,7 @@ function MenuItem(guildId: string, id?: string, type?: MenuItemParentType) { }; }) .otherwise(() => { - const permissions = Object.values(GuildStore.getRoles(guild.id)).map(role => ({ + const permissions = Object.values(GuildRoleStore.getRoles(guild.id)).map(role => ({ type: PermissionType.Role, ...role })); diff --git a/src/plugins/permissionsViewer/utils.ts b/src/plugins/permissionsViewer/utils.ts index dfa81e73..409c0896 100644 --- a/src/plugins/permissionsViewer/utils.ts +++ b/src/plugins/permissionsViewer/utils.ts @@ -18,7 +18,7 @@ import { classNameFactory } from "@api/Styles"; import { findByPropsLazy } from "@webpack"; -import { GuildStore } from "@webpack/common"; +import { GuildRoleStore } from "@webpack/common"; import { Guild, GuildMember, Role } from "discord-types/general"; import { PermissionsSortOrder, settings } from "."; @@ -29,7 +29,7 @@ export const { getGuildPermissionSpecMap } = findByPropsLazy("getGuildPermission export const cl = classNameFactory("vc-permviewer-"); export function getSortedRoles({ id }: Guild, member: GuildMember) { - const roles = GuildStore.getRoles(id); + const roles = GuildRoleStore.getRoles(id); return [...member.roles, id] .map(id => roles[id]) @@ -48,7 +48,7 @@ export function sortUserRoles(roles: Role[]) { } export function sortPermissionOverwrites(overwrites: T[], guildId: string) { - const roles = GuildStore.getRoles(guildId); + const roles = GuildRoleStore.getRoles(guildId); return overwrites.sort((a, b) => { if (a.type !== PermissionType.Role || b.type !== PermissionType.Role) return 0; diff --git a/src/plugins/roleColorEverywhere/index.tsx b/src/plugins/roleColorEverywhere/index.tsx index 61ea7868..65da676c 100644 --- a/src/plugins/roleColorEverywhere/index.tsx +++ b/src/plugins/roleColorEverywhere/index.tsx @@ -23,7 +23,7 @@ import { Devs } from "@utils/constants"; import { Logger } from "@utils/Logger"; import definePlugin, { OptionType } from "@utils/types"; import { findByCodeLazy } from "@webpack"; -import { ChannelStore, GuildMemberStore, GuildStore } from "@webpack/common"; +import { ChannelStore, GuildMemberStore, GuildRoleStore, GuildStore } from "@webpack/common"; const useMessageAuthor = findByCodeLazy('"Result cannot be null because the message is not null"'); @@ -210,7 +210,7 @@ export default definePlugin({ }, RoleGroupColor: ErrorBoundary.wrap(({ id, count, title, guildId, label }: { id: string; count: number; title: string; guildId: string; label: string; }) => { - const role = GuildStore.getRole(guildId, id); + const role = GuildRoleStore.getRole(guildId, id); return ( m.ANNOUNCEMENT_THREAD === 10); @@ -267,7 +267,7 @@ export default definePlugin({ // color role mentions (unity styling btw lol) if (message.mention_roles.length > 0) { for (const roleId of message.mention_roles) { - const role = GuildStore.getRole(channel.guild_id, roleId); + const role = GuildRoleStore.getRole(channel.guild_id, roleId); if (!role) continue; const roleColor = role.colorString ?? `#${pingColor}`; finalMsg = finalMsg.replace(`<@&${roleId}>`, `@${role.name}`); diff --git a/src/webpack/common/stores.ts b/src/webpack/common/stores.ts index e0c00f6d..712f5bdc 100644 --- a/src/webpack/common/stores.ts +++ b/src/webpack/common/stores.ts @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -import { findByCodeLazy, findByPropsLazy } from "@webpack"; +import { findByCodeLazy, findByPropsLazy, waitFor } from "@webpack"; import type * as Stores from "discord-types/stores"; import { waitForStore } from "./internal"; @@ -40,12 +40,13 @@ export let ReadStateStore: GenericStore; export let PresenceStore: GenericStore; export let GuildStore: t.GuildStore; +export let GuildRoleStore: t.GuildRoleStore; +export let GuildMemberStore: Stores.GuildMemberStore & t.FluxStore; export let UserStore: Stores.UserStore & t.FluxStore; export let UserProfileStore: GenericStore; 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: t.RelationshipStore; export let EmojiStore: t.EmojiStore; @@ -86,3 +87,7 @@ waitForStore("ThemeStore", m => { // Importing this directly can easily cause circular imports. For this reason, use a non import access here. Vencord.QuickCss.initQuickCssThemeStore(); }); + +// GuildRoleStore is new, this code is for stable + canary compatibility +// TODO: Change to waitForStore once GuildRoleStore is on stable +waitFor(["getRole", "getRoles"], m => GuildRoleStore = m); diff --git a/src/webpack/common/types/stores.d.ts b/src/webpack/common/types/stores.d.ts index cb06ca4b..9a2dd132 100644 --- a/src/webpack/common/types/stores.d.ts +++ b/src/webpack/common/types/stores.d.ts @@ -214,6 +214,9 @@ export class GuildStore extends FluxStore { getGuildCount(): number; getGuilds(): Record; getGuildIds(): string[]; +} + +export class GuildRoleStore extends FluxStore { getRole(guildId: string, roleId: string): Role; getRoles(guildId: string): Record; getAllGuildRoles(): Record>;