Skip to content

Commit e196653

Browse files
authored
Merge pull request #503 from rubyowo/feat/yearsandmonths_next
feat: fix leap year rules, add year and month to the delay string
2 parents 504ffd7 + 8110931 commit e196653

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+175
-102
lines changed

backend/src/data/GuildCases.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { In, InsertResult, Repository } from "typeorm";
2-
import { FindOptionsWhere } from "typeorm";
1+
import { FindOptionsWhere, In, InsertResult, Repository } from "typeorm";
32
import { Queue } from "../Queue.js";
43
import { chunkArray } from "../utils.js";
54
import { BaseGuildRepository } from "./BaseGuildRepository.js";

backend/src/humanizeDuration.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import humanizeduration from "humanize-duration";
2+
3+
export const delayStringMultipliers = {
4+
y: 1000 * 60 * 60 * 24 * (365 + 1 / 4 - 1 / 100 + 1 / 400),
5+
mo: (1000 * 60 * 60 * 24 * (365 + 1 / 4 - 1 / 100 + 1 / 400)) / 12,
6+
w: 1000 * 60 * 60 * 24 * 7,
7+
d: 1000 * 60 * 60 * 24,
8+
h: 1000 * 60 * 60,
9+
m: 1000 * 60,
10+
s: 1000,
11+
x: 1,
12+
};
13+
14+
export const humanizeDurationShort = humanizeduration.humanizer({
15+
language: "shortEn",
16+
languages: {
17+
shortEn: {
18+
y: () => "y",
19+
mo: () => "mo",
20+
w: () => "w",
21+
d: () => "d",
22+
h: () => "h",
23+
m: () => "m",
24+
s: () => "s",
25+
ms: () => "ms",
26+
},
27+
},
28+
spacer: "",
29+
unitMeasures: delayStringMultipliers,
30+
});
31+
32+
export const humanizeDuration = humanizeduration.humanizer({
33+
unitMeasures: delayStringMultipliers,
34+
});

backend/src/humanizeDurationShort.ts

Lines changed: 0 additions & 18 deletions
This file was deleted.

backend/src/index.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,15 @@ import { availableGlobalPlugins, availableGuildPlugins } from "./plugins/availab
4444
import { setProfiler } from "./profiler.js";
4545
import { logRateLimit } from "./rateLimitStats.js";
4646
import { startUptimeCounter } from "./uptime.js";
47-
import { MINUTES, SECONDS, errorMessage, isDiscordAPIError, isDiscordHTTPError, sleep, successMessage } from "./utils.js";
47+
import {
48+
MINUTES,
49+
SECONDS,
50+
errorMessage,
51+
isDiscordAPIError,
52+
isDiscordHTTPError,
53+
sleep,
54+
successMessage,
55+
} from "./utils.js";
4856
import { DecayingCounter } from "./utils/DecayingCounter.js";
4957
import { enableProfiling } from "./utils/easyProfiler.js";
5058
import { loadYamlSafely } from "./utils/loadYamlSafely.js";

backend/src/plugins/Automod/functions/applyCooldown.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@ import { GuildPluginData } from "knub";
22
import { convertDelayStringToMS } from "../../../utils.js";
33
import { AutomodContext, AutomodPluginType, TRule } from "../types.js";
44

5-
export function applyCooldown(pluginData: GuildPluginData<AutomodPluginType>, rule: TRule, ruleName: string, context: AutomodContext) {
5+
export function applyCooldown(
6+
pluginData: GuildPluginData<AutomodPluginType>,
7+
rule: TRule,
8+
ruleName: string,
9+
context: AutomodContext,
10+
) {
611
const cooldownKey = `${ruleName}-${context.user?.id}`;
712

813
const cooldownTime = convertDelayStringToMS(rule.cooldown, "s");

backend/src/plugins/Automod/functions/checkCooldown.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import { GuildPluginData } from "knub";
22
import { AutomodContext, AutomodPluginType, TRule } from "../types.js";
33

4-
export function checkCooldown(pluginData: GuildPluginData<AutomodPluginType>, rule: TRule, ruleName: string, context: AutomodContext) {
4+
export function checkCooldown(
5+
pluginData: GuildPluginData<AutomodPluginType>,
6+
rule: TRule,
7+
ruleName: string,
8+
context: AutomodContext,
9+
) {
510
const cooldownKey = `${ruleName}-${context.user?.id}`;
611

712
return pluginData.state.cooldownManager.isOnCooldown(cooldownKey);

backend/src/plugins/Automod/functions/createMessageSpamTrigger.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import z from "zod";
22
import { SavedMessage } from "../../../data/entities/SavedMessage.js";
3-
import { humanizeDurationShort } from "../../../humanizeDurationShort.js";
3+
import { humanizeDurationShort } from "../../../humanizeDuration.js";
44
import { getBaseUrl } from "../../../pluginUtils.js";
55
import { convertDelayStringToMS, sorter, zDelayString } from "../../../utils.js";
66
import { RecentActionType } from "../constants.js";

backend/src/plugins/Automod/triggers/matchAttachmentType.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,20 @@ const baseConfig = z.strictObject({
1313
filetype_blacklist: z.array(z.string().max(32)).max(255).default([]),
1414
filetype_whitelist: z.array(z.string().max(32)).max(255).default([]),
1515
});
16-
const configWithWhitelist = baseConfig.merge(z.strictObject({
17-
whitelist_enabled: z.literal(true),
18-
blacklist_enabled: z.literal(false).default(false),
19-
}));
20-
const configWithBlacklist = baseConfig.merge(z.strictObject({
21-
blacklist_enabled: z.literal(true),
22-
whitelist_enabled: z.literal(false).default(false),
23-
}));
16+
const configWithWhitelist = baseConfig.merge(
17+
z.strictObject({
18+
whitelist_enabled: z.literal(true),
19+
blacklist_enabled: z.literal(false).default(false),
20+
}),
21+
);
22+
const configWithBlacklist = baseConfig.merge(
23+
z.strictObject({
24+
blacklist_enabled: z.literal(true),
25+
whitelist_enabled: z.literal(false).default(false),
26+
}),
27+
);
2428

25-
const configSchema = z.union([
26-
configWithWhitelist,
27-
configWithBlacklist,
28-
]);
29+
const configSchema = z.union([configWithWhitelist, configWithBlacklist]);
2930

3031
export const MatchAttachmentTypeTrigger = automodTrigger<MatchResultType>()({
3132
configSchema,

backend/src/plugins/Automod/triggers/matchMimeType.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,20 @@ const baseConfig = z.strictObject({
1212
mime_type_blacklist: z.array(z.string().max(32)).max(255).default([]),
1313
mime_type_whitelist: z.array(z.string().max(32)).max(255).default([]),
1414
});
15-
const configWithWhitelist = baseConfig.merge(z.strictObject({
16-
whitelist_enabled: z.literal(true),
17-
blacklist_enabled: z.literal(false).default(false),
18-
}));
19-
const configWithBlacklist = baseConfig.merge(z.strictObject({
20-
blacklist_enabled: z.literal(true),
21-
whitelist_enabled: z.literal(false).default(false),
22-
}));
15+
const configWithWhitelist = baseConfig.merge(
16+
z.strictObject({
17+
whitelist_enabled: z.literal(true),
18+
blacklist_enabled: z.literal(false).default(false),
19+
}),
20+
);
21+
const configWithBlacklist = baseConfig.merge(
22+
z.strictObject({
23+
blacklist_enabled: z.literal(true),
24+
whitelist_enabled: z.literal(false).default(false),
25+
}),
26+
);
2327

24-
const configSchema = z.union([
25-
configWithWhitelist,
26-
configWithBlacklist,
27-
]);
28+
const configSchema = z.union([configWithWhitelist, configWithBlacklist]);
2829

2930
export const MatchMimeTypeTrigger = automodTrigger<MatchResultType>()({
3031
configSchema,

backend/src/plugins/Censor/util/applyFiltersToMsg.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,13 @@ import { GuildPluginData } from "knub";
44
import { allowTimeout } from "../../../RegExpRunner.js";
55
import { ZalgoRegex } from "../../../data/Zalgo.js";
66
import { ISavedMessageEmbedData, SavedMessage } from "../../../data/entities/SavedMessage.js";
7-
import { getInviteCodesInString, getUrlsInString, isGuildInvite, resolveInvite, resolveMember } from "../../../utils.js";
7+
import {
8+
getInviteCodesInString,
9+
getUrlsInString,
10+
isGuildInvite,
11+
resolveInvite,
12+
resolveMember,
13+
} from "../../../utils.js";
814
import { CensorPluginType } from "../types.js";
915
import { censorMessage } from "./censorMessage.js";
1016

0 commit comments

Comments
 (0)