From 74cc58aeaab7c4fcd80e916035f19ec199e9c4cb Mon Sep 17 00:00:00 2001 From: Dragory <2606411+Dragory@users.noreply.github.com> Date: Thu, 29 Apr 2021 01:41:02 +0300 Subject: [PATCH] Add missing role locks for unmutes --- backend/src/plugins/Mutes/functions/clearExpiredMutes.ts | 9 ++++++++- backend/src/plugins/Mutes/functions/unmuteUser.ts | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/backend/src/plugins/Mutes/functions/clearExpiredMutes.ts b/backend/src/plugins/Mutes/functions/clearExpiredMutes.ts index e99f2b73..43acdace 100644 --- a/backend/src/plugins/Mutes/functions/clearExpiredMutes.ts +++ b/backend/src/plugins/Mutes/functions/clearExpiredMutes.ts @@ -3,6 +3,7 @@ import { MutesPluginType } from "../types"; import { LogType } from "../../../data/LogType"; import { resolveMember, stripObjectToScalars, UnknownUser } from "../../../utils"; import { MemberOptions } from "eris"; +import { memberRolesLock } from "../../../utils/lockNameHelpers"; export async function clearExpiredMutes(pluginData: GuildPluginData) { const expiredMutes = await pluginData.state.mutes.getExpiredMutes(); @@ -11,9 +12,12 @@ export async function clearExpiredMutes(pluginData: GuildPluginData r !== muteRole); } if (mute.roles_to_restore) { const memberOptions: MemberOptions = {}; @@ -21,8 +25,11 @@ export async function clearExpiredMutes(pluginData: GuildPluginData x !== muteRole && guildRoles.has(x))]), ); - member.edit(memberOptions); + await member.edit(memberOptions); + member.roles = memberOptions.roles; } + + lock.unlock(); } catch (e) { pluginData.state.serverLogs.log(LogType.BOT_ALERT, { body: `Failed to remove mute role from {userMention(member)}`, diff --git a/backend/src/plugins/Mutes/functions/unmuteUser.ts b/backend/src/plugins/Mutes/functions/unmuteUser.ts index dce5cc06..53b7cabe 100644 --- a/backend/src/plugins/Mutes/functions/unmuteUser.ts +++ b/backend/src/plugins/Mutes/functions/unmuteUser.ts @@ -8,6 +8,7 @@ import { CasesPlugin } from "../../Cases/CasesPlugin"; import { CaseTypes } from "../../../data/CaseTypes"; import { LogType } from "../../../data/LogType"; import { MemberOptions } from "eris"; +import { memberRolesLock } from "../../../utils/lockNameHelpers"; export async function unmuteUser( pluginData: GuildPluginData, @@ -32,9 +33,12 @@ export async function unmuteUser( } else { // Unmute immediately if (member) { + const lock = await pluginData.locks.acquire(memberRolesLock(member)); + const muteRole = pluginData.config.get().mute_role; if (muteRole && member.roles.includes(muteRole)) { await member.removeRole(muteRole); + member.roles = member.roles.filter(r => r !== muteRole); } if (existingMute?.roles_to_restore) { const memberOptions: MemberOptions = {}; @@ -42,8 +46,11 @@ export async function unmuteUser( memberOptions.roles = Array.from( new Set([...existingMute.roles_to_restore, ...member.roles.filter(x => x !== muteRole && guildRoles.has(x))]), ); - member.edit(memberOptions); + await member.edit(memberOptions); + member.roles = memberOptions.roles; } + + lock.unlock(); } else { // tslint:disable-next-line:no-console console.warn(