mirror of
https://github.com/ZeppelinBot/Zeppelin.git
synced 2025-05-10 12:25:02 +00:00
Allow Automod to distinguish whether mod actions are manual or automatic (#179)
This commit is contained in:
parent
90b6f4bc86
commit
51db942d97
18 changed files with 106 additions and 32 deletions
|
@ -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,7 +257,11 @@ export const AutomodPlugin = zeppelinGuildPlugin<AutomodPluginType>()("automod",
|
|||
|
||||
const mutesEvents = pluginData.getPlugin(MutesPlugin).getEventEmitter();
|
||||
pluginData.state.mutesListeners = new Map();
|
||||
pluginData.state.mutesListeners.set("mute", (userId: string) => runAutomodOnModAction(pluginData, "mute", userId));
|
||||
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),
|
||||
);
|
||||
|
|
|
@ -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,
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
|
|
|
@ -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 });
|
||||
}
|
||||
},
|
||||
});
|
||||
|
|
|
@ -49,7 +49,14 @@ export const MuteAction = automodAction({
|
|||
const mutes = pluginData.getPlugin(MutesPlugin);
|
||||
for (const userId of userIdsToMute) {
|
||||
try {
|
||||
await mutes.muteUser(userId, duration, reason, { contactMethods, caseArgs }, rolesToRemove, rolesToRestore);
|
||||
await mutes.muteUser(
|
||||
userId,
|
||||
duration,
|
||||
reason,
|
||||
{ contactMethods, caseArgs, isAutomodAction: true },
|
||||
rolesToRemove,
|
||||
rolesToRestore,
|
||||
);
|
||||
} catch (e) {
|
||||
if (e instanceof RecoverablePluginError && e.code === ERRORS.NO_MUTE_ROLE_IN_CONFIG) {
|
||||
pluginData.getPlugin(LogsPlugin).log(LogType.BOT_ALERT, {
|
||||
|
|
|
@ -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 });
|
||||
}
|
||||
},
|
||||
});
|
||||
|
|
|
@ -9,6 +9,7 @@ export async function runAutomodOnModAction(
|
|||
modAction: ModActionType,
|
||||
userId: string,
|
||||
reason?: string,
|
||||
isAutomodAction: boolean = false,
|
||||
) {
|
||||
const user = await resolveUser(pluginData.client, userId);
|
||||
|
||||
|
@ -18,6 +19,7 @@ export async function runAutomodOnModAction(
|
|||
modAction: {
|
||||
type: modAction,
|
||||
reason,
|
||||
isAutomodAction,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -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: {},
|
||||
|
|
|
@ -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: {},
|
||||
|
|
|
@ -5,13 +5,24 @@ import { automodTrigger } from "../helpers";
|
|||
interface MuteTriggerResultType {}
|
||||
|
||||
export const MuteTrigger = automodTrigger<MuteTriggerResultType>()({
|
||||
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 !== "mute") {
|
||||
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: {},
|
||||
|
|
|
@ -5,13 +5,24 @@ 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;
|
||||
}
|
||||
// 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: {},
|
||||
|
|
|
@ -122,6 +122,7 @@ export interface AutomodContext {
|
|||
modAction?: {
|
||||
type: ModActionType;
|
||||
reason?: string;
|
||||
isAutomodAction: boolean;
|
||||
};
|
||||
antiraid?: {
|
||||
level: string | null;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue