diff options
| author | Fuwn <[email protected]> | 2025-11-06 14:35:01 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-11-06 14:35:01 -0800 |
| commit | 5f0abfcf3e7f765aababc088839101639007e029 (patch) | |
| tree | a4a4f8286ff527535cea985ec4b3f6cf3383c2f8 | |
| parent | feat(commands:delete): Improve log meshing (diff) | |
| download | umabotdiscord-5f0abfcf3e7f765aababc088839101639007e029.tar.xz umabotdiscord-5f0abfcf3e7f765aababc088839101639007e029.zip | |
feat(gateway:listeners): Add privileged access monitoring
| -rw-r--r-- | packages/gateway/src/listeners/index.ts | 2 | ||||
| -rw-r--r-- | packages/gateway/src/listeners/roleExclusion.ts | 44 |
2 files changed, 46 insertions, 0 deletions
diff --git a/packages/gateway/src/listeners/index.ts b/packages/gateway/src/listeners/index.ts index 4bb6843..46ae30c 100644 --- a/packages/gateway/src/listeners/index.ts +++ b/packages/gateway/src/listeners/index.ts @@ -11,6 +11,7 @@ import { handleTimeoutMirroring } from "./timeoutMirroring"; import { handleAutoDeletion } from "./autoDeletion"; import { handleEmojiUsageTracking } from "./emojiUsageTracking"; import { handleBotMessageLogger } from "./botMessageLogger"; +import { handleRoleExclusion } from "./roleExclusion"; // import { handleMediaModeration } from "./mediaModeration"; export const handleListeners = (client: Client) => { @@ -26,5 +27,6 @@ export const handleListeners = (client: Client) => { handleAutoDeletion(client); handleEmojiUsageTracking(client); handleBotMessageLogger(client); + handleRoleExclusion(client); // handleMediaModeration(client); }; diff --git a/packages/gateway/src/listeners/roleExclusion.ts b/packages/gateway/src/listeners/roleExclusion.ts new file mode 100644 index 0000000..b87d260 --- /dev/null +++ b/packages/gateway/src/listeners/roleExclusion.ts @@ -0,0 +1,44 @@ +import { Client, Events } from "discord.js"; +import { CENTRAL_GUILD_ID } from "../constants"; +import { logUnexpectedDiscordAPIError } from "../utilities"; + +const PRIVILEGED_ACCESS_ROLE_ID = "1423213971422580736"; +const REMOVED_FROM_PRIVILEGED_ACCESS_ROLE_ID = "1425706904478289928"; + +export const handleRoleExclusion = (client: Client) => { + client.on(Events.GuildMemberUpdate, async (oldMember, newMember) => { + if (newMember.guild.id !== CENTRAL_GUILD_ID) return; + + const oldRoles = oldMember.roles.cache; + const newRoles = newMember.roles.cache; + const removedRoleAdded = + !oldRoles.has(REMOVED_FROM_PRIVILEGED_ACCESS_ROLE_ID) && + newRoles.has(REMOVED_FROM_PRIVILEGED_ACCESS_ROLE_ID); + const privilegedRoleAdded = + !oldRoles.has(PRIVILEGED_ACCESS_ROLE_ID) && + newRoles.has(PRIVILEGED_ACCESS_ROLE_ID); + + try { + if (removedRoleAdded && newRoles.has(PRIVILEGED_ACCESS_ROLE_ID)) { + const roleToRemove = newMember.guild.roles.cache.get( + PRIVILEGED_ACCESS_ROLE_ID, + ); + + if (roleToRemove) await newMember.roles.remove(roleToRemove); + } + + if ( + privilegedRoleAdded && + newRoles.has(REMOVED_FROM_PRIVILEGED_ACCESS_ROLE_ID) + ) { + const roleToRemove = newMember.guild.roles.cache.get( + PRIVILEGED_ACCESS_ROLE_ID, + ); + + if (roleToRemove) await newMember.roles.remove(roleToRemove); + } + } catch (error) { + logUnexpectedDiscordAPIError(error); + } + }); +}; |