summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-11-06 14:35:01 -0800
committerFuwn <[email protected]>2025-11-06 14:35:01 -0800
commit5f0abfcf3e7f765aababc088839101639007e029 (patch)
treea4a4f8286ff527535cea985ec4b3f6cf3383c2f8
parentfeat(commands:delete): Improve log meshing (diff)
downloadumabotdiscord-5f0abfcf3e7f765aababc088839101639007e029.tar.xz
umabotdiscord-5f0abfcf3e7f765aababc088839101639007e029.zip
feat(gateway:listeners): Add privileged access monitoring
-rw-r--r--packages/gateway/src/listeners/index.ts2
-rw-r--r--packages/gateway/src/listeners/roleExclusion.ts44
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);
+ }
+ });
+};