mirror of
https://github.com/ZeppelinBot/Zeppelin.git
synced 2025-03-15 05:41:51 +00:00
fix: clamp counter values in config
This commit is contained in:
parent
48507499bc
commit
6840fb4646
3 changed files with 10 additions and 6 deletions
|
@ -12,7 +12,8 @@ import { CounterValue } from "./entities/CounterValue";
|
|||
const DELETE_UNUSED_COUNTERS_AFTER = 1 * DAYS;
|
||||
const DELETE_UNUSED_COUNTER_TRIGGERS_AFTER = 1 * DAYS;
|
||||
|
||||
const MAX_COUNTER_VALUE = 2147483647; // 2^31-1, for MySQL INT
|
||||
export const MIN_COUNTER_VALUE = 0;
|
||||
export const MAX_COUNTER_VALUE = 2147483647; // 2^31-1, for MySQL INT
|
||||
|
||||
const decayQueue = new Queue();
|
||||
|
||||
|
@ -115,7 +116,9 @@ export class GuildCounters extends BaseGuildRepository {
|
|||
userId = userId || "0";
|
||||
|
||||
const rawUpdate =
|
||||
change >= 0 ? `value = LEAST(value + ${change}, ${MAX_COUNTER_VALUE})` : `value = GREATEST(value ${change}, 0)`;
|
||||
change >= 0
|
||||
? `value = LEAST(value + ${change}, ${MAX_COUNTER_VALUE})`
|
||||
: `value = GREATEST(value ${change}, ${MIN_COUNTER_VALUE})`;
|
||||
|
||||
await this.counterValues.query(
|
||||
`
|
||||
|
@ -173,7 +176,7 @@ export class GuildCounters extends BaseGuildRepository {
|
|||
|
||||
const rawUpdate =
|
||||
decayAmountToApply >= 0
|
||||
? `GREATEST(value - ${decayAmountToApply}, 0)`
|
||||
? `GREATEST(value - ${decayAmountToApply}, ${MIN_COUNTER_VALUE})`
|
||||
: `LEAST(value + ${Math.abs(decayAmountToApply)}, ${MAX_COUNTER_VALUE})`;
|
||||
|
||||
// Using an UPDATE with ORDER BY in an attempt to avoid deadlocks from simultaneous decays
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import z from "zod";
|
||||
import { MAX_COUNTER_VALUE, MIN_COUNTER_VALUE } from "../../../data/GuildCounters";
|
||||
import { zBoundedCharacters } from "../../../utils";
|
||||
import { CountersPlugin } from "../../Counters/CountersPlugin";
|
||||
import { LogsPlugin } from "../../Logs/LogsPlugin";
|
||||
|
@ -7,7 +8,7 @@ import { automodAction } from "../helpers";
|
|||
export const SetCounterAction = automodAction({
|
||||
configSchema: z.strictObject({
|
||||
counter: zBoundedCharacters(0, 100),
|
||||
value: z.number(),
|
||||
value: z.number().min(MIN_COUNTER_VALUE).max(MAX_COUNTER_VALUE),
|
||||
}),
|
||||
|
||||
async apply({ pluginData, contexts, actionConfig, ruleName }) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { EventEmitter } from "events";
|
||||
import { BasePluginType } from "knub";
|
||||
import z from "zod";
|
||||
import { GuildCounters } from "../../data/GuildCounters";
|
||||
import { GuildCounters, MAX_COUNTER_VALUE, MIN_COUNTER_VALUE } from "../../data/GuildCounters";
|
||||
import {
|
||||
CounterTrigger,
|
||||
buildCounterConditionString,
|
||||
|
@ -93,7 +93,7 @@ export const zCounter = z.strictObject({
|
|||
pretty_name: zBoundedCharacters(0, 100).nullable().default(null),
|
||||
per_channel: z.boolean().default(false),
|
||||
per_user: z.boolean().default(false),
|
||||
initial_value: z.number().default(0),
|
||||
initial_value: z.number().min(MIN_COUNTER_VALUE).max(MAX_COUNTER_VALUE).default(0),
|
||||
triggers: zBoundedRecord(z.record(zBoundedCharacters(0, 100), zTriggerInput), 1, MAX_TRIGGERS_PER_COUNTER),
|
||||
decay: z
|
||||
.strictObject({
|
||||
|
|
Loading…
Add table
Reference in a new issue