diff --git a/backend/src/plugins/Automod/actions/changePerms.ts b/backend/src/plugins/Automod/actions/changePerms.ts index 8e5c1c0e..3f22948c 100644 --- a/backend/src/plugins/Automod/actions/changePerms.ts +++ b/backend/src/plugins/Automod/actions/changePerms.ts @@ -9,11 +9,64 @@ import { } from "../../../utils/templateSafeObjects"; import { automodAction } from "../helpers"; +type LegacyPermMap = Record; +const legacyPermMap = { + CREATE_INSTANT_INVITE: "CreateInstantInvite", + KICK_MEMBERS: "KickMembers", + BAN_MEMBERS: "BanMembers", + ADMINISTRATOR: "Administrator", + MANAGE_CHANNELS: "ManageChannels", + MANAGE_GUILD: "ManageGuild", + ADD_REACTIONS: "AddReactions", + VIEW_AUDIT_LOG: "ViewAuditLog", + PRIORITY_SPEAKER: "PrioritySpeaker", + STREAM: "Stream", + VIEW_CHANNEL: "ViewChannel", + SEND_MESSAGES: "SendMessages", + SEND_TTSMESSAGES: "SendTTSMessages", + MANAGE_MESSAGES: "ManageMessages", + EMBED_LINKS: "EmbedLinks", + ATTACH_FILES: "AttachFiles", + READ_MESSAGE_HISTORY: "ReadMessageHistory", + MENTION_EVERYONE: "MentionEveryone", + USE_EXTERNAL_EMOJIS: "UseExternalEmojis", + VIEW_GUILD_INSIGHTS: "ViewGuildInsights", + CONNECT: "Connect", + SPEAK: "Speak", + MUTE_MEMBERS: "MuteMembers", + DEAFEN_MEMBERS: "DeafenMembers", + MOVE_MEMBERS: "MoveMembers", + USE_VAD: "UseVAD", + CHANGE_NICKNAME: "ChangeNickname", + MANAGE_NICKNAMES: "ManageNicknames", + MANAGE_ROLES: "ManageRoles", + MANAGE_WEBHOOKS: "ManageWebhooks", + MANAGE_EMOJIS_AND_STICKERS: "ManageEmojisAndStickers", + USE_APPLICATION_COMMANDS: "UseApplicationCommands", + REQUEST_TO_SPEAK: "RequestToSpeak", + MANAGE_EVENTS: "ManageEvents", + MANAGE_THREADS: "ManageThreads", + CREATE_PUBLIC_THREADS: "CreatePublicThreads", + CREATE_PRIVATE_THREADS: "CreatePrivateThreads", + USE_EXTERNAL_STICKERS: "UseExternalStickers", + SEND_MESSAGES_IN_THREADS: "SendMessagesInThreads", + USE_EMBEDDED_ACTIVITIES: "UseEmbeddedActivities", + MODERATE_MEMBERS: "ModerateMembers", +} satisfies LegacyPermMap; + +const realToLegacyMap = Object.entries(legacyPermMap).reduce((map, pair) => { + map[pair[1]] = pair[0]; + return map; +}, {}) as Record; + export const ChangePermsAction = automodAction({ configType: t.type({ target: t.string, channel: tNullable(t.string), - perms: tPartialDictionary(t.keyof(PermissionsBitField.Flags), tNullable(t.boolean)), + perms: tPartialDictionary( + t.union([t.keyof(PermissionsBitField.Flags), t.keyof(legacyPermMap)]), + tNullable(t.boolean), + ), }), defaultConfig: {}, @@ -56,8 +109,10 @@ export const ChangePermsAction = automodAction({ const newPerms: Partial> = {}; for (const key in allow) { - if (typeof actionConfig.perms[key] !== "undefined") { - newPerms[key] = actionConfig.perms[key]; + const legacyKey = realToLegacyMap[key]; + const configEntry = actionConfig.perms[key] ?? actionConfig.perms[legacyKey]; + if (typeof configEntry !== "undefined") { + newPerms[key] = configEntry; continue; } if (allow[key]) { @@ -87,7 +142,8 @@ export const ChangePermsAction = automodAction({ const perms = new PermissionsBitField(role.permissions).serialize(); for (const key in actionConfig.perms) { - perms[key] = actionConfig.perms[key]; + const realKey = legacyPermMap[key] ?? key; + perms[realKey] = actionConfig.perms[key]; } const permsArray = Object.keys(perms).filter((key) => perms[key]); await role.setPermissions(new PermissionsBitField(permsArray)).catch(noop);