From f9dd82f2018ff50ad69e45b17cf64ca42fa1ac53 Mon Sep 17 00:00:00 2001 From: Dark <7890309+DarkView@users.noreply.github.com> Date: Thu, 17 Jun 2021 02:30:12 +0200 Subject: [PATCH] Add member_leave automod trigger At least i think so - cant test it until knub changes are done --- backend/src/plugins/Automod/AutomodPlugin.ts | 3 ++- backend/src/plugins/Automod/constants.ts | 1 + ...JoinEvt.ts => RunAutomodOnJoinLeaveEvt.ts} | 22 +++++++++++++++++++ .../Automod/triggers/availableTriggers.ts | 2 ++ .../plugins/Automod/triggers/memberLeave.ts | 20 +++++++++++++++++ backend/src/plugins/Automod/types.ts | 3 ++- 6 files changed, 49 insertions(+), 2 deletions(-) rename backend/src/plugins/Automod/events/{RunAutomodOnJoinEvt.ts => RunAutomodOnJoinLeaveEvt.ts} (58%) create mode 100644 backend/src/plugins/Automod/triggers/memberLeave.ts diff --git a/backend/src/plugins/Automod/AutomodPlugin.ts b/backend/src/plugins/Automod/AutomodPlugin.ts index d57df9ed..eb2484dd 100644 --- a/backend/src/plugins/Automod/AutomodPlugin.ts +++ b/backend/src/plugins/Automod/AutomodPlugin.ts @@ -20,7 +20,7 @@ import { AntiraidClearCmd } from "./commands/AntiraidClearCmd"; import { SetAntiraidCmd } from "./commands/SetAntiraidCmd"; import { ViewAntiraidCmd } from "./commands/ViewAntiraidCmd"; import { runAutomodOnCounterTrigger } from "./events/runAutomodOnCounterTrigger"; -import { RunAutomodOnJoinEvt } from "./events/RunAutomodOnJoinEvt"; +import { RunAutomodOnJoinEvt, RunAutomodOnLeaveEvt } from "./events/RunAutomodOnJoinLeaveEvt"; import { RunAutomodOnMemberUpdate } from "./events/RunAutomodOnMemberUpdate"; import { runAutomodOnMessage } from "./events/runAutomodOnMessage"; import { runAutomodOnModAction } from "./events/runAutomodOnModAction"; @@ -176,6 +176,7 @@ export const AutomodPlugin = zeppelinGuildPlugin()({ events: [ RunAutomodOnJoinEvt, RunAutomodOnMemberUpdate, + RunAutomodOnLeaveEvt, // Messages use message events from SavedMessages, see onLoad below ], diff --git a/backend/src/plugins/Automod/constants.ts b/backend/src/plugins/Automod/constants.ts index d6f30b86..1f46f2e3 100644 --- a/backend/src/plugins/Automod/constants.ts +++ b/backend/src/plugins/Automod/constants.ts @@ -15,4 +15,5 @@ export enum RecentActionType { VoiceChannelMove, MemberJoin, Sticker, + MemberLeave, } diff --git a/backend/src/plugins/Automod/events/RunAutomodOnJoinEvt.ts b/backend/src/plugins/Automod/events/RunAutomodOnJoinLeaveEvt.ts similarity index 58% rename from backend/src/plugins/Automod/events/RunAutomodOnJoinEvt.ts rename to backend/src/plugins/Automod/events/RunAutomodOnJoinLeaveEvt.ts index 17e98ba0..faaff383 100644 --- a/backend/src/plugins/Automod/events/RunAutomodOnJoinEvt.ts +++ b/backend/src/plugins/Automod/events/RunAutomodOnJoinLeaveEvt.ts @@ -25,3 +25,25 @@ export const RunAutomodOnJoinEvt = typedGuildEventListener()( }); }, }); + +export const RunAutomodOnLeaveEvt = typedGuildEventListener()({ + event: "guildMemberRemove", + listener({ pluginData, args: { member } }) { + const context: AutomodContext = { + timestamp: Date.now(), + partialMember: member, + joined: true, + }; + + pluginData.state.queue.add(() => { + pluginData.state.recentActions.push({ + type: RecentActionType.MemberLeave, + context, + count: 1, + identifier: null, + }); + + runAutomod(pluginData, context); + }); + }, +}); diff --git a/backend/src/plugins/Automod/triggers/availableTriggers.ts b/backend/src/plugins/Automod/triggers/availableTriggers.ts index dbd02cc8..e62e811d 100644 --- a/backend/src/plugins/Automod/triggers/availableTriggers.ts +++ b/backend/src/plugins/Automod/triggers/availableTriggers.ts @@ -17,6 +17,7 @@ import { MatchRegexTrigger } from "./matchRegex"; import { MatchWordsTrigger } from "./matchWords"; import { MemberJoinTrigger } from "./memberJoin"; import { MemberJoinSpamTrigger } from "./memberJoinSpam"; +import { MemberLeaveTrigger } from "./memberLeave"; import { MentionSpamTrigger } from "./mentionSpam"; import { MessageSpamTrigger } from "./messageSpam"; import { MuteTrigger } from "./mute"; @@ -72,6 +73,7 @@ export const AvailableTriggers = t.type({ match_links: MatchLinksTrigger.configType, match_attachment_type: MatchAttachmentTypeTrigger.configType, member_join: MemberJoinTrigger.configType, + member_leave: MemberLeaveTrigger.configType, role_added: RoleAddedTrigger.configType, role_removed: RoleRemovedTrigger.configType, diff --git a/backend/src/plugins/Automod/triggers/memberLeave.ts b/backend/src/plugins/Automod/triggers/memberLeave.ts new file mode 100644 index 00000000..9af9bc4f --- /dev/null +++ b/backend/src/plugins/Automod/triggers/memberLeave.ts @@ -0,0 +1,20 @@ +import * as t from "io-ts"; +import { automodTrigger } from "../helpers"; + +export const MemberLeaveTrigger = automodTrigger()({ + configType: t.type({}), + + defaultConfig: {}, + + async match({ pluginData, context, triggerConfig }) { + if (!context.joined || !context.member) { + return; + } + + return {}; + }, + + renderMatchInformation({ pluginData, contexts, triggerConfig }) { + return ""; + }, +}); diff --git a/backend/src/plugins/Automod/types.ts b/backend/src/plugins/Automod/types.ts index 100899bd..3981860d 100644 --- a/backend/src/plugins/Automod/types.ts +++ b/backend/src/plugins/Automod/types.ts @@ -1,4 +1,4 @@ -import { GuildMember, User } from "discord.js"; +import { GuildMember, PartialGuildMember, User } from "discord.js"; import * as t from "io-ts"; import { BasePluginType, CooldownManager } from "knub"; import { SavedMessage } from "../../data/entities/SavedMessage"; @@ -115,6 +115,7 @@ export interface AutomodContext { user?: User; message?: SavedMessage; member?: GuildMember; + partialMember?: GuildMember | PartialGuildMember; joined?: boolean; rolesChanged?: { added?: string[];