From 95365d8573595840185ca3affb2e6349a1925c8a Mon Sep 17 00:00:00 2001
From: almeidx <almeidx@pm.me>
Date: Fri, 26 Nov 2021 11:49:08 +0000
Subject: [PATCH] fix permissions not showing properly in roleinfo

---
 .../Utility/functions/getRoleInfoEmbed.ts     | 14 ++----
 backend/src/utils/permissionNames.ts          | 46 +++++++++++++++++++
 2 files changed, 51 insertions(+), 9 deletions(-)
 create mode 100644 backend/src/utils/permissionNames.ts

diff --git a/backend/src/plugins/Utility/functions/getRoleInfoEmbed.ts b/backend/src/plugins/Utility/functions/getRoleInfoEmbed.ts
index 36a664e3..4dbc99b7 100644
--- a/backend/src/plugins/Utility/functions/getRoleInfoEmbed.ts
+++ b/backend/src/plugins/Utility/functions/getRoleInfoEmbed.ts
@@ -1,8 +1,9 @@
-import { MessageEmbedOptions, Role } from "discord.js";
+import { MessageEmbedOptions, Permissions, Role } from "discord.js";
 import humanizeDuration from "humanize-duration";
 import { GuildPluginData } from "knub";
 import moment from "moment-timezone";
 import { EmbedWith, preEmbedPadding, trimLines } from "../../../utils";
+import { permissionNames } from "../../../utils/permissionNames.js";
 import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin";
 import { UtilityPluginType } from "../types";
 
@@ -35,14 +36,9 @@ export async function getRoleInfoEmbed(
     round: true,
   });
 
-  const rolePerms = Object.keys(role.permissions.toJSON()).map((p) =>
-    p
-      // Voice channel related permission names start with 'voice'
-      .replace(/^voice/i, "")
-      .replace(/([a-z])([A-Z])/g, "$1 $2")
-      .toLowerCase()
-      .replace(/(^\w{1})|(\s{1}\w{1})/g, (l) => l.toUpperCase()),
-  );
+  const rolePerms = role.permissions.has(Permissions.FLAGS.ADMINISTRATOR)
+    ? [permissionNames.ADMINISTRATOR]
+    : role.permissions.toArray().map((p) => permissionNames[p]);
 
   // -1 because of the @everyone role
   const totalGuildRoles = pluginData.guild.roles.cache.size - 1;
diff --git a/backend/src/utils/permissionNames.ts b/backend/src/utils/permissionNames.ts
new file mode 100644
index 00000000..323f11cf
--- /dev/null
+++ b/backend/src/utils/permissionNames.ts
@@ -0,0 +1,46 @@
+import { PermissionFlags } from "discord.js";
+import { EMPTY_CHAR } from "../utils";
+
+export const permissionNames: Record<keyof PermissionFlags, string> = {
+  ADD_REACTIONS: "Add Reactions",
+  ADMINISTRATOR: "Administrator",
+  ATTACH_FILES: "Attach Files",
+  BAN_MEMBERS: "Ban Members",
+  CHANGE_NICKNAME: "Change Nickname",
+  CONNECT: "Connect",
+  CREATE_INSTANT_INVITE: "Create Invite",
+  CREATE_PRIVATE_THREADS: "Create Private Threads",
+  CREATE_PUBLIC_THREADS: "Create Public Threads",
+  DEAFEN_MEMBERS: "Deafen Members",
+  EMBED_LINKS: "Embed Links",
+  KICK_MEMBERS: "Kick Members",
+  MANAGE_CHANNELS: "Manage Channels",
+  MANAGE_EMOJIS_AND_STICKERS: "Manage Emojis and Stickers",
+  MANAGE_GUILD: "Manage Server",
+  MANAGE_MESSAGES: "Manage Messages",
+  MANAGE_NICKNAMES: "Manage Nicknames",
+  MANAGE_ROLES: "Manage Roles",
+  MANAGE_THREADS: "Manage Threads",
+  MANAGE_WEBHOOKS: "Manage Webhooks",
+  MENTION_EVERYONE: `Mention @${EMPTY_CHAR}everyone, @${EMPTY_CHAR}here, and All Roles`,
+  MOVE_MEMBERS: "Move Members",
+  MUTE_MEMBERS: "Mute Members",
+  PRIORITY_SPEAKER: "Priority Speaker",
+  READ_MESSAGE_HISTORY: "Read Message History",
+  REQUEST_TO_SPEAK: "Request to Speak",
+  SEND_MESSAGES: "Send Messages",
+  SEND_MESSAGES_IN_THREADS: "Send Messages in Threads",
+  SEND_TTS_MESSAGES: "Send Text-To-Speech Messages",
+  SPEAK: "Speak",
+  START_EMBEDDED_ACTIVITIES: "Start Embedded Activities",
+  STREAM: "Video",
+  USE_APPLICATION_COMMANDS: "Use Application Commands",
+  USE_EXTERNAL_EMOJIS: "Use External Emoji",
+  USE_EXTERNAL_STICKERS: "Use External Stickers",
+  USE_PRIVATE_THREADS: "Use Private Threads",
+  USE_PUBLIC_THREADS: "Use Public Threads",
+  USE_VAD: "Use Voice Activity",
+  VIEW_AUDIT_LOG: "View Audit Log",
+  VIEW_CHANNEL: "View Channels",
+  VIEW_GUILD_INSIGHTS: "View Guild Insights",
+};