diff --git a/src/plugins/betterRoleContext/README.md b/src/plugins/betterRoleContext/README.md
new file mode 100644
index 00000000..3f3086bd
--- /dev/null
+++ b/src/plugins/betterRoleContext/README.md
@@ -0,0 +1,6 @@
+# BetterRoleContext
+
+Adds options to copy role color and edit role when right clicking roles in the user profile
+
+![](https://github.com/Vendicated/Vencord/assets/45497981/d1765e9e-7db2-4a3c-b110-139c59235326)
+
diff --git a/src/plugins/betterRoleContext/index.tsx b/src/plugins/betterRoleContext/index.tsx
new file mode 100644
index 00000000..7a914293
--- /dev/null
+++ b/src/plugins/betterRoleContext/index.tsx
@@ -0,0 +1,79 @@
+/*
+ * Vencord, a Discord client mod
+ * Copyright (c) 2024 Vendicated and contributors
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+import { Devs } from "@utils/constants";
+import { getCurrentGuild } from "@utils/discord";
+import definePlugin from "@utils/types";
+import { findByPropsLazy } from "@webpack";
+import { Clipboard, Menu, PermissionStore, TextAndImagesSettingsStores } from "@webpack/common";
+
+const GuildSettingsActions = findByPropsLazy("open", "selectRole", "updateGuild");
+
+function PencilIcon() {
+ return (
+
+ );
+}
+
+function AppearanceIcon() {
+ return (
+
+ );
+}
+
+export default definePlugin({
+ name: "BetterRoleContext",
+ description: "Adds options to copy role color / edit role when right clicking roles in the user profile",
+ authors: [Devs.Ven],
+
+ start() {
+ // DeveloperMode needs to be enabled for the context menu to be shown
+ TextAndImagesSettingsStores.DeveloperMode.updateSetting(true);
+ },
+
+ contextMenus: {
+ "dev-context"(children, { id }: { id: string; }) {
+ const guild = getCurrentGuild();
+ const role = guild?.roles[id];
+ if (!role) return;
+
+ if (role.colorString) {
+ children.push(
+
Clipboard.copy(role.colorString!)}
+ icon={AppearanceIcon}
+ />
+ );
+ }
+
+ if (PermissionStore.getGuildPermissionProps(guild).canManageRoles) {
+ children.push(
+ {
+ await GuildSettingsActions.open(guild.id, "ROLES");
+ GuildSettingsActions.selectRole(id);
+ }}
+ icon={PencilIcon}
+ />
+ );
+ }
+ }
+ }
+});
diff --git a/src/webpack/common/settingsStores.ts b/src/webpack/common/settingsStores.ts
index 6db21949..4a48efda 100644
--- a/src/webpack/common/settingsStores.ts
+++ b/src/webpack/common/settingsStores.ts
@@ -6,7 +6,10 @@
import { findByPropsLazy } from "@webpack";
-export const TextAndImagesSettingsStores = findByPropsLazy("MessageDisplayCompact");
-export const StatusSettingsStores = findByPropsLazy("ShowCurrentGame");
+import * as t from "./types/settingsStores";
+
+
+export const TextAndImagesSettingsStores = findByPropsLazy("MessageDisplayCompact") as Record;
+export const StatusSettingsStores = findByPropsLazy("ShowCurrentGame") as Record;
export const UserSettingsActionCreators = findByPropsLazy("PreloadedUserSettingsActionCreators");
diff --git a/src/webpack/common/types/index.d.ts b/src/webpack/common/types/index.d.ts
index af4b5e1f..01c96855 100644
--- a/src/webpack/common/types/index.d.ts
+++ b/src/webpack/common/types/index.d.ts
@@ -16,9 +16,11 @@
* along with this program. If not, see .
*/
+export * from "./classes";
export * from "./components";
export * from "./fluxEvents";
+export * from "./i18nMessages";
export * from "./menu";
+export * from "./settingsStores";
export * from "./stores";
export * from "./utils";
-
diff --git a/src/webpack/common/types/settingsStores.ts b/src/webpack/common/types/settingsStores.ts
new file mode 100644
index 00000000..5453ca35
--- /dev/null
+++ b/src/webpack/common/types/settingsStores.ts
@@ -0,0 +1,11 @@
+/*
+ * Vencord, a Discord client mod
+ * Copyright (c) 2024 Vendicated and contributors
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+export interface SettingsStore {
+ getSetting(): T;
+ updateSetting(value: T): void;
+ useSetting(): T;
+}