Add member_leave automod trigger

At least i think so - cant test it until knub changes are done
This commit is contained in:
Dark 2021-06-17 02:30:12 +02:00
parent 2700f4e389
commit f9dd82f201
No known key found for this signature in database
GPG key ID: 384C4B4F5B1E25A8
6 changed files with 49 additions and 2 deletions

View file

@ -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<AutomodPluginType>()({
events: [
RunAutomodOnJoinEvt,
RunAutomodOnMemberUpdate,
RunAutomodOnLeaveEvt,
// Messages use message events from SavedMessages, see onLoad below
],

View file

@ -15,4 +15,5 @@ export enum RecentActionType {
VoiceChannelMove,
MemberJoin,
Sticker,
MemberLeave,
}

View file

@ -25,3 +25,25 @@ export const RunAutomodOnJoinEvt = typedGuildEventListener<AutomodPluginType>()(
});
},
});
export const RunAutomodOnLeaveEvt = typedGuildEventListener<AutomodPluginType>()({
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);
});
},
});

View file

@ -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,

View file

@ -0,0 +1,20 @@
import * as t from "io-ts";
import { automodTrigger } from "../helpers";
export const MemberLeaveTrigger = automodTrigger<unknown>()({
configType: t.type({}),
defaultConfig: {},
async match({ pluginData, context, triggerConfig }) {
if (!context.joined || !context.member) {
return;
}
return {};
},
renderMatchInformation({ pluginData, contexts, triggerConfig }) {
return "";
},
});

View file

@ -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[];