From 5d579446c5b2578270ebc74b435e133d05f66308 Mon Sep 17 00:00:00 2001 From: Dragory <2606411+Dragory@users.noreply.github.com> Date: Wed, 30 Sep 2020 01:08:42 +0300 Subject: [PATCH] Fix several role race conditions --- backend/src/plugins/Automod/actions/addRoles.ts | 4 ++++ .../src/plugins/Mutes/events/ReapplyActiveMuteOnJoinEvt.ts | 3 +++ 2 files changed, 7 insertions(+) diff --git a/backend/src/plugins/Automod/actions/addRoles.ts b/backend/src/plugins/Automod/actions/addRoles.ts index b3fb6be0..8af1b081 100644 --- a/backend/src/plugins/Automod/actions/addRoles.ts +++ b/backend/src/plugins/Automod/actions/addRoles.ts @@ -64,11 +64,15 @@ export const AddRolesAction = automodAction({ return; } + const memberRolesLock = await pluginData.locks.acquire(`member-roles-${member.id}`); + const rolesArr = Array.from(memberRoles.values()); await member.edit({ roles: rolesArr, }); member.roles = rolesArr; // Make sure we know of the new roles internally as well + + memberRolesLock.unlock(); }), ); }, diff --git a/backend/src/plugins/Mutes/events/ReapplyActiveMuteOnJoinEvt.ts b/backend/src/plugins/Mutes/events/ReapplyActiveMuteOnJoinEvt.ts index 13eeafc5..cd6c0985 100644 --- a/backend/src/plugins/Mutes/events/ReapplyActiveMuteOnJoinEvt.ts +++ b/backend/src/plugins/Mutes/events/ReapplyActiveMuteOnJoinEvt.ts @@ -12,7 +12,10 @@ export const ReapplyActiveMuteOnJoinEvt = eventListener()( const mute = await pluginData.state.mutes.findExistingMuteForUserId(member.id); if (mute) { const muteRole = pluginData.config.get().mute_role; + + const memberRolesLock = await pluginData.locks.acquire(`member-roles-${member.id}`); await member.addRole(muteRole); + memberRolesLock.unlock(); pluginData.state.serverLogs.log(LogType.MEMBER_MUTE_REJOIN, { member: stripObjectToScalars(member, ["user", "roles"]),