diff --git a/backend/src/plugins/Mutes/MutesPlugin.ts b/backend/src/plugins/Mutes/MutesPlugin.ts index 597d450b..1d477892 100644 --- a/backend/src/plugins/Mutes/MutesPlugin.ts +++ b/backend/src/plugins/Mutes/MutesPlugin.ts @@ -15,6 +15,8 @@ import { muteUser } from "./functions/muteUser"; import { unmuteUser } from "./functions/unmuteUser"; import { CaseArgs } from "../Cases/types"; import { Member } from "eris"; +import { ClearActiveMuteOnMemberBanEvt } from "./events/ClearActiveMuteOnMemberBanEvt"; +import { ReapplyActiveMuteOnJoinEvt } from "./events/ReapplyActiveMuteOnJoinEvt"; const defaultOptions = { config: { @@ -70,6 +72,8 @@ export const MutesPlugin = zeppelinPlugin()("mutes", { // prettier-ignore events: [ ClearActiveMuteOnRoleRemovalEvt, + ClearActiveMuteOnMemberBanEvt, + ReapplyActiveMuteOnJoinEvt, ], public: { diff --git a/backend/src/plugins/Mutes/events/ClearActiveMuteOnMemberBanEvt.ts b/backend/src/plugins/Mutes/events/ClearActiveMuteOnMemberBanEvt.ts new file mode 100644 index 00000000..ff2756e3 --- /dev/null +++ b/backend/src/plugins/Mutes/events/ClearActiveMuteOnMemberBanEvt.ts @@ -0,0 +1,15 @@ +import { eventListener } from "knub"; +import { MutesPluginType } from "../types"; + +/** + * Clear active mute from the member if the member is banned + */ +export const ClearActiveMuteOnMemberBanEvt = eventListener()( + "guildBanAdd", + async ({ pluginData, args: { user } }) => { + const mute = await pluginData.state.mutes.findExistingMuteForUserId(user.id); + if (mute) { + pluginData.state.mutes.clear(user.id); + } + }, +); diff --git a/backend/src/plugins/Mutes/events/ReapplyActiveMuteOnJoinEvt.ts b/backend/src/plugins/Mutes/events/ReapplyActiveMuteOnJoinEvt.ts new file mode 100644 index 00000000..13eeafc5 --- /dev/null +++ b/backend/src/plugins/Mutes/events/ReapplyActiveMuteOnJoinEvt.ts @@ -0,0 +1,22 @@ +import { eventListener } from "knub"; +import { MutesPluginType } from "../types"; +import { LogType } from "src/data/LogType"; +import { stripObjectToScalars } from "src/utils"; + +/** + * Reapply active mutes on join + */ +export const ReapplyActiveMuteOnJoinEvt = eventListener()( + "guildMemberAdd", + async ({ pluginData, args: { member } }) => { + const mute = await pluginData.state.mutes.findExistingMuteForUserId(member.id); + if (mute) { + const muteRole = pluginData.config.get().mute_role; + await member.addRole(muteRole); + + pluginData.state.serverLogs.log(LogType.MEMBER_MUTE_REJOIN, { + member: stripObjectToScalars(member, ["user", "roles"]), + }); + } + }, +);