diff --git a/backend/src/plugins/Utility/functions/getRoleInfoEmbed.ts b/backend/src/plugins/Utility/functions/getRoleInfoEmbed.ts index 36a664e3..f58f61be 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 { PERMISSION_NAMES } 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) + ? [PERMISSION_NAMES.ADMINISTRATOR] + : role.permissions.toArray().map((p) => PERMISSION_NAMES[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..3bf0c4f1 --- /dev/null +++ b/backend/src/utils/permissionNames.ts @@ -0,0 +1,46 @@ +import { PermissionFlags } from "discord.js"; +import { EMPTY_CHAR } from "../utils"; + +export const PERMISSION_NAMES: Record = { + 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", +};