diff --git a/backend/src/plugins/Automod/events/runAutomodOnAntiraidLevel.ts b/backend/src/plugins/Automod/events/runAutomodOnAntiraidLevel.ts new file mode 100644 index 00000000..370d6f23 --- /dev/null +++ b/backend/src/plugins/Automod/events/runAutomodOnAntiraidLevel.ts @@ -0,0 +1,16 @@ +import { GuildPluginData } from "knub"; +import { AutomodContext, AutomodPluginType } from "../types"; +import { runAutomod } from "../functions/runAutomod"; + +export async function runAutomodOnAntiraidLevel(pluginData: GuildPluginData, level: string | null) { + const context: AutomodContext = { + timestamp: Date.now(), + antiraid: { + level, + }, + }; + + pluginData.state.queue.add(async () => { + await runAutomod(pluginData, context); + }); +} diff --git a/backend/src/plugins/Automod/functions/setAntiraidLevel.ts b/backend/src/plugins/Automod/functions/setAntiraidLevel.ts index 2d446bf8..cac98286 100644 --- a/backend/src/plugins/Automod/functions/setAntiraidLevel.ts +++ b/backend/src/plugins/Automod/functions/setAntiraidLevel.ts @@ -4,6 +4,7 @@ import { AutomodPluginType } from "../types"; import { LogsPlugin } from "../../Logs/LogsPlugin"; import { LogType } from "../../../data/LogType"; import { stripObjectToScalars } from "../../../utils"; +import { runAutomodOnAntiraidLevel } from "../events/runAutomodOnAntiraidLevel"; export async function setAntiraidLevel( pluginData: GuildPluginData, @@ -13,6 +14,8 @@ export async function setAntiraidLevel( pluginData.state.cachedAntiraidLevel = newLevel; await pluginData.state.antiraidLevels.set(newLevel); + runAutomodOnAntiraidLevel(pluginData, newLevel); + const logs = pluginData.getPlugin(LogsPlugin); if (user) { diff --git a/backend/src/plugins/Automod/triggers/antiraidLevel.ts b/backend/src/plugins/Automod/triggers/antiraidLevel.ts new file mode 100644 index 00000000..15a61dbd --- /dev/null +++ b/backend/src/plugins/Automod/triggers/antiraidLevel.ts @@ -0,0 +1,32 @@ +import * as t from "io-ts"; +import { automodTrigger } from "../helpers"; +import { tNullable } from "../../../utils"; + +// tslint:disable-next-line +interface AntiraidLevelTriggerResult {} + +export const AntiraidLevelTrigger = automodTrigger()({ + configType: t.type({ + level: tNullable(t.string), + }), + + defaultConfig: {}, + + async match({ triggerConfig, context, pluginData }) { + if (!context.antiraid) { + return; + } + + if (context.antiraid.level !== triggerConfig.level) { + return; + } + + return { + extra: {}, + }; + }, + + renderMatchInformation({ matchResult, pluginData, contexts, triggerConfig }) { + return `Antiraid level was set to ...`; + }, +}); diff --git a/backend/src/plugins/Automod/types.ts b/backend/src/plugins/Automod/types.ts index 37202143..f85b8429 100644 --- a/backend/src/plugins/Automod/types.ts +++ b/backend/src/plugins/Automod/types.ts @@ -123,6 +123,9 @@ export interface AutomodContext { type: ModActionType; reason?: string; }; + antiraid?: { + level: string | null; + }; } export interface RecentAction { diff --git a/dashboard/src/components/docs/Counters.vue b/dashboard/src/components/docs/Counters.vue index c8af5159..6720b15d 100644 --- a/dashboard/src/components/docs/Counters.vue +++ b/dashboard/src/components/docs/Counters.vue @@ -23,6 +23,7 @@