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_COUNTERS_AFTER = 1 * DAYS;
|
||||||
const DELETE_UNUSED_COUNTER_TRIGGERS_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();
|
const decayQueue = new Queue();
|
||||||
|
|
||||||
|
@ -115,7 +116,9 @@ export class GuildCounters extends BaseGuildRepository {
|
||||||
userId = userId || "0";
|
userId = userId || "0";
|
||||||
|
|
||||||
const rawUpdate =
|
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(
|
await this.counterValues.query(
|
||||||
`
|
`
|
||||||
|
@ -173,7 +176,7 @@ export class GuildCounters extends BaseGuildRepository {
|
||||||
|
|
||||||
const rawUpdate =
|
const rawUpdate =
|
||||||
decayAmountToApply >= 0
|
decayAmountToApply >= 0
|
||||||
? `GREATEST(value - ${decayAmountToApply}, 0)`
|
? `GREATEST(value - ${decayAmountToApply}, ${MIN_COUNTER_VALUE})`
|
||||||
: `LEAST(value + ${Math.abs(decayAmountToApply)}, ${MAX_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
|
// Using an UPDATE with ORDER BY in an attempt to avoid deadlocks from simultaneous decays
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import z from "zod";
|
import z from "zod";
|
||||||
|
import { MAX_COUNTER_VALUE, MIN_COUNTER_VALUE } from "../../../data/GuildCounters";
|
||||||
import { zBoundedCharacters } from "../../../utils";
|
import { zBoundedCharacters } from "../../../utils";
|
||||||
import { CountersPlugin } from "../../Counters/CountersPlugin";
|
import { CountersPlugin } from "../../Counters/CountersPlugin";
|
||||||
import { LogsPlugin } from "../../Logs/LogsPlugin";
|
import { LogsPlugin } from "../../Logs/LogsPlugin";
|
||||||
|
@ -7,7 +8,7 @@ import { automodAction } from "../helpers";
|
||||||
export const SetCounterAction = automodAction({
|
export const SetCounterAction = automodAction({
|
||||||
configSchema: z.strictObject({
|
configSchema: z.strictObject({
|
||||||
counter: zBoundedCharacters(0, 100),
|
counter: zBoundedCharacters(0, 100),
|
||||||
value: z.number(),
|
value: z.number().min(MIN_COUNTER_VALUE).max(MAX_COUNTER_VALUE),
|
||||||
}),
|
}),
|
||||||
|
|
||||||
async apply({ pluginData, contexts, actionConfig, ruleName }) {
|
async apply({ pluginData, contexts, actionConfig, ruleName }) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { EventEmitter } from "events";
|
import { EventEmitter } from "events";
|
||||||
import { BasePluginType } from "knub";
|
import { BasePluginType } from "knub";
|
||||||
import z from "zod";
|
import z from "zod";
|
||||||
import { GuildCounters } from "../../data/GuildCounters";
|
import { GuildCounters, MAX_COUNTER_VALUE, MIN_COUNTER_VALUE } from "../../data/GuildCounters";
|
||||||
import {
|
import {
|
||||||
CounterTrigger,
|
CounterTrigger,
|
||||||
buildCounterConditionString,
|
buildCounterConditionString,
|
||||||
|
@ -93,7 +93,7 @@ export const zCounter = z.strictObject({
|
||||||
pretty_name: zBoundedCharacters(0, 100).nullable().default(null),
|
pretty_name: zBoundedCharacters(0, 100).nullable().default(null),
|
||||||
per_channel: z.boolean().default(false),
|
per_channel: z.boolean().default(false),
|
||||||
per_user: 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),
|
triggers: zBoundedRecord(z.record(zBoundedCharacters(0, 100), zTriggerInput), 1, MAX_TRIGGERS_PER_COUNTER),
|
||||||
decay: z
|
decay: z
|
||||||
.strictObject({
|
.strictObject({
|
||||||
|
|
Loading…
Add table
Reference in a new issue