From 1c65db528f6edaa06adbe57cd47ed8e637895c1f Mon Sep 17 00:00:00 2001 From: Skillz Date: Mon, 26 Oct 2020 11:40:35 -0400 Subject: [PATCH] slight fix for deleted roles without members inten --- src/controllers/roles.ts | 5 +++++ src/utils/permissions.ts | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/controllers/roles.ts b/src/controllers/roles.ts index 9f889d23b..a1b4586d0 100644 --- a/src/controllers/roles.ts +++ b/src/controllers/roles.ts @@ -30,6 +30,11 @@ export async function handleInternalGuildRoleDelete(data: DiscordPayload) { const cachedRole = guild.roles.get(payload.role_id)!; guild.roles.delete(payload.role_id); eventHandlers.roleDelete?.(guild, cachedRole); + + // For bots without GUILD_MEMBERS member.roles is never updated breaking permissions checking. + guild.members.forEach(member => { + member.roles = member.roles.filter(id => id !== payload.role_id); + }); } export async function handleInternalGuildRoleUpdate(data: DiscordPayload) { diff --git a/src/utils/permissions.ts b/src/utils/permissions.ts index 013c1c56c..049a62089 100644 --- a/src/utils/permissions.ts +++ b/src/utils/permissions.ts @@ -58,6 +58,8 @@ export async function botHasPermission( const permissionBits = member.roles .map((id) => guild.roles.get(id)!) + // Remove any edge case undefined + .filter((r) => r) .reduce((bits, data) => { bits |= BigInt(data.permissions);