diff --git a/backend/src/plugins/Automod/actions/addToCounter.ts b/backend/src/plugins/Automod/actions/addToCounter.ts index fe293e4c..7606f91d 100644 --- a/backend/src/plugins/Automod/actions/addToCounter.ts +++ b/backend/src/plugins/Automod/actions/addToCounter.ts @@ -1,6 +1,7 @@ import * as t from "io-ts"; import { automodAction } from "../helpers"; import { CountersPlugin } from "../../Counters/CountersPlugin"; +import { LogType } from "../../../data/LogType"; export const AddToCounterAction = automodAction({ configType: t.type({ @@ -10,8 +11,15 @@ export const AddToCounterAction = automodAction({ defaultConfig: {}, - async apply({ pluginData, contexts, actionConfig, matchResult }) { + async apply({ pluginData, contexts, actionConfig, matchResult, ruleName }) { const countersPlugin = pluginData.getPlugin(CountersPlugin); + if (!countersPlugin.counterExists(actionConfig.counter)) { + pluginData.state.logs.log(LogType.BOT_ALERT, { + body: `Unknown counter \`${actionConfig.counter}\` in \`add_to_counter\` action of Automod rule \`${ruleName}\``, + }); + return; + } + countersPlugin.changeCounterValue( actionConfig.counter, contexts[0].message?.channel_id || null, diff --git a/backend/src/plugins/Automod/actions/setCounter.ts b/backend/src/plugins/Automod/actions/setCounter.ts index 0dbbaa37..eb63d80d 100644 --- a/backend/src/plugins/Automod/actions/setCounter.ts +++ b/backend/src/plugins/Automod/actions/setCounter.ts @@ -1,6 +1,7 @@ import * as t from "io-ts"; import { automodAction } from "../helpers"; import { CountersPlugin } from "../../Counters/CountersPlugin"; +import { LogType } from "../../../data/LogType"; export const SetCounterAction = automodAction({ configType: t.type({ @@ -10,8 +11,15 @@ export const SetCounterAction = automodAction({ defaultConfig: {}, - async apply({ pluginData, contexts, actionConfig, matchResult }) { + async apply({ pluginData, contexts, actionConfig, matchResult, ruleName }) { const countersPlugin = pluginData.getPlugin(CountersPlugin); + if (!countersPlugin.counterExists(actionConfig.counter)) { + pluginData.state.logs.log(LogType.BOT_ALERT, { + body: `Unknown counter \`${actionConfig.counter}\` in \`add_to_counter\` action of Automod rule \`${ruleName}\``, + }); + return; + } + countersPlugin.setCounterValue( actionConfig.counter, contexts[0].message?.channel_id || null, diff --git a/backend/src/plugins/Counters/CountersPlugin.ts b/backend/src/plugins/Counters/CountersPlugin.ts index 68a5bcea..e9d4ddab 100644 --- a/backend/src/plugins/Counters/CountersPlugin.ts +++ b/backend/src/plugins/Counters/CountersPlugin.ts @@ -24,6 +24,7 @@ import { } from "../../data/entities/CounterTrigger"; import { getPrettyNameForCounter } from "./functions/getPrettyNameForCounter"; import { getPrettyNameForCounterTrigger } from "./functions/getPrettyNameForCounterTrigger"; +import { counterExists } from "./functions/counterExists"; const MAX_COUNTERS = 5; const MAX_TRIGGERS_PER_COUNTER = 5; @@ -115,6 +116,8 @@ export const CountersPlugin = zeppelinGuildPlugin()("counter configPreprocessor, public: { + counterExists: mapToPublicFn(counterExists), + // Change a counter's value by a relative amount, e.g. +5 changeCounterValue: mapToPublicFn(changeCounterValue), diff --git a/backend/src/plugins/Counters/functions/counterExists.ts b/backend/src/plugins/Counters/functions/counterExists.ts new file mode 100644 index 00000000..2da10460 --- /dev/null +++ b/backend/src/plugins/Counters/functions/counterExists.ts @@ -0,0 +1,7 @@ +import { GuildPluginData } from "knub"; +import { CountersPluginType } from "../types"; + +export function counterExists(pluginData: GuildPluginData, counterName: string) { + const config = pluginData.config.get(); + return config.counters[counterName] != null; +}