3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-05-20 16:25:03 +00:00

Extend distinction to other case types automod can execute

This commit is contained in:
Dark 2021-04-03 19:46:45 +02:00
parent 254457997d
commit 067149c9fc
No known key found for this signature in database
GPG key ID: 384C4B4F5B1E25A8
13 changed files with 80 additions and 29 deletions

View file

@ -235,14 +235,20 @@ export const AutomodPlugin = zeppelinGuildPlugin<AutomodPluginType>()("automod",
pluginData.state.modActionsListeners.set("note", (userId: string) =>
runAutomodOnModAction(pluginData, "note", userId),
);
pluginData.state.modActionsListeners.set("warn", (userId: string) =>
runAutomodOnModAction(pluginData, "warn", userId),
pluginData.state.modActionsListeners.set(
"warn",
(userId: string, reason: string | undefined, isAutomodAction: boolean) =>
runAutomodOnModAction(pluginData, "warn", userId, reason, isAutomodAction),
);
pluginData.state.modActionsListeners.set("kick", (userId: string) =>
runAutomodOnModAction(pluginData, "kick", userId),
pluginData.state.modActionsListeners.set(
"kick",
(userId: string, reason: string | undefined, isAutomodAction: boolean) =>
runAutomodOnModAction(pluginData, "kick", userId, reason, isAutomodAction),
);
pluginData.state.modActionsListeners.set("ban", (userId: string) =>
runAutomodOnModAction(pluginData, "ban", userId),
pluginData.state.modActionsListeners.set(
"ban",
(userId: string, reason: string | undefined, isAutomodAction: boolean) =>
runAutomodOnModAction(pluginData, "ban", userId, reason, isAutomodAction),
);
pluginData.state.modActionsListeners.set("unban", (userId: string) =>
runAutomodOnModAction(pluginData, "unban", userId),
@ -251,8 +257,10 @@ export const AutomodPlugin = zeppelinGuildPlugin<AutomodPluginType>()("automod",
const mutesEvents = pluginData.getPlugin(MutesPlugin).getEventEmitter();
pluginData.state.mutesListeners = new Map();
pluginData.state.mutesListeners.set("mute", (userId: string, reason: string, isAutomodAction: boolean) =>
runAutomodOnModAction(pluginData, "mute", userId, reason, isAutomodAction),
pluginData.state.mutesListeners.set(
"mute",
(userId: string, reason: string | undefined, isAutomodAction: boolean) =>
runAutomodOnModAction(pluginData, "mute", userId, reason, isAutomodAction),
);
pluginData.state.mutesListeners.set("unmute", (userId: string) =>
runAutomodOnModAction(pluginData, "unmute", userId),

View file

@ -33,7 +33,12 @@ export const BanAction = automodAction({
const modActions = pluginData.getPlugin(ModActionsPlugin);
for (const userId of userIdsToBan) {
await modActions.banUserId(userId, reason, { contactMethods, caseArgs, deleteMessageDays });
await modActions.banUserId(userId, reason, {
contactMethods,
caseArgs,
deleteMessageDays,
isAutomodAction: true,
});
}
},
});

View file

@ -33,7 +33,7 @@ export const KickAction = automodAction({
const modActions = pluginData.getPlugin(ModActionsPlugin);
for (const member of membersToKick) {
if (!member) continue;
await modActions.kickMember(member, reason, { contactMethods, caseArgs });
await modActions.kickMember(member, reason, { contactMethods, caseArgs, isAutomodAction: true });
}
},
});

View file

@ -33,7 +33,7 @@ export const WarnAction = automodAction({
const modActions = pluginData.getPlugin(ModActionsPlugin);
for (const member of membersToWarn) {
if (!member) continue;
await modActions.warnMember(member, reason, { contactMethods, caseArgs });
await modActions.warnMember(member, reason, { contactMethods, caseArgs, isAutomodAction: true });
}
},
});

View file

@ -5,13 +5,25 @@ import { automodTrigger } from "../helpers";
interface BanTriggerResultType {}
export const BanTrigger = automodTrigger<BanTriggerResultType>()({
configType: t.type({}),
defaultConfig: {},
configType: t.type({
manual: t.boolean,
automatic: t.boolean,
}),
async match({ context }) {
defaultConfig: {
manual: true,
automatic: true,
},
async match({ context, triggerConfig }) {
if (context.modAction?.type !== "ban") {
return;
}
console.log(context);
// If automatic && automatic turned off -> return
if (context.modAction.isAutomodAction && !triggerConfig.automatic) return;
// If manual && manual turned off -> return
if (!context.modAction.isAutomodAction && !triggerConfig.manual) return;
return {
extra: {},

View file

@ -5,13 +5,24 @@ import { automodTrigger } from "../helpers";
interface KickTriggerResultType {}
export const KickTrigger = automodTrigger<KickTriggerResultType>()({
configType: t.type({}),
defaultConfig: {},
configType: t.type({
manual: t.boolean,
automatic: t.boolean,
}),
async match({ context }) {
defaultConfig: {
manual: true,
automatic: true,
},
async match({ context, triggerConfig }) {
if (context.modAction?.type !== "kick") {
return;
}
// If automatic && automatic turned off -> return
if (context.modAction.isAutomodAction && !triggerConfig.automatic) return;
// If manual && manual turned off -> return
if (!context.modAction.isAutomodAction && !triggerConfig.manual) return;
return {
extra: {},

View file

@ -5,13 +5,25 @@ import { automodTrigger } from "../helpers";
interface WarnTriggerResultType {}
export const WarnTrigger = automodTrigger<WarnTriggerResultType>()({
configType: t.type({}),
defaultConfig: {},
configType: t.type({
manual: t.boolean,
automatic: t.boolean,
}),
async match({ context }) {
defaultConfig: {
manual: true,
automatic: true,
},
async match({ context, triggerConfig }) {
if (context.modAction?.type !== "warn") {
return;
}
console.log(context);
// If automatic && automatic turned off -> return
if (context.modAction.isAutomodAction && !triggerConfig.automatic) return;
// If manual && manual turned off -> return
if (!context.modAction.isAutomodAction && !triggerConfig.manual) return;
return {
extra: {},

View file

@ -112,7 +112,5 @@ export const WarnCmd = modActionsCmd({
msg.channel,
`Warned **${memberToWarn.user.username}#${memberToWarn.user.discriminator}** (Case #${warnResult.case.case_number})${messageResultText}`,
);
pluginData.state.events.emit("warn", user.id, reason);
},
});

View file

@ -127,7 +127,7 @@ export async function banUserId(
banTime: banTime ? humanizeDuration(banTime) : null,
});
pluginData.state.events.emit("ban", user.id, reason);
pluginData.state.events.emit("ban", user.id, reason, banOptions.isAutomodAction);
return {
status: "success",

View file

@ -85,7 +85,7 @@ export async function kickMember(
reason,
});
pluginData.state.events.emit("kick", member.id, reason);
pluginData.state.events.emit("kick", member.id, reason, kickOptions.isAutomodAction);
return {
status: "success",

View file

@ -82,6 +82,8 @@ export async function warnMember(
reason,
});
pluginData.state.events.emit("warn", member.id, reason, warnOptions.isAutomodAction);
return {
status: "success",
case: createdCase,

View file

@ -48,9 +48,9 @@ export type TConfigSchema = t.TypeOf<typeof ConfigSchema>;
export interface ModActionsEvents {
note: (userId: string, reason?: string) => void;
warn: (userId: string, reason?: string) => void;
kick: (userId: string, reason?: string) => void;
ban: (userId: string, reason?: string) => void;
warn: (userId: string, reason?: string, isAutomodAction?: boolean) => void;
kick: (userId: string, reason?: string, isAutomodAction?: boolean) => void;
ban: (userId: string, reason?: string, isAutomodAction?: boolean) => void;
unban: (userId: string, reason?: string) => void;
// mute/unmute are in the Mutes plugin
}
@ -126,17 +126,20 @@ export interface WarnOptions {
caseArgs?: Partial<CaseArgs> | null;
contactMethods?: UserNotificationMethod[] | null;
retryPromptChannel?: TextChannel | null;
isAutomodAction?: boolean;
}
export interface KickOptions {
caseArgs?: Partial<CaseArgs>;
contactMethods?: UserNotificationMethod[];
isAutomodAction?: boolean;
}
export interface BanOptions {
caseArgs?: Partial<CaseArgs>;
contactMethods?: UserNotificationMethod[];
deleteMessageDays?: number;
isAutomodAction?: boolean;
}
export type ModActionType = "note" | "warn" | "mute" | "unmute" | "kick" | "ban" | "unban";

View file

@ -34,8 +34,8 @@ export const ConfigSchema = t.type({
export type TConfigSchema = t.TypeOf<typeof ConfigSchema>;
export interface MutesEvents {
mute: (userId: string, reason?: string, manual?: boolean) => void;
unmute: (userId: string, reason?: string, manual?: boolean) => void;
mute: (userId: string, reason?: string, isAutomodAction?: boolean) => void;
unmute: (userId: string, reason?: string) => void;
}
export interface MutesEventEmitter extends EventEmitter {