diff --git a/src/modules/bot.presenceUpdate.ts b/src/modules/bot.presenceUpdate.ts index ca55e0f..79445ca 100644 --- a/src/modules/bot.presenceUpdate.ts +++ b/src/modules/bot.presenceUpdate.ts @@ -134,11 +134,18 @@ export async function processRoles({ member: GuildMember; activeTemporaryRoles: Selectable[]; }): Promise<{ added: number; removed: number }> { - if (member.user.bot) return { added: 0, removed: 0 }; + const status = { added: 0, removed: 0 }; + if (member.user.bot) return status; + + const userConfig = await getUserConfig(member.id); + if (!userConfig.autorole) return status; + const guildConfig = await getGuildConfig(guild.id); + if (guildConfig.requiredRoleID !== null && !member.roles.cache.has(guildConfig.requiredRoleID)) { + return status; + } const permanentRoleIDsToBeAdded: Set = new Set(); const tempRoleIDsToBeAdded: Set = new Set(); - const status = { added: 0, removed: 0 }; const addRoleHelper = async (roleID: string, change: 'add' | 'remove', permanent: boolean) => { switch ( @@ -222,10 +229,6 @@ export function initPresenceUpdate() { ); return; } - if (!newMember.user || !newMember.guild || newMember.member?.user.bot) return; - - const userConfig = await getUserConfig(newMember.userId); - if (!userConfig.autorole) return; const userIDHash = hashUserID(newMember.userId); const guildConfig = await getGuildConfig(guildID); diff --git a/src/modules/commands/checkRoles.ts b/src/modules/commands/checkRoles.ts index 1695a8f..deb0e4f 100644 --- a/src/modules/commands/checkRoles.ts +++ b/src/modules/commands/checkRoles.ts @@ -32,6 +32,19 @@ export async function checkRoles({ interaction?: CommandInteraction; locale?: string; }) { + if (!guild.members.me?.permissions.has(PermissionsBitField.Flags.ManageRoles)) { + if (interaction && locale) { + //TODO: add message to allow permission + return; + } else { + log.warn( + `MISSING ACCESS: LEFT guild: ${guild.name} (ID: ${guild.id}, OwnerID: ${guild.ownerId}), Permission: MANAGE_ROLES`, + ); + await guild.leave(); + return; + } + } + if (checkrolesCurrentGuilds.has(guild.id)) { log.debug(`checkroles already running on ${guild.name} (${guild.id})`); if (interaction && locale) {