From 5c0602715d2fd02ad4e014030aaf8d9d7f88cfe1 Mon Sep 17 00:00:00 2001 From: Ruby Date: Fri, 3 Jan 2025 15:12:43 +0100 Subject: [PATCH 1/2] feat: fix leap year rules, add year and month to the delay string --- backend/src/humanizeDuration.ts | 34 +++++++++++++++++++ backend/src/humanizeDurationShort.ts | 18 ---------- .../functions/createMessageSpamTrigger.ts | 2 +- .../src/plugins/ContextMenus/actions/ban.ts | 2 +- .../src/plugins/ContextMenus/actions/mute.ts | 2 +- .../plugins/LocateUser/commands/FollowCmd.ts | 2 +- .../Logs/logFunctions/logMemberJoin.ts | 2 +- .../ModActions/commands/ban/actualBanCmd.ts | 2 +- .../commands/massban/actualMassBanCmd.ts | 2 +- .../ModActions/commands/mute/actualMuteCmd.ts | 2 +- .../commands/unmute/actualUnmuteCmd.ts | 2 +- .../plugins/ModActions/functions/banUserId.ts | 2 +- .../ModActions/functions/clearTempban.ts | 2 +- .../src/plugins/Mutes/commands/MutesCmd.ts | 2 +- .../src/plugins/Mutes/functions/muteUser.ts | 2 +- .../src/plugins/Mutes/functions/unmuteUser.ts | 2 +- .../Post/commands/ScheduledPostsListCmd.ts | 2 +- .../src/plugins/Post/util/actualPostCmd.ts | 2 +- .../plugins/Reminders/commands/RemindCmd.ts | 2 +- .../Reminders/commands/RemindersCmd.ts | 2 +- .../Slowmode/commands/SlowmodeGetCmd.ts | 2 +- .../Slowmode/commands/SlowmodeListCmd.ts | 2 +- .../Slowmode/commands/SlowmodeSetCmd.ts | 2 +- backend/src/plugins/Tags/TagsPlugin.ts | 2 +- .../src/plugins/Utility/commands/AboutCmd.ts | 2 +- .../src/plugins/Utility/commands/CleanCmd.ts | 2 +- .../Utility/functions/getChannelInfoEmbed.ts | 2 +- backend/src/utils.ts | 17 +++------- 28 files changed, 64 insertions(+), 55 deletions(-) create mode 100644 backend/src/humanizeDuration.ts delete mode 100644 backend/src/humanizeDurationShort.ts diff --git a/backend/src/humanizeDuration.ts b/backend/src/humanizeDuration.ts new file mode 100644 index 000000000..937f2f40b --- /dev/null +++ b/backend/src/humanizeDuration.ts @@ -0,0 +1,34 @@ +import humanizeduration from "humanize-duration"; + +export const delayStringMultipliers = { + y: 1000 * 60 * 60 * 24 * (365 + 1 / 4 - 1 / 100 + 1 / 400), + mo: 1000 * 60 * 60* 24 * (365 + 1 / 4 - 1 / 100 + 1 / 400) / 12, + w: 1000 * 60 * 60 * 24 * 7, + d: 1000 * 60 * 60 * 24, + h: 1000 * 60 * 60, + m: 1000 * 60, + s: 1000, + x: 1, +}; + +export const humanizeDurationShort = humanizeduration.humanizer({ + language: "shortEn", + languages: { + shortEn: { + y: () => "y", + mo: () => "mo", + w: () => "w", + d: () => "d", + h: () => "h", + m: () => "m", + s: () => "s", + ms: () => "ms", + }, + }, + spacer: "", + unitMeasures: delayStringMultipliers +}); + +export const humanizeDuration = humanizeduration.humanizer({ + unitMeasures: delayStringMultipliers +}); \ No newline at end of file diff --git a/backend/src/humanizeDurationShort.ts b/backend/src/humanizeDurationShort.ts deleted file mode 100644 index 05b8ad393..000000000 --- a/backend/src/humanizeDurationShort.ts +++ /dev/null @@ -1,18 +0,0 @@ -import humanizeDuration from "humanize-duration"; - -export const humanizeDurationShort = humanizeDuration.humanizer({ - language: "shortEn", - languages: { - shortEn: { - y: () => "y", - mo: () => "mo", - w: () => "w", - d: () => "d", - h: () => "h", - m: () => "m", - s: () => "s", - ms: () => "ms", - }, - }, - spacer: "", -}); diff --git a/backend/src/plugins/Automod/functions/createMessageSpamTrigger.ts b/backend/src/plugins/Automod/functions/createMessageSpamTrigger.ts index 366d87468..a5ed35dae 100644 --- a/backend/src/plugins/Automod/functions/createMessageSpamTrigger.ts +++ b/backend/src/plugins/Automod/functions/createMessageSpamTrigger.ts @@ -1,6 +1,6 @@ import z from "zod"; import { SavedMessage } from "../../../data/entities/SavedMessage.js"; -import { humanizeDurationShort } from "../../../humanizeDurationShort.js"; +import { humanizeDurationShort } from "../../../humanizeDuration.js"; import { getBaseUrl } from "../../../pluginUtils.js"; import { convertDelayStringToMS, sorter, zDelayString } from "../../../utils.js"; import { RecentActionType } from "../constants.js"; diff --git a/backend/src/plugins/ContextMenus/actions/ban.ts b/backend/src/plugins/ContextMenus/actions/ban.ts index 644a293b9..268eef626 100644 --- a/backend/src/plugins/ContextMenus/actions/ban.ts +++ b/backend/src/plugins/ContextMenus/actions/ban.ts @@ -7,7 +7,7 @@ import { TextInputBuilder, TextInputStyle, } from "discord.js"; -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import { logger } from "../../../logger.js"; import { canActOn } from "../../../pluginUtils.js"; diff --git a/backend/src/plugins/ContextMenus/actions/mute.ts b/backend/src/plugins/ContextMenus/actions/mute.ts index 380f5e3a2..534ac1178 100644 --- a/backend/src/plugins/ContextMenus/actions/mute.ts +++ b/backend/src/plugins/ContextMenus/actions/mute.ts @@ -7,7 +7,7 @@ import { TextInputBuilder, TextInputStyle, } from "discord.js"; -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import { ERRORS, RecoverablePluginError } from "../../../RecoverablePluginError.js"; import { logger } from "../../../logger.js"; diff --git a/backend/src/plugins/LocateUser/commands/FollowCmd.ts b/backend/src/plugins/LocateUser/commands/FollowCmd.ts index ff18dabc6..eefa0ccdc 100644 --- a/backend/src/plugins/LocateUser/commands/FollowCmd.ts +++ b/backend/src/plugins/LocateUser/commands/FollowCmd.ts @@ -1,4 +1,4 @@ -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import moment from "moment-timezone"; import { commandTypeHelpers as ct } from "../../../commandTypes.js"; import { registerExpiringVCAlert } from "../../../data/loops/expiringVCAlertsLoop.js"; diff --git a/backend/src/plugins/Logs/logFunctions/logMemberJoin.ts b/backend/src/plugins/Logs/logFunctions/logMemberJoin.ts index b73dcd7a4..b84d36133 100644 --- a/backend/src/plugins/Logs/logFunctions/logMemberJoin.ts +++ b/backend/src/plugins/Logs/logFunctions/logMemberJoin.ts @@ -1,5 +1,5 @@ import { GuildMember } from "discord.js"; -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import moment from "moment-timezone"; import { LogType } from "../../../data/LogType.js"; diff --git a/backend/src/plugins/ModActions/commands/ban/actualBanCmd.ts b/backend/src/plugins/ModActions/commands/ban/actualBanCmd.ts index 60903e446..eff9adffa 100644 --- a/backend/src/plugins/ModActions/commands/ban/actualBanCmd.ts +++ b/backend/src/plugins/ModActions/commands/ban/actualBanCmd.ts @@ -1,5 +1,5 @@ import { Attachment, ChatInputCommandInteraction, GuildMember, Message, User } from "discord.js"; -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import { getMemberLevel } from "knub/helpers"; import { CaseTypes } from "../../../../data/CaseTypes.js"; diff --git a/backend/src/plugins/ModActions/commands/massban/actualMassBanCmd.ts b/backend/src/plugins/ModActions/commands/massban/actualMassBanCmd.ts index 8ced00c4f..2ec33308e 100644 --- a/backend/src/plugins/ModActions/commands/massban/actualMassBanCmd.ts +++ b/backend/src/plugins/ModActions/commands/massban/actualMassBanCmd.ts @@ -2,7 +2,7 @@ import { Attachment, ChatInputCommandInteraction, GuildMember, Message, Snowflak import { GuildPluginData } from "knub"; import { CaseTypes } from "../../../../data/CaseTypes.js"; import { LogType } from "../../../../data/LogType.js"; -import { humanizeDurationShort } from "../../../../humanizeDurationShort.js"; +import { humanizeDurationShort } from "../../../../humanizeDuration.js"; import { canActOn, getContextChannel, isContextInteraction, sendContextResponse } from "../../../../pluginUtils.js"; import { DAYS, MINUTES, SECONDS, noop } from "../../../../utils.js"; import { CasesPlugin } from "../../../Cases/CasesPlugin.js"; diff --git a/backend/src/plugins/ModActions/commands/mute/actualMuteCmd.ts b/backend/src/plugins/ModActions/commands/mute/actualMuteCmd.ts index 2b30ecd97..a27bcefcc 100644 --- a/backend/src/plugins/ModActions/commands/mute/actualMuteCmd.ts +++ b/backend/src/plugins/ModActions/commands/mute/actualMuteCmd.ts @@ -1,5 +1,5 @@ import { Attachment, ChatInputCommandInteraction, GuildMember, Message, User } from "discord.js"; -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import { ERRORS, RecoverablePluginError } from "../../../../RecoverablePluginError.js"; import { logger } from "../../../../logger.js"; diff --git a/backend/src/plugins/ModActions/commands/unmute/actualUnmuteCmd.ts b/backend/src/plugins/ModActions/commands/unmute/actualUnmuteCmd.ts index a6fc768a6..df272c00b 100644 --- a/backend/src/plugins/ModActions/commands/unmute/actualUnmuteCmd.ts +++ b/backend/src/plugins/ModActions/commands/unmute/actualUnmuteCmd.ts @@ -1,5 +1,5 @@ import { Attachment, ChatInputCommandInteraction, GuildMember, Message, User } from "discord.js"; -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import { UnknownUser, asSingleLine, renderUsername } from "../../../../utils.js"; import { MutesPlugin } from "../../../Mutes/MutesPlugin.js"; diff --git a/backend/src/plugins/ModActions/functions/banUserId.ts b/backend/src/plugins/ModActions/functions/banUserId.ts index d432de23d..806a0e74d 100644 --- a/backend/src/plugins/ModActions/functions/banUserId.ts +++ b/backend/src/plugins/ModActions/functions/banUserId.ts @@ -1,5 +1,5 @@ import { DiscordAPIError, Snowflake } from "discord.js"; -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import { CaseTypes } from "../../../data/CaseTypes.js"; import { LogType } from "../../../data/LogType.js"; diff --git a/backend/src/plugins/ModActions/functions/clearTempban.ts b/backend/src/plugins/ModActions/functions/clearTempban.ts index b2f80d830..07b3b0629 100644 --- a/backend/src/plugins/ModActions/functions/clearTempban.ts +++ b/backend/src/plugins/ModActions/functions/clearTempban.ts @@ -1,5 +1,5 @@ import { Snowflake } from "discord.js"; -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import moment from "moment-timezone"; import { CaseTypes } from "../../../data/CaseTypes.js"; diff --git a/backend/src/plugins/Mutes/commands/MutesCmd.ts b/backend/src/plugins/Mutes/commands/MutesCmd.ts index d599edd44..eda0de18b 100644 --- a/backend/src/plugins/Mutes/commands/MutesCmd.ts +++ b/backend/src/plugins/Mutes/commands/MutesCmd.ts @@ -8,7 +8,7 @@ import { } from "discord.js"; import moment from "moment-timezone"; import { commandTypeHelpers as ct } from "../../../commandTypes.js"; -import { humanizeDurationShort } from "../../../humanizeDurationShort.js"; +import { humanizeDurationShort } from "../../../humanizeDuration.js"; import { getBaseUrl } from "../../../pluginUtils.js"; import { DBDateFormat, MINUTES, renderUsername, resolveMember } from "../../../utils.js"; import { IMuteWithDetails, mutesCmd } from "../types.js"; diff --git a/backend/src/plugins/Mutes/functions/muteUser.ts b/backend/src/plugins/Mutes/functions/muteUser.ts index bb2b60efd..3e13f4666 100644 --- a/backend/src/plugins/Mutes/functions/muteUser.ts +++ b/backend/src/plugins/Mutes/functions/muteUser.ts @@ -1,5 +1,5 @@ import { Snowflake } from "discord.js"; -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import { ERRORS, RecoverablePluginError } from "../../../RecoverablePluginError.js"; import { CaseTypes } from "../../../data/CaseTypes.js"; diff --git a/backend/src/plugins/Mutes/functions/unmuteUser.ts b/backend/src/plugins/Mutes/functions/unmuteUser.ts index a5624f0a4..c7719354a 100644 --- a/backend/src/plugins/Mutes/functions/unmuteUser.ts +++ b/backend/src/plugins/Mutes/functions/unmuteUser.ts @@ -1,5 +1,5 @@ import { Snowflake } from "discord.js"; -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import { CaseTypes } from "../../../data/CaseTypes.js"; import { AddMuteParams } from "../../../data/GuildMutes.js"; diff --git a/backend/src/plugins/Post/commands/ScheduledPostsListCmd.ts b/backend/src/plugins/Post/commands/ScheduledPostsListCmd.ts index 99f935978..ebc79e773 100644 --- a/backend/src/plugins/Post/commands/ScheduledPostsListCmd.ts +++ b/backend/src/plugins/Post/commands/ScheduledPostsListCmd.ts @@ -1,5 +1,5 @@ import { escapeCodeBlock } from "discord.js"; -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import moment from "moment-timezone"; import { createChunkedMessage, DBDateFormat, deactivateMentions, sorter, trimLines } from "../../../utils.js"; import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin.js"; diff --git a/backend/src/plugins/Post/util/actualPostCmd.ts b/backend/src/plugins/Post/util/actualPostCmd.ts index d1265b02e..32fb74d10 100644 --- a/backend/src/plugins/Post/util/actualPostCmd.ts +++ b/backend/src/plugins/Post/util/actualPostCmd.ts @@ -1,5 +1,5 @@ import { GuildTextBasedChannel, Message } from "discord.js"; -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import moment from "moment-timezone"; import { registerUpcomingScheduledPost } from "../../../data/loops/upcomingScheduledPostsLoop.js"; diff --git a/backend/src/plugins/Reminders/commands/RemindCmd.ts b/backend/src/plugins/Reminders/commands/RemindCmd.ts index eaa667460..d8765127a 100644 --- a/backend/src/plugins/Reminders/commands/RemindCmd.ts +++ b/backend/src/plugins/Reminders/commands/RemindCmd.ts @@ -1,4 +1,4 @@ -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import moment from "moment-timezone"; import { commandTypeHelpers as ct } from "../../../commandTypes.js"; import { registerUpcomingReminder } from "../../../data/loops/upcomingRemindersLoop.js"; diff --git a/backend/src/plugins/Reminders/commands/RemindersCmd.ts b/backend/src/plugins/Reminders/commands/RemindersCmd.ts index 585557abc..846c7e1e9 100644 --- a/backend/src/plugins/Reminders/commands/RemindersCmd.ts +++ b/backend/src/plugins/Reminders/commands/RemindersCmd.ts @@ -1,4 +1,4 @@ -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import moment from "moment-timezone"; import { createChunkedMessage, DBDateFormat, sorter } from "../../../utils.js"; import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin.js"; diff --git a/backend/src/plugins/Slowmode/commands/SlowmodeGetCmd.ts b/backend/src/plugins/Slowmode/commands/SlowmodeGetCmd.ts index e98160b49..4ece39e25 100644 --- a/backend/src/plugins/Slowmode/commands/SlowmodeGetCmd.ts +++ b/backend/src/plugins/Slowmode/commands/SlowmodeGetCmd.ts @@ -1,4 +1,4 @@ -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { commandTypeHelpers as ct } from "../../../commandTypes.js"; import { slowmodeCmd } from "../types.js"; diff --git a/backend/src/plugins/Slowmode/commands/SlowmodeListCmd.ts b/backend/src/plugins/Slowmode/commands/SlowmodeListCmd.ts index 043d7d5a1..3cc25eb96 100644 --- a/backend/src/plugins/Slowmode/commands/SlowmodeListCmd.ts +++ b/backend/src/plugins/Slowmode/commands/SlowmodeListCmd.ts @@ -1,5 +1,5 @@ import { GuildChannel, TextChannel } from "discord.js"; -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { createChunkedMessage } from "knub/helpers"; import { errorMessage } from "../../../utils.js"; import { slowmodeCmd } from "../types.js"; diff --git a/backend/src/plugins/Slowmode/commands/SlowmodeSetCmd.ts b/backend/src/plugins/Slowmode/commands/SlowmodeSetCmd.ts index 52a5713e2..666b1cb8c 100644 --- a/backend/src/plugins/Slowmode/commands/SlowmodeSetCmd.ts +++ b/backend/src/plugins/Slowmode/commands/SlowmodeSetCmd.ts @@ -1,5 +1,5 @@ import { escapeInlineCode, PermissionsBitField } from "discord.js"; -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { commandTypeHelpers as ct } from "../../../commandTypes.js"; import { asSingleLine, DAYS, HOURS, MINUTES } from "../../../utils.js"; import { getMissingPermissions } from "../../../utils/getMissingPermissions.js"; diff --git a/backend/src/plugins/Tags/TagsPlugin.ts b/backend/src/plugins/Tags/TagsPlugin.ts index f1ded1d31..3fa075695 100644 --- a/backend/src/plugins/Tags/TagsPlugin.ts +++ b/backend/src/plugins/Tags/TagsPlugin.ts @@ -1,5 +1,5 @@ import { Snowflake } from "discord.js"; -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../humanizeDuration.js"; import { PluginOptions, guildPlugin } from "knub"; import moment from "moment-timezone"; import { GuildArchives } from "../../data/GuildArchives.js"; diff --git a/backend/src/plugins/Utility/commands/AboutCmd.ts b/backend/src/plugins/Utility/commands/AboutCmd.ts index 6de194715..bf7d49359 100644 --- a/backend/src/plugins/Utility/commands/AboutCmd.ts +++ b/backend/src/plugins/Utility/commands/AboutCmd.ts @@ -1,5 +1,5 @@ import { APIEmbed, GuildChannel } from "discord.js"; -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import LCL from "last-commit-log"; import shuffle from "lodash/shuffle.js"; import moment from "moment-timezone"; diff --git a/backend/src/plugins/Utility/commands/CleanCmd.ts b/backend/src/plugins/Utility/commands/CleanCmd.ts index db8553d3e..9515394cc 100644 --- a/backend/src/plugins/Utility/commands/CleanCmd.ts +++ b/backend/src/plugins/Utility/commands/CleanCmd.ts @@ -4,7 +4,7 @@ import { allowTimeout } from "../../../RegExpRunner.js"; import { commandTypeHelpers as ct } from "../../../commandTypes.js"; import { LogType } from "../../../data/LogType.js"; import { SavedMessage } from "../../../data/entities/SavedMessage.js"; -import { humanizeDurationShort } from "../../../humanizeDurationShort.js"; +import { humanizeDurationShort } from "../../../humanizeDuration.js"; import { getBaseUrl } from "../../../pluginUtils.js"; import { ModActionsPlugin } from "../../../plugins/ModActions/ModActionsPlugin.js"; import { DAYS, SECONDS, chunkArray, getInviteCodesInString, noop } from "../../../utils.js"; diff --git a/backend/src/plugins/Utility/functions/getChannelInfoEmbed.ts b/backend/src/plugins/Utility/functions/getChannelInfoEmbed.ts index 5c0cd3347..3b78c3f15 100644 --- a/backend/src/plugins/Utility/functions/getChannelInfoEmbed.ts +++ b/backend/src/plugins/Utility/functions/getChannelInfoEmbed.ts @@ -1,5 +1,5 @@ import { APIEmbed, ChannelType, Snowflake, StageChannel, VoiceChannel } from "discord.js"; -import humanizeDuration from "humanize-duration"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import { EmbedWith, MINUTES, formatNumber, preEmbedPadding, trimLines, verboseUserMention } from "../../../utils.js"; import { UtilityPluginType } from "../types.js"; diff --git a/backend/src/utils.ts b/backend/src/utils.ts index 9a35ea738..8ae02e3cb 100644 --- a/backend/src/utils.ts +++ b/backend/src/utils.ts @@ -29,7 +29,7 @@ import { import emojiRegex from "emoji-regex"; import fs from "fs"; import https from "https"; -import humanizeDuration from "humanize-duration"; +import { humanizeDuration, delayStringMultipliers } from "./humanizeDuration.js"; import isEqual from "lodash/isEqual.js"; import { performance } from "perf_hooks"; import tlds from "tlds" assert { type: "json" }; @@ -45,21 +45,14 @@ import { waitForButtonConfirm } from "./utils/waitForInteraction.js"; const fsp = fs.promises; -const delayStringMultipliers = { - w: 1000 * 60 * 60 * 24 * 7, - d: 1000 * 60 * 60 * 24, - h: 1000 * 60 * 60, - m: 1000 * 60, - s: 1000, - x: 1, -}; - export const MS = 1; export const SECONDS = 1000 * MS; export const MINUTES = 60 * SECONDS; export const HOURS = 60 * MINUTES; export const DAYS = 24 * HOURS; -export const WEEKS = 7 * 24 * HOURS; +export const WEEKS = 7 * DAYS; +export const YEARS = (365 + 1/4 - 1/100 + 1/400) * DAYS; +export const MONTHS = YEARS / 12 export const EMPTY_CHAR = "\u200b"; @@ -408,7 +401,7 @@ const MAX_DELAY_STRING_AMOUNT = 100 * 365 * DAYS; * Turns a "delay string" such as "1h30m" to milliseconds */ export function convertDelayStringToMS(str, defaultUnit = "m"): number | null { - const regex = /^([0-9]+)\s*([wdhms])?[a-z]*\s*/; + const regex = /^([0-9]+)\s*((?:mo?)|[ywdhs])?[a-z]*\s*/; let match; let ms = 0; From 81109314ea51a73d8721a27e25d3ff43ffb72f73 Mon Sep 17 00:00:00 2001 From: Ruby Date: Fri, 3 Jan 2025 15:15:45 +0100 Subject: [PATCH 2/2] chore: formatting --- backend/src/data/GuildCases.ts | 3 +-- backend/src/humanizeDuration.ts | 8 +++--- backend/src/index.ts | 10 +++++++- .../Automod/functions/applyCooldown.ts | 7 +++++- .../Automod/functions/checkCooldown.ts | 7 +++++- .../Automod/triggers/matchAttachmentType.ts | 25 ++++++++++--------- .../plugins/Automod/triggers/matchMimeType.ts | 25 ++++++++++--------- .../plugins/Censor/util/applyFiltersToMsg.ts | 8 +++++- .../src/plugins/ContextMenus/actions/ban.ts | 2 +- .../src/plugins/ContextMenus/actions/mute.ts | 2 +- .../src/plugins/Counters/CountersPlugin.ts | 2 +- .../Counters/commands/AddCounterCmd.ts | 8 ++++-- .../plugins/LocateUser/commands/FollowCmd.ts | 2 +- backend/src/plugins/Logs/LogsPlugin.ts | 2 +- .../Logs/logFunctions/logMemberJoin.ts | 2 +- .../Logs/logFunctions/logMessageDelete.ts | 2 +- backend/src/plugins/Logs/types.ts | 2 +- .../src/plugins/Logs/util/getLogMessage.ts | 2 +- .../MessageSaver/MessageSaverPlugin.ts | 7 +++++- .../ModActions/commands/ban/actualBanCmd.ts | 2 +- .../commands/cases/actualCasesCmd.ts | 3 +-- .../ModActions/commands/kick/actualKickCmd.ts | 9 ++++++- .../ModActions/commands/mute/actualMuteCmd.ts | 2 +- .../commands/unmute/actualUnmuteCmd.ts | 2 +- .../plugins/ModActions/functions/banUserId.ts | 2 +- .../ModActions/functions/clearTempban.ts | 2 +- .../ModActions/functions/kickMember.ts | 8 +++++- .../ModActions/functions/warnMember.ts | 8 +++++- .../src/plugins/Mutes/functions/muteUser.ts | 2 +- .../src/plugins/Mutes/functions/unmuteUser.ts | 2 +- .../Phisherman/functions/getDomainInfo.ts | 6 ++++- .../Post/commands/ScheduledPostsListCmd.ts | 2 +- .../src/plugins/Post/util/actualPostCmd.ts | 2 +- .../plugins/Reminders/commands/RemindCmd.ts | 2 +- .../Reminders/commands/RemindersCmd.ts | 2 +- .../functions/createButtonComponents.ts | 5 +++- .../Slowmode/commands/SlowmodeGetCmd.ts | 2 +- .../Slowmode/commands/SlowmodeListCmd.ts | 2 +- .../Slowmode/commands/SlowmodeSetCmd.ts | 2 +- backend/src/plugins/Tags/TagsPlugin.ts | 2 +- .../src/plugins/Utility/commands/AboutCmd.ts | 2 +- .../src/plugins/Utility/commands/HelpCmd.ts | 2 +- .../Utility/functions/getChannelInfoEmbed.ts | 2 +- backend/src/templateFormatter.test.ts | 7 +++++- backend/src/utils.ts | 6 ++--- 45 files changed, 139 insertions(+), 75 deletions(-) diff --git a/backend/src/data/GuildCases.ts b/backend/src/data/GuildCases.ts index 081961ef9..ea834351f 100644 --- a/backend/src/data/GuildCases.ts +++ b/backend/src/data/GuildCases.ts @@ -1,5 +1,4 @@ -import { In, InsertResult, Repository } from "typeorm"; -import { FindOptionsWhere } from "typeorm"; +import { FindOptionsWhere, In, InsertResult, Repository } from "typeorm"; import { Queue } from "../Queue.js"; import { chunkArray } from "../utils.js"; import { BaseGuildRepository } from "./BaseGuildRepository.js"; diff --git a/backend/src/humanizeDuration.ts b/backend/src/humanizeDuration.ts index 937f2f40b..787fd2103 100644 --- a/backend/src/humanizeDuration.ts +++ b/backend/src/humanizeDuration.ts @@ -2,7 +2,7 @@ import humanizeduration from "humanize-duration"; export const delayStringMultipliers = { y: 1000 * 60 * 60 * 24 * (365 + 1 / 4 - 1 / 100 + 1 / 400), - mo: 1000 * 60 * 60* 24 * (365 + 1 / 4 - 1 / 100 + 1 / 400) / 12, + mo: (1000 * 60 * 60 * 24 * (365 + 1 / 4 - 1 / 100 + 1 / 400)) / 12, w: 1000 * 60 * 60 * 24 * 7, d: 1000 * 60 * 60 * 24, h: 1000 * 60 * 60, @@ -26,9 +26,9 @@ export const humanizeDurationShort = humanizeduration.humanizer({ }, }, spacer: "", - unitMeasures: delayStringMultipliers + unitMeasures: delayStringMultipliers, }); export const humanizeDuration = humanizeduration.humanizer({ - unitMeasures: delayStringMultipliers -}); \ No newline at end of file + unitMeasures: delayStringMultipliers, +}); diff --git a/backend/src/index.ts b/backend/src/index.ts index fd926eb0b..24cd5136b 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -44,7 +44,15 @@ import { availableGlobalPlugins, availableGuildPlugins } from "./plugins/availab import { setProfiler } from "./profiler.js"; import { logRateLimit } from "./rateLimitStats.js"; import { startUptimeCounter } from "./uptime.js"; -import { MINUTES, SECONDS, errorMessage, isDiscordAPIError, isDiscordHTTPError, sleep, successMessage } from "./utils.js"; +import { + MINUTES, + SECONDS, + errorMessage, + isDiscordAPIError, + isDiscordHTTPError, + sleep, + successMessage, +} from "./utils.js"; import { DecayingCounter } from "./utils/DecayingCounter.js"; import { enableProfiling } from "./utils/easyProfiler.js"; import { loadYamlSafely } from "./utils/loadYamlSafely.js"; diff --git a/backend/src/plugins/Automod/functions/applyCooldown.ts b/backend/src/plugins/Automod/functions/applyCooldown.ts index e0f939770..f3902b228 100644 --- a/backend/src/plugins/Automod/functions/applyCooldown.ts +++ b/backend/src/plugins/Automod/functions/applyCooldown.ts @@ -2,7 +2,12 @@ import { GuildPluginData } from "knub"; import { convertDelayStringToMS } from "../../../utils.js"; import { AutomodContext, AutomodPluginType, TRule } from "../types.js"; -export function applyCooldown(pluginData: GuildPluginData, rule: TRule, ruleName: string, context: AutomodContext) { +export function applyCooldown( + pluginData: GuildPluginData, + rule: TRule, + ruleName: string, + context: AutomodContext, +) { const cooldownKey = `${ruleName}-${context.user?.id}`; const cooldownTime = convertDelayStringToMS(rule.cooldown, "s"); diff --git a/backend/src/plugins/Automod/functions/checkCooldown.ts b/backend/src/plugins/Automod/functions/checkCooldown.ts index b7e0902eb..bb7d1cec2 100644 --- a/backend/src/plugins/Automod/functions/checkCooldown.ts +++ b/backend/src/plugins/Automod/functions/checkCooldown.ts @@ -1,7 +1,12 @@ import { GuildPluginData } from "knub"; import { AutomodContext, AutomodPluginType, TRule } from "../types.js"; -export function checkCooldown(pluginData: GuildPluginData, rule: TRule, ruleName: string, context: AutomodContext) { +export function checkCooldown( + pluginData: GuildPluginData, + rule: TRule, + ruleName: string, + context: AutomodContext, +) { const cooldownKey = `${ruleName}-${context.user?.id}`; return pluginData.state.cooldownManager.isOnCooldown(cooldownKey); diff --git a/backend/src/plugins/Automod/triggers/matchAttachmentType.ts b/backend/src/plugins/Automod/triggers/matchAttachmentType.ts index 09e8ea2f8..a2e6cfd7b 100644 --- a/backend/src/plugins/Automod/triggers/matchAttachmentType.ts +++ b/backend/src/plugins/Automod/triggers/matchAttachmentType.ts @@ -13,19 +13,20 @@ const baseConfig = z.strictObject({ filetype_blacklist: z.array(z.string().max(32)).max(255).default([]), filetype_whitelist: z.array(z.string().max(32)).max(255).default([]), }); -const configWithWhitelist = baseConfig.merge(z.strictObject({ - whitelist_enabled: z.literal(true), - blacklist_enabled: z.literal(false).default(false), -})); -const configWithBlacklist = baseConfig.merge(z.strictObject({ - blacklist_enabled: z.literal(true), - whitelist_enabled: z.literal(false).default(false), -})); +const configWithWhitelist = baseConfig.merge( + z.strictObject({ + whitelist_enabled: z.literal(true), + blacklist_enabled: z.literal(false).default(false), + }), +); +const configWithBlacklist = baseConfig.merge( + z.strictObject({ + blacklist_enabled: z.literal(true), + whitelist_enabled: z.literal(false).default(false), + }), +); -const configSchema = z.union([ - configWithWhitelist, - configWithBlacklist, -]); +const configSchema = z.union([configWithWhitelist, configWithBlacklist]); export const MatchAttachmentTypeTrigger = automodTrigger()({ configSchema, diff --git a/backend/src/plugins/Automod/triggers/matchMimeType.ts b/backend/src/plugins/Automod/triggers/matchMimeType.ts index 684e8c8f3..c3ca6d95e 100644 --- a/backend/src/plugins/Automod/triggers/matchMimeType.ts +++ b/backend/src/plugins/Automod/triggers/matchMimeType.ts @@ -12,19 +12,20 @@ const baseConfig = z.strictObject({ mime_type_blacklist: z.array(z.string().max(32)).max(255).default([]), mime_type_whitelist: z.array(z.string().max(32)).max(255).default([]), }); -const configWithWhitelist = baseConfig.merge(z.strictObject({ - whitelist_enabled: z.literal(true), - blacklist_enabled: z.literal(false).default(false), -})); -const configWithBlacklist = baseConfig.merge(z.strictObject({ - blacklist_enabled: z.literal(true), - whitelist_enabled: z.literal(false).default(false), -})); +const configWithWhitelist = baseConfig.merge( + z.strictObject({ + whitelist_enabled: z.literal(true), + blacklist_enabled: z.literal(false).default(false), + }), +); +const configWithBlacklist = baseConfig.merge( + z.strictObject({ + blacklist_enabled: z.literal(true), + whitelist_enabled: z.literal(false).default(false), + }), +); -const configSchema = z.union([ - configWithWhitelist, - configWithBlacklist, -]); +const configSchema = z.union([configWithWhitelist, configWithBlacklist]); export const MatchMimeTypeTrigger = automodTrigger()({ configSchema, diff --git a/backend/src/plugins/Censor/util/applyFiltersToMsg.ts b/backend/src/plugins/Censor/util/applyFiltersToMsg.ts index 9af79c3bc..5abf9ee12 100644 --- a/backend/src/plugins/Censor/util/applyFiltersToMsg.ts +++ b/backend/src/plugins/Censor/util/applyFiltersToMsg.ts @@ -4,7 +4,13 @@ import { GuildPluginData } from "knub"; import { allowTimeout } from "../../../RegExpRunner.js"; import { ZalgoRegex } from "../../../data/Zalgo.js"; import { ISavedMessageEmbedData, SavedMessage } from "../../../data/entities/SavedMessage.js"; -import { getInviteCodesInString, getUrlsInString, isGuildInvite, resolveInvite, resolveMember } from "../../../utils.js"; +import { + getInviteCodesInString, + getUrlsInString, + isGuildInvite, + resolveInvite, + resolveMember, +} from "../../../utils.js"; import { CensorPluginType } from "../types.js"; import { censorMessage } from "./censorMessage.js"; diff --git a/backend/src/plugins/ContextMenus/actions/ban.ts b/backend/src/plugins/ContextMenus/actions/ban.ts index 268eef626..3a3e282e0 100644 --- a/backend/src/plugins/ContextMenus/actions/ban.ts +++ b/backend/src/plugins/ContextMenus/actions/ban.ts @@ -7,8 +7,8 @@ import { TextInputBuilder, TextInputStyle, } from "discord.js"; -import { humanizeDuration } from "../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { logger } from "../../../logger.js"; import { canActOn } from "../../../pluginUtils.js"; import { convertDelayStringToMS, renderUserUsername } from "../../../utils.js"; diff --git a/backend/src/plugins/ContextMenus/actions/mute.ts b/backend/src/plugins/ContextMenus/actions/mute.ts index 534ac1178..e2901e6e2 100644 --- a/backend/src/plugins/ContextMenus/actions/mute.ts +++ b/backend/src/plugins/ContextMenus/actions/mute.ts @@ -7,9 +7,9 @@ import { TextInputBuilder, TextInputStyle, } from "discord.js"; -import { humanizeDuration } from "../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import { ERRORS, RecoverablePluginError } from "../../../RecoverablePluginError.js"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { logger } from "../../../logger.js"; import { canActOn } from "../../../pluginUtils.js"; import { convertDelayStringToMS } from "../../../utils.js"; diff --git a/backend/src/plugins/Counters/CountersPlugin.ts b/backend/src/plugins/Counters/CountersPlugin.ts index 2a2b02f73..8140314ab 100644 --- a/backend/src/plugins/Counters/CountersPlugin.ts +++ b/backend/src/plugins/Counters/CountersPlugin.ts @@ -3,7 +3,7 @@ import { PluginOptions, guildPlugin } from "knub"; import { GuildCounters } from "../../data/GuildCounters.js"; import { CounterTrigger, parseCounterConditionString } from "../../data/entities/CounterTrigger.js"; import { makePublicFn } from "../../pluginUtils.js"; -import { MINUTES, convertDelayStringToMS, values } from "../../utils.js"; +import { MINUTES, convertDelayStringToMS } from "../../utils.js"; import { CommonPlugin } from "../Common/CommonPlugin.js"; import { AddCounterCmd } from "./commands/AddCounterCmd.js"; import { CountersListCmd } from "./commands/CountersListCmd.js"; diff --git a/backend/src/plugins/Counters/commands/AddCounterCmd.ts b/backend/src/plugins/Counters/commands/AddCounterCmd.ts index 1438ff591..6ef3ec579 100644 --- a/backend/src/plugins/Counters/commands/AddCounterCmd.ts +++ b/backend/src/plugins/Counters/commands/AddCounterCmd.ts @@ -125,9 +125,13 @@ export const AddCounterCmd = guildPluginMessageCommand()({ `Added ${amount} to **${args.counterName}** for <@!${user.id}> in <#${channel.id}>. The value is now ${newValue}.`, ); } else if (channel) { - message.channel.send(`Added ${amount} to **${args.counterName}** in <#${channel.id}>. The value is now ${newValue}.`); + message.channel.send( + `Added ${amount} to **${args.counterName}** in <#${channel.id}>. The value is now ${newValue}.`, + ); } else if (user) { - message.channel.send(`Added ${amount} to **${args.counterName}** for <@!${user.id}>. The value is now ${newValue}.`); + message.channel.send( + `Added ${amount} to **${args.counterName}** for <@!${user.id}>. The value is now ${newValue}.`, + ); } else { message.channel.send(`Added ${amount} to **${args.counterName}**. The value is now ${newValue}.`); } diff --git a/backend/src/plugins/LocateUser/commands/FollowCmd.ts b/backend/src/plugins/LocateUser/commands/FollowCmd.ts index eefa0ccdc..a0c72d89b 100644 --- a/backend/src/plugins/LocateUser/commands/FollowCmd.ts +++ b/backend/src/plugins/LocateUser/commands/FollowCmd.ts @@ -1,7 +1,7 @@ -import { humanizeDuration } from "../../../humanizeDuration.js"; import moment from "moment-timezone"; import { commandTypeHelpers as ct } from "../../../commandTypes.js"; import { registerExpiringVCAlert } from "../../../data/loops/expiringVCAlertsLoop.js"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { MINUTES, SECONDS } from "../../../utils.js"; import { locateUserCmd } from "../types.js"; diff --git a/backend/src/plugins/Logs/LogsPlugin.ts b/backend/src/plugins/Logs/LogsPlugin.ts index 9fc3e1420..d45b86dc4 100644 --- a/backend/src/plugins/Logs/LogsPlugin.ts +++ b/backend/src/plugins/Logs/LogsPlugin.ts @@ -30,7 +30,7 @@ import { import { LogsThreadCreateEvt, LogsThreadDeleteEvt, LogsThreadUpdateEvt } from "./events/LogsThreadModifyEvts.js"; import { LogsGuildMemberUpdateEvt } from "./events/LogsUserUpdateEvts.js"; import { LogsVoiceStateUpdateEvt } from "./events/LogsVoiceChannelEvts.js"; -import { FORMAT_NO_TIMESTAMP, LogsPluginType, zLogsConfig } from "./types.js"; +import { LogsPluginType, zLogsConfig } from "./types.js"; import { getLogMessage } from "./util/getLogMessage.js"; import { log } from "./util/log.js"; import { onMessageDelete } from "./util/onMessageDelete.js"; diff --git a/backend/src/plugins/Logs/logFunctions/logMemberJoin.ts b/backend/src/plugins/Logs/logFunctions/logMemberJoin.ts index b84d36133..f4ea29a7b 100644 --- a/backend/src/plugins/Logs/logFunctions/logMemberJoin.ts +++ b/backend/src/plugins/Logs/logFunctions/logMemberJoin.ts @@ -1,8 +1,8 @@ import { GuildMember } from "discord.js"; -import { humanizeDuration } from "../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import moment from "moment-timezone"; import { LogType } from "../../../data/LogType.js"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { createTypedTemplateSafeValueContainer } from "../../../templateFormatter.js"; import { memberToTemplateSafeMember } from "../../../utils/templateSafeObjects.js"; import { LogsPluginType } from "../types.js"; diff --git a/backend/src/plugins/Logs/logFunctions/logMessageDelete.ts b/backend/src/plugins/Logs/logFunctions/logMessageDelete.ts index a712c60ef..1952d0213 100644 --- a/backend/src/plugins/Logs/logFunctions/logMessageDelete.ts +++ b/backend/src/plugins/Logs/logFunctions/logMessageDelete.ts @@ -12,7 +12,7 @@ import { userToTemplateSafeUser, } from "../../../utils/templateSafeObjects.js"; import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin.js"; -import { FORMAT_NO_TIMESTAMP, LogsPluginType } from "../types.js"; +import { LogsPluginType } from "../types.js"; import { log } from "../util/log.js"; export interface LogMessageDeleteData { diff --git a/backend/src/plugins/Logs/types.ts b/backend/src/plugins/Logs/types.ts index 95754015a..11eadbd1c 100644 --- a/backend/src/plugins/Logs/types.ts +++ b/backend/src/plugins/Logs/types.ts @@ -6,7 +6,7 @@ import { GuildCases } from "../../data/GuildCases.js"; import { GuildLogs } from "../../data/GuildLogs.js"; import { GuildSavedMessages } from "../../data/GuildSavedMessages.js"; import { LogType } from "../../data/LogType.js"; -import { keys, zBoundedCharacters, zMessageContent, zRegex, zSnowflake } from "../../utils.js"; +import { zBoundedCharacters, zMessageContent, zRegex, zSnowflake } from "../../utils.js"; import { MessageBuffer } from "../../utils/MessageBuffer.js"; import { TemplateSafeCase, diff --git a/backend/src/plugins/Logs/util/getLogMessage.ts b/backend/src/plugins/Logs/util/getLogMessage.ts index 65d5a06cd..30c92087b 100644 --- a/backend/src/plugins/Logs/util/getLogMessage.ts +++ b/backend/src/plugins/Logs/util/getLogMessage.ts @@ -25,7 +25,7 @@ import { TemplateSafeUser, } from "../../../utils/templateSafeObjects.js"; import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin.js"; -import { FORMAT_NO_TIMESTAMP, ILogTypeData, LogsPluginType, TLogChannel } from "../types.js"; +import { ILogTypeData, LogsPluginType, TLogChannel } from "../types.js"; export async function getLogMessage( pluginData: GuildPluginData, diff --git a/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts b/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts index 5196ef234..21042298d 100644 --- a/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts +++ b/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts @@ -3,7 +3,12 @@ import { GuildSavedMessages } from "../../data/GuildSavedMessages.js"; import { CommonPlugin } from "../Common/CommonPlugin.js"; import { SaveMessagesToDBCmd } from "./commands/SaveMessagesToDB.js"; import { SavePinsToDBCmd } from "./commands/SavePinsToDB.js"; -import { MessageCreateEvt, MessageDeleteBulkEvt, MessageDeleteEvt, MessageUpdateEvt } from "./events/SaveMessagesEvts.js"; +import { + MessageCreateEvt, + MessageDeleteBulkEvt, + MessageDeleteEvt, + MessageUpdateEvt, +} from "./events/SaveMessagesEvts.js"; import { MessageSaverPluginType, zMessageSaverConfig } from "./types.js"; const defaultOptions: PluginOptions = { diff --git a/backend/src/plugins/ModActions/commands/ban/actualBanCmd.ts b/backend/src/plugins/ModActions/commands/ban/actualBanCmd.ts index eff9adffa..4ae8c127b 100644 --- a/backend/src/plugins/ModActions/commands/ban/actualBanCmd.ts +++ b/backend/src/plugins/ModActions/commands/ban/actualBanCmd.ts @@ -1,9 +1,9 @@ import { Attachment, ChatInputCommandInteraction, GuildMember, Message, User } from "discord.js"; -import { humanizeDuration } from "../../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import { getMemberLevel } from "knub/helpers"; import { CaseTypes } from "../../../../data/CaseTypes.js"; import { clearExpiringTempban, registerExpiringTempban } from "../../../../data/loops/expiringTempbansLoop.js"; +import { humanizeDuration } from "../../../../humanizeDuration.js"; import { canActOn, getContextChannel } from "../../../../pluginUtils.js"; import { UnknownUser, UserNotificationMethod, renderUsername, resolveMember } from "../../../../utils.js"; import { banLock } from "../../../../utils/lockNameHelpers.js"; diff --git a/backend/src/plugins/ModActions/commands/cases/actualCasesCmd.ts b/backend/src/plugins/ModActions/commands/cases/actualCasesCmd.ts index cf428b0d1..9047d6744 100644 --- a/backend/src/plugins/ModActions/commands/cases/actualCasesCmd.ts +++ b/backend/src/plugins/ModActions/commands/cases/actualCasesCmd.ts @@ -1,7 +1,6 @@ import { APIEmbed, ChatInputCommandInteraction, GuildMember, Message, User } from "discord.js"; import { GuildPluginData } from "knub"; -import { In } from "typeorm"; -import { FindOptionsWhere } from "typeorm"; +import { FindOptionsWhere, In } from "typeorm"; import { CaseTypes } from "../../../../data/CaseTypes.js"; import { Case } from "../../../../data/entities/Case.js"; import { sendContextResponse } from "../../../../pluginUtils.js"; diff --git a/backend/src/plugins/ModActions/commands/kick/actualKickCmd.ts b/backend/src/plugins/ModActions/commands/kick/actualKickCmd.ts index 08bf6c6c9..a51e9a4f8 100644 --- a/backend/src/plugins/ModActions/commands/kick/actualKickCmd.ts +++ b/backend/src/plugins/ModActions/commands/kick/actualKickCmd.ts @@ -2,7 +2,14 @@ import { Attachment, ChatInputCommandInteraction, GuildMember, Message, User } f import { GuildPluginData } from "knub"; import { LogType } from "../../../../data/LogType.js"; import { canActOn } from "../../../../pluginUtils.js"; -import { DAYS, SECONDS, UnknownUser, UserNotificationMethod, renderUsername, resolveMember } from "../../../../utils.js"; +import { + DAYS, + SECONDS, + UnknownUser, + UserNotificationMethod, + renderUsername, + resolveMember, +} from "../../../../utils.js"; import { handleAttachmentLinkDetectionAndGetRestriction } from "../../functions/attachmentLinkReaction.js"; import { formatReasonWithAttachments, diff --git a/backend/src/plugins/ModActions/commands/mute/actualMuteCmd.ts b/backend/src/plugins/ModActions/commands/mute/actualMuteCmd.ts index a27bcefcc..736bd42ba 100644 --- a/backend/src/plugins/ModActions/commands/mute/actualMuteCmd.ts +++ b/backend/src/plugins/ModActions/commands/mute/actualMuteCmd.ts @@ -1,7 +1,7 @@ import { Attachment, ChatInputCommandInteraction, GuildMember, Message, User } from "discord.js"; -import { humanizeDuration } from "../../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import { ERRORS, RecoverablePluginError } from "../../../../RecoverablePluginError.js"; +import { humanizeDuration } from "../../../../humanizeDuration.js"; import { logger } from "../../../../logger.js"; import { UnknownUser, diff --git a/backend/src/plugins/ModActions/commands/unmute/actualUnmuteCmd.ts b/backend/src/plugins/ModActions/commands/unmute/actualUnmuteCmd.ts index df272c00b..cc657ebdd 100644 --- a/backend/src/plugins/ModActions/commands/unmute/actualUnmuteCmd.ts +++ b/backend/src/plugins/ModActions/commands/unmute/actualUnmuteCmd.ts @@ -1,6 +1,6 @@ import { Attachment, ChatInputCommandInteraction, GuildMember, Message, User } from "discord.js"; -import { humanizeDuration } from "../../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; +import { humanizeDuration } from "../../../../humanizeDuration.js"; import { UnknownUser, asSingleLine, renderUsername } from "../../../../utils.js"; import { MutesPlugin } from "../../../Mutes/MutesPlugin.js"; import { handleAttachmentLinkDetectionAndGetRestriction } from "../../functions/attachmentLinkReaction.js"; diff --git a/backend/src/plugins/ModActions/functions/banUserId.ts b/backend/src/plugins/ModActions/functions/banUserId.ts index 806a0e74d..7250fa1dc 100644 --- a/backend/src/plugins/ModActions/functions/banUserId.ts +++ b/backend/src/plugins/ModActions/functions/banUserId.ts @@ -1,9 +1,9 @@ import { DiscordAPIError, Snowflake } from "discord.js"; -import { humanizeDuration } from "../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import { CaseTypes } from "../../../data/CaseTypes.js"; import { LogType } from "../../../data/LogType.js"; import { registerExpiringTempban } from "../../../data/loops/expiringTempbansLoop.js"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { logger } from "../../../logger.js"; import { TemplateParseError, TemplateSafeValueContainer, renderTemplate } from "../../../templateFormatter.js"; import { diff --git a/backend/src/plugins/ModActions/functions/clearTempban.ts b/backend/src/plugins/ModActions/functions/clearTempban.ts index 07b3b0629..96d607708 100644 --- a/backend/src/plugins/ModActions/functions/clearTempban.ts +++ b/backend/src/plugins/ModActions/functions/clearTempban.ts @@ -1,10 +1,10 @@ import { Snowflake } from "discord.js"; -import { humanizeDuration } from "../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import moment from "moment-timezone"; import { CaseTypes } from "../../../data/CaseTypes.js"; import { LogType } from "../../../data/LogType.js"; import { Tempban } from "../../../data/entities/Tempban.js"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { logger } from "../../../logger.js"; import { resolveUser } from "../../../utils.js"; import { CasesPlugin } from "../../Cases/CasesPlugin.js"; diff --git a/backend/src/plugins/ModActions/functions/kickMember.ts b/backend/src/plugins/ModActions/functions/kickMember.ts index c1f2f7d2f..c7be5f70b 100644 --- a/backend/src/plugins/ModActions/functions/kickMember.ts +++ b/backend/src/plugins/ModActions/functions/kickMember.ts @@ -3,7 +3,13 @@ import { GuildPluginData } from "knub"; import { CaseTypes } from "../../../data/CaseTypes.js"; import { LogType } from "../../../data/LogType.js"; import { renderTemplate, TemplateParseError, TemplateSafeValueContainer } from "../../../templateFormatter.js"; -import { createUserNotificationError, notifyUser, resolveUser, ucfirst, UserNotificationResult } from "../../../utils.js"; +import { + createUserNotificationError, + notifyUser, + resolveUser, + ucfirst, + UserNotificationResult, +} from "../../../utils.js"; import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects.js"; import { CasesPlugin } from "../../Cases/CasesPlugin.js"; import { LogsPlugin } from "../../Logs/LogsPlugin.js"; diff --git a/backend/src/plugins/ModActions/functions/warnMember.ts b/backend/src/plugins/ModActions/functions/warnMember.ts index 9e077234c..9ac737a61 100644 --- a/backend/src/plugins/ModActions/functions/warnMember.ts +++ b/backend/src/plugins/ModActions/functions/warnMember.ts @@ -2,7 +2,13 @@ import { GuildMember, Snowflake } from "discord.js"; import { GuildPluginData } from "knub"; import { CaseTypes } from "../../../data/CaseTypes.js"; import { TemplateParseError, TemplateSafeValueContainer, renderTemplate } from "../../../templateFormatter.js"; -import { UserNotificationResult, createUserNotificationError, notifyUser, resolveUser, ucfirst } from "../../../utils.js"; +import { + UserNotificationResult, + createUserNotificationError, + notifyUser, + resolveUser, + ucfirst, +} from "../../../utils.js"; import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects.js"; import { waitForButtonConfirm } from "../../../utils/waitForInteraction.js"; import { CasesPlugin } from "../../Cases/CasesPlugin.js"; diff --git a/backend/src/plugins/Mutes/functions/muteUser.ts b/backend/src/plugins/Mutes/functions/muteUser.ts index 3e13f4666..fbb6497b7 100644 --- a/backend/src/plugins/Mutes/functions/muteUser.ts +++ b/backend/src/plugins/Mutes/functions/muteUser.ts @@ -1,5 +1,4 @@ import { Snowflake } from "discord.js"; -import { humanizeDuration } from "../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import { ERRORS, RecoverablePluginError } from "../../../RecoverablePluginError.js"; import { CaseTypes } from "../../../data/CaseTypes.js"; @@ -8,6 +7,7 @@ import { MuteTypes } from "../../../data/MuteTypes.js"; import { Case } from "../../../data/entities/Case.js"; import { Mute } from "../../../data/entities/Mute.js"; import { registerExpiringMute } from "../../../data/loops/expiringMutesLoop.js"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { LogsPlugin } from "../../../plugins/Logs/LogsPlugin.js"; import { TemplateParseError, TemplateSafeValueContainer, renderTemplate } from "../../../templateFormatter.js"; import { diff --git a/backend/src/plugins/Mutes/functions/unmuteUser.ts b/backend/src/plugins/Mutes/functions/unmuteUser.ts index c7719354a..b9d4c2b2c 100644 --- a/backend/src/plugins/Mutes/functions/unmuteUser.ts +++ b/backend/src/plugins/Mutes/functions/unmuteUser.ts @@ -1,10 +1,10 @@ import { Snowflake } from "discord.js"; -import { humanizeDuration } from "../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import { CaseTypes } from "../../../data/CaseTypes.js"; import { AddMuteParams } from "../../../data/GuildMutes.js"; import { MuteTypes } from "../../../data/MuteTypes.js"; import { Mute } from "../../../data/entities/Mute.js"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { noop, resolveMember, resolveUser } from "../../../utils.js"; import { CasesPlugin } from "../../Cases/CasesPlugin.js"; import { CaseArgs } from "../../Cases/types.js"; diff --git a/backend/src/plugins/Phisherman/functions/getDomainInfo.ts b/backend/src/plugins/Phisherman/functions/getDomainInfo.ts index f29131947..b8fabcb85 100644 --- a/backend/src/plugins/Phisherman/functions/getDomainInfo.ts +++ b/backend/src/plugins/Phisherman/functions/getDomainInfo.ts @@ -1,5 +1,9 @@ import { GuildPluginData } from "knub"; -import { getPhishermanDomainInfo, phishermanDomainIsSafe, trackPhishermanCaughtDomain } from "../../../data/Phisherman.js"; +import { + getPhishermanDomainInfo, + phishermanDomainIsSafe, + trackPhishermanCaughtDomain, +} from "../../../data/Phisherman.js"; import { PhishermanDomainInfo } from "../../../data/types/phisherman.js"; import { PhishermanPluginType } from "../types.js"; diff --git a/backend/src/plugins/Post/commands/ScheduledPostsListCmd.ts b/backend/src/plugins/Post/commands/ScheduledPostsListCmd.ts index ebc79e773..c79022150 100644 --- a/backend/src/plugins/Post/commands/ScheduledPostsListCmd.ts +++ b/backend/src/plugins/Post/commands/ScheduledPostsListCmd.ts @@ -1,6 +1,6 @@ import { escapeCodeBlock } from "discord.js"; -import { humanizeDuration } from "../../../humanizeDuration.js"; import moment from "moment-timezone"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { createChunkedMessage, DBDateFormat, deactivateMentions, sorter, trimLines } from "../../../utils.js"; import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin.js"; import { postCmd } from "../types.js"; diff --git a/backend/src/plugins/Post/util/actualPostCmd.ts b/backend/src/plugins/Post/util/actualPostCmd.ts index 32fb74d10..a5831510e 100644 --- a/backend/src/plugins/Post/util/actualPostCmd.ts +++ b/backend/src/plugins/Post/util/actualPostCmd.ts @@ -1,8 +1,8 @@ import { GuildTextBasedChannel, Message } from "discord.js"; -import { humanizeDuration } from "../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; import moment from "moment-timezone"; import { registerUpcomingScheduledPost } from "../../../data/loops/upcomingScheduledPostsLoop.js"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { DBDateFormat, MINUTES, StrictMessageContent, errorMessage, renderUsername } from "../../../utils.js"; import { LogsPlugin } from "../../Logs/LogsPlugin.js"; import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin.js"; diff --git a/backend/src/plugins/Reminders/commands/RemindCmd.ts b/backend/src/plugins/Reminders/commands/RemindCmd.ts index d8765127a..b6b1e04db 100644 --- a/backend/src/plugins/Reminders/commands/RemindCmd.ts +++ b/backend/src/plugins/Reminders/commands/RemindCmd.ts @@ -1,7 +1,7 @@ -import { humanizeDuration } from "../../../humanizeDuration.js"; import moment from "moment-timezone"; import { commandTypeHelpers as ct } from "../../../commandTypes.js"; import { registerUpcomingReminder } from "../../../data/loops/upcomingRemindersLoop.js"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { convertDelayStringToMS, messageLink } from "../../../utils.js"; import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin.js"; import { remindersCmd } from "../types.js"; diff --git a/backend/src/plugins/Reminders/commands/RemindersCmd.ts b/backend/src/plugins/Reminders/commands/RemindersCmd.ts index 846c7e1e9..18da87b03 100644 --- a/backend/src/plugins/Reminders/commands/RemindersCmd.ts +++ b/backend/src/plugins/Reminders/commands/RemindersCmd.ts @@ -1,5 +1,5 @@ -import { humanizeDuration } from "../../../humanizeDuration.js"; import moment from "moment-timezone"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { createChunkedMessage, DBDateFormat, sorter } from "../../../utils.js"; import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin.js"; import { remindersCmd } from "../types.js"; diff --git a/backend/src/plugins/RoleButtons/functions/createButtonComponents.ts b/backend/src/plugins/RoleButtons/functions/createButtonComponents.ts index d8cac736e..c4b13b839 100644 --- a/backend/src/plugins/RoleButtons/functions/createButtonComponents.ts +++ b/backend/src/plugins/RoleButtons/functions/createButtonComponents.ts @@ -4,7 +4,10 @@ import { TRoleButtonsConfigItem } from "../types.js"; import { TooManyComponentsError } from "./TooManyComponentsError.js"; import { convertButtonStyleStringToEnum } from "./convertButtonStyleStringToEnum.js"; -export function createButtonComponents(configItem: TRoleButtonsConfigItem, configName: string): Array> { +export function createButtonComponents( + configItem: TRoleButtonsConfigItem, + configName: string, +): Array> { const rows: Array> = []; let currentRow = new ActionRowBuilder(); diff --git a/backend/src/plugins/Slowmode/commands/SlowmodeGetCmd.ts b/backend/src/plugins/Slowmode/commands/SlowmodeGetCmd.ts index 4ece39e25..a8f334cd7 100644 --- a/backend/src/plugins/Slowmode/commands/SlowmodeGetCmd.ts +++ b/backend/src/plugins/Slowmode/commands/SlowmodeGetCmd.ts @@ -1,5 +1,5 @@ -import { humanizeDuration } from "../../../humanizeDuration.js"; import { commandTypeHelpers as ct } from "../../../commandTypes.js"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { slowmodeCmd } from "../types.js"; export const SlowmodeGetCmd = slowmodeCmd({ diff --git a/backend/src/plugins/Slowmode/commands/SlowmodeListCmd.ts b/backend/src/plugins/Slowmode/commands/SlowmodeListCmd.ts index 3cc25eb96..276e4bdfb 100644 --- a/backend/src/plugins/Slowmode/commands/SlowmodeListCmd.ts +++ b/backend/src/plugins/Slowmode/commands/SlowmodeListCmd.ts @@ -1,6 +1,6 @@ import { GuildChannel, TextChannel } from "discord.js"; -import { humanizeDuration } from "../../../humanizeDuration.js"; import { createChunkedMessage } from "knub/helpers"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { errorMessage } from "../../../utils.js"; import { slowmodeCmd } from "../types.js"; diff --git a/backend/src/plugins/Slowmode/commands/SlowmodeSetCmd.ts b/backend/src/plugins/Slowmode/commands/SlowmodeSetCmd.ts index 666b1cb8c..b1d188048 100644 --- a/backend/src/plugins/Slowmode/commands/SlowmodeSetCmd.ts +++ b/backend/src/plugins/Slowmode/commands/SlowmodeSetCmd.ts @@ -1,6 +1,6 @@ import { escapeInlineCode, PermissionsBitField } from "discord.js"; -import { humanizeDuration } from "../../../humanizeDuration.js"; import { commandTypeHelpers as ct } from "../../../commandTypes.js"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { asSingleLine, DAYS, HOURS, MINUTES } from "../../../utils.js"; import { getMissingPermissions } from "../../../utils/getMissingPermissions.js"; import { missingPermissionError } from "../../../utils/missingPermissionError.js"; diff --git a/backend/src/plugins/Tags/TagsPlugin.ts b/backend/src/plugins/Tags/TagsPlugin.ts index 3fa075695..25141ea3d 100644 --- a/backend/src/plugins/Tags/TagsPlugin.ts +++ b/backend/src/plugins/Tags/TagsPlugin.ts @@ -1,11 +1,11 @@ import { Snowflake } from "discord.js"; -import { humanizeDuration } from "../../humanizeDuration.js"; import { PluginOptions, guildPlugin } from "knub"; import moment from "moment-timezone"; import { GuildArchives } from "../../data/GuildArchives.js"; import { GuildLogs } from "../../data/GuildLogs.js"; import { GuildSavedMessages } from "../../data/GuildSavedMessages.js"; import { GuildTags } from "../../data/GuildTags.js"; +import { humanizeDuration } from "../../humanizeDuration.js"; import { makePublicFn } from "../../pluginUtils.js"; import { convertDelayStringToMS } from "../../utils.js"; import { CommonPlugin } from "../Common/CommonPlugin.js"; diff --git a/backend/src/plugins/Utility/commands/AboutCmd.ts b/backend/src/plugins/Utility/commands/AboutCmd.ts index bf7d49359..44380ed92 100644 --- a/backend/src/plugins/Utility/commands/AboutCmd.ts +++ b/backend/src/plugins/Utility/commands/AboutCmd.ts @@ -1,8 +1,8 @@ import { APIEmbed, GuildChannel } from "discord.js"; -import { humanizeDuration } from "../../../humanizeDuration.js"; import LCL from "last-commit-log"; import shuffle from "lodash/shuffle.js"; import moment from "moment-timezone"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { rootDir } from "../../../paths.js"; import { getCurrentUptime } from "../../../uptime.js"; import { resolveMember, sorter } from "../../../utils.js"; diff --git a/backend/src/plugins/Utility/commands/HelpCmd.ts b/backend/src/plugins/Utility/commands/HelpCmd.ts index c78a25c6b..4c103e198 100644 --- a/backend/src/plugins/Utility/commands/HelpCmd.ts +++ b/backend/src/plugins/Utility/commands/HelpCmd.ts @@ -1,8 +1,8 @@ import { LoadedGuildPlugin, PluginCommandDefinition } from "knub"; import { commandTypeHelpers as ct } from "../../../commandTypes.js"; +import { env } from "../../../env.js"; import { createChunkedMessage } from "../../../utils.js"; import { utilityCmd } from "../types.js"; -import { env } from "../../../env.js"; export const HelpCmd = utilityCmd({ trigger: "help", diff --git a/backend/src/plugins/Utility/functions/getChannelInfoEmbed.ts b/backend/src/plugins/Utility/functions/getChannelInfoEmbed.ts index 3b78c3f15..401ff39f7 100644 --- a/backend/src/plugins/Utility/functions/getChannelInfoEmbed.ts +++ b/backend/src/plugins/Utility/functions/getChannelInfoEmbed.ts @@ -1,6 +1,6 @@ import { APIEmbed, ChannelType, Snowflake, StageChannel, VoiceChannel } from "discord.js"; -import { humanizeDuration } from "../../../humanizeDuration.js"; import { GuildPluginData } from "knub"; +import { humanizeDuration } from "../../../humanizeDuration.js"; import { EmbedWith, MINUTES, formatNumber, preEmbedPadding, trimLines, verboseUserMention } from "../../../utils.js"; import { UtilityPluginType } from "../types.js"; diff --git a/backend/src/templateFormatter.test.ts b/backend/src/templateFormatter.test.ts index f906e054c..0d7bd9934 100644 --- a/backend/src/templateFormatter.test.ts +++ b/backend/src/templateFormatter.test.ts @@ -1,5 +1,10 @@ import test from "ava"; -import { parseTemplate, renderParsedTemplate, renderTemplate, TemplateSafeValueContainer } from "./templateFormatter.js"; +import { + parseTemplate, + renderParsedTemplate, + renderTemplate, + TemplateSafeValueContainer, +} from "./templateFormatter.js"; test("Parses plain string templates correctly", (t) => { const result = parseTemplate("foo bar baz"); diff --git a/backend/src/utils.ts b/backend/src/utils.ts index 8ae02e3cb..2849d5a46 100644 --- a/backend/src/utils.ts +++ b/backend/src/utils.ts @@ -29,7 +29,6 @@ import { import emojiRegex from "emoji-regex"; import fs from "fs"; import https from "https"; -import { humanizeDuration, delayStringMultipliers } from "./humanizeDuration.js"; import isEqual from "lodash/isEqual.js"; import { performance } from "perf_hooks"; import tlds from "tlds" assert { type: "json" }; @@ -37,6 +36,7 @@ import tmp from "tmp"; import { URL } from "url"; import { z, ZodEffects, ZodError, ZodRecord, ZodString } from "zod"; import { ISavedMessageAttachmentData, SavedMessage } from "./data/entities/SavedMessage.js"; +import { delayStringMultipliers, humanizeDuration } from "./humanizeDuration.js"; import { getProfiler } from "./profiler.js"; import { SimpleCache } from "./SimpleCache.js"; import { sendDM } from "./utils/sendDM.js"; @@ -51,8 +51,8 @@ export const MINUTES = 60 * SECONDS; export const HOURS = 60 * MINUTES; export const DAYS = 24 * HOURS; export const WEEKS = 7 * DAYS; -export const YEARS = (365 + 1/4 - 1/100 + 1/400) * DAYS; -export const MONTHS = YEARS / 12 +export const YEARS = (365 + 1 / 4 - 1 / 100 + 1 / 400) * DAYS; +export const MONTHS = YEARS / 12; export const EMPTY_CHAR = "\u200b";