From bf9d27dad0b1af39f408cb7a7d7f8d74d6612adb Mon Sep 17 00:00:00 2001 From: iamshoXy Date: Thu, 27 Jul 2023 16:33:43 +0200 Subject: [PATCH 1/4] default ban message (no reason specified) --- backend/src/plugins/ModActions/functions/banUserId.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/backend/src/plugins/ModActions/functions/banUserId.ts b/backend/src/plugins/ModActions/functions/banUserId.ts index d9d1454b..e4191a6c 100644 --- a/backend/src/plugins/ModActions/functions/banUserId.ts +++ b/backend/src/plugins/ModActions/functions/banUserId.ts @@ -42,10 +42,12 @@ export async function banUserId( }; } + reason = reason || "No reason specified"; + // Attempt to message the user *before* banning them, as doing it after may not be possible const member = await resolveMember(pluginData.client, pluginData.guild, userId); let notifyResult: UserNotificationResult = { method: null, success: true }; - if (reason && member) { + if (member) { const contactMethods = banOptions?.contactMethods ? banOptions.contactMethods : getDefaultContactMethods(pluginData, "ban"); @@ -91,7 +93,7 @@ export async function banUserId( const deleteMessageDays = Math.min(7, Math.max(0, banOptions.deleteMessageDays ?? 1)); await pluginData.guild.bans.create(userId as Snowflake, { deleteMessageSeconds: (deleteMessageDays * DAYS) / SECONDS, - reason: reason ?? undefined, + reason, }); } catch (e) { let errorMessage; @@ -149,7 +151,7 @@ export async function banUserId( mod, user, caseNumber: createdCase.case_number, - reason: reason ?? "", + reason, banTime: humanizeDuration(banTime), }); } else { @@ -157,7 +159,7 @@ export async function banUserId( mod, user, caseNumber: createdCase.case_number, - reason: reason ?? "", + reason, }); } From ac3eb74500155fd6c882db22a182cf23ed8ae4dc Mon Sep 17 00:00:00 2001 From: iamshoXy Date: Sat, 29 Jul 2023 15:07:33 +0200 Subject: [PATCH 2/4] add default option --- .../plugins/ModActions/ModActionsPlugin.ts | 1 + .../plugins/ModActions/functions/banUserId.ts | 2 +- backend/src/plugins/ModActions/types.ts | 43 ++++++++++--------- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/backend/src/plugins/ModActions/ModActionsPlugin.ts b/backend/src/plugins/ModActions/ModActionsPlugin.ts index bf83b13e..523a48d3 100644 --- a/backend/src/plugins/ModActions/ModActionsPlugin.ts +++ b/backend/src/plugins/ModActions/ModActionsPlugin.ts @@ -62,6 +62,7 @@ const defaultOptions = { kick_message: "You have been kicked from the {guildName} server. Reason given: {reason}", ban_message: "You have been banned from the {guildName} server. Reason given: {reason}", tempban_message: "You have been banned from the {guildName} server for {banTime}. Reason given: {reason}", + default_ban_reason: "No reason specified", alert_on_rejoin: false, alert_channel: null, warn_notify_enabled: false, diff --git a/backend/src/plugins/ModActions/functions/banUserId.ts b/backend/src/plugins/ModActions/functions/banUserId.ts index e4191a6c..1fb3ba5e 100644 --- a/backend/src/plugins/ModActions/functions/banUserId.ts +++ b/backend/src/plugins/ModActions/functions/banUserId.ts @@ -42,7 +42,7 @@ export async function banUserId( }; } - reason = reason || "No reason specified"; + reason = reason || (config.default_ban_reason || "No reason specified"); // Attempt to message the user *before* banning them, as doing it after may not be possible const member = await resolveMember(pluginData.client, pluginData.guild, userId); diff --git a/backend/src/plugins/ModActions/types.ts b/backend/src/plugins/ModActions/types.ts index 447b9638..4bcb6a02 100644 --- a/backend/src/plugins/ModActions/types.ts +++ b/backend/src/plugins/ModActions/types.ts @@ -23,6 +23,7 @@ export const ConfigSchema = t.type({ kick_message: tNullable(t.string), ban_message: tNullable(t.string), tempban_message: tNullable(t.string), + default_ban_reason: tNullable(t.string), alert_on_rejoin: t.boolean, alert_channel: tNullable(t.string), warn_notify_enabled: t.boolean, @@ -91,36 +92,36 @@ export interface IIgnoredEvent { export type WarnResult = | { - status: "failed"; - error: string; - } + status: "failed"; + error: string; + } | { - status: "success"; - case: Case; - notifyResult: UserNotificationResult; - }; + status: "success"; + case: Case; + notifyResult: UserNotificationResult; + }; export type KickResult = | { - status: "failed"; - error: string; - } + status: "failed"; + error: string; + } | { - status: "success"; - case: Case; - notifyResult: UserNotificationResult; - }; + status: "success"; + case: Case; + notifyResult: UserNotificationResult; + }; export type BanResult = | { - status: "failed"; - error: string; - } + status: "failed"; + error: string; + } | { - status: "success"; - case: Case; - notifyResult: UserNotificationResult; - }; + status: "success"; + case: Case; + notifyResult: UserNotificationResult; + }; export type WarnMemberNotifyRetryCallback = () => boolean | Promise; From ed5214d4ec9f2eaaecc341318acb55c76dacb055 Mon Sep 17 00:00:00 2001 From: iamshoXy Date: Fri, 29 Dec 2023 15:40:56 +0100 Subject: [PATCH 3/4] added default reasons object --- .../plugins/ModActions/ModActionsPlugin.ts | 6 ++- .../ModActions/commands/ForcebanCmd.ts | 5 +- .../functions/actualKickMemberCmd.ts | 5 +- .../ModActions/functions/actualMuteUserCmd.ts | 6 ++- .../plugins/ModActions/functions/banUserId.ts | 4 +- backend/src/plugins/ModActions/types.ts | 50 +++++++++++-------- 6 files changed, 48 insertions(+), 28 deletions(-) diff --git a/backend/src/plugins/ModActions/ModActionsPlugin.ts b/backend/src/plugins/ModActions/ModActionsPlugin.ts index 523a48d3..e5f8af01 100644 --- a/backend/src/plugins/ModActions/ModActionsPlugin.ts +++ b/backend/src/plugins/ModActions/ModActionsPlugin.ts @@ -62,7 +62,11 @@ const defaultOptions = { kick_message: "You have been kicked from the {guildName} server. Reason given: {reason}", ban_message: "You have been banned from the {guildName} server. Reason given: {reason}", tempban_message: "You have been banned from the {guildName} server for {banTime}. Reason given: {reason}", - default_ban_reason: "No reason specified", + default_reasons: { + mute: "No reason specified", + kick: "No reason specified", + ban: "No reason specified", + }, alert_on_rejoin: false, alert_channel: null, warn_notify_enabled: false, diff --git a/backend/src/plugins/ModActions/commands/ForcebanCmd.ts b/backend/src/plugins/ModActions/commands/ForcebanCmd.ts index 4ddef154..3aa23560 100644 --- a/backend/src/plugins/ModActions/commands/ForcebanCmd.ts +++ b/backend/src/plugins/ModActions/commands/ForcebanCmd.ts @@ -61,7 +61,10 @@ export const ForcebanCmd = modActionsCmd({ mod = args.mod; } - const reason = formatReasonWithAttachments(args.reason, [...msg.attachments.values()]); + const config = pluginData.config.get(); + const reason = args.reason + ? formatReasonWithAttachments(args.reason, [...msg.attachments.values()]) + : config.default_reasons?.ban || "No reason specified"; ignoreEvent(pluginData, IgnoredEventType.Ban, user.id); pluginData.state.serverLogs.ignoreLog(LogType.MEMBER_BAN, user.id); diff --git a/backend/src/plugins/ModActions/functions/actualKickMemberCmd.ts b/backend/src/plugins/ModActions/functions/actualKickMemberCmd.ts index 73a1e2d9..d5d0b62c 100644 --- a/backend/src/plugins/ModActions/functions/actualKickMemberCmd.ts +++ b/backend/src/plugins/ModActions/functions/actualKickMemberCmd.ts @@ -67,7 +67,10 @@ export async function actualKickMemberCmd( return; } - const reason = formatReasonWithAttachments(args.reason, msg.attachments); + const config = pluginData.config.get(); + const reason = args.reason + ? formatReasonWithAttachments(args.reason, msg.attachments) + : config.default_reasons?.kick || "No reason specified"; const kickResult = await kickMember(pluginData, memberToKick, reason, { contactMethods, diff --git a/backend/src/plugins/ModActions/functions/actualMuteUserCmd.ts b/backend/src/plugins/ModActions/functions/actualMuteUserCmd.ts index 5c628c4e..799d8032 100644 --- a/backend/src/plugins/ModActions/functions/actualMuteUserCmd.ts +++ b/backend/src/plugins/ModActions/functions/actualMuteUserCmd.ts @@ -42,7 +42,11 @@ export async function actualMuteUserCmd( } const timeUntilUnmute = args.time && humanizeDuration(args.time); - const reason = args.reason ? formatReasonWithAttachments(args.reason, [...msg.attachments.values()]) : undefined; + + const config = pluginData.config.get(); + const reason = args.reason + ? formatReasonWithAttachments(args.reason, [...msg.attachments.values()]) + : config.default_reasons?.mute || "No reason specified"; let muteResult: MuteResult; const mutesPlugin = pluginData.getPlugin(MutesPlugin); diff --git a/backend/src/plugins/ModActions/functions/banUserId.ts b/backend/src/plugins/ModActions/functions/banUserId.ts index 1fb3ba5e..f8b13fe7 100644 --- a/backend/src/plugins/ModActions/functions/banUserId.ts +++ b/backend/src/plugins/ModActions/functions/banUserId.ts @@ -33,7 +33,6 @@ export async function banUserId( banOptions: BanOptions = {}, banTime?: number, ): Promise { - const config = pluginData.config.get(); const user = await resolveUser(pluginData.client, userId); if (!user.id) { return { @@ -42,7 +41,8 @@ export async function banUserId( }; } - reason = reason || (config.default_ban_reason || "No reason specified"); + const config = pluginData.config.get(); + reason ||= config.default_reasons?.ban || "No reason specified"; // Attempt to message the user *before* banning them, as doing it after may not be possible const member = await resolveMember(pluginData.client, pluginData.guild, userId); diff --git a/backend/src/plugins/ModActions/types.ts b/backend/src/plugins/ModActions/types.ts index 4bcb6a02..0291c5d5 100644 --- a/backend/src/plugins/ModActions/types.ts +++ b/backend/src/plugins/ModActions/types.ts @@ -23,7 +23,13 @@ export const ConfigSchema = t.type({ kick_message: tNullable(t.string), ban_message: tNullable(t.string), tempban_message: tNullable(t.string), - default_ban_reason: tNullable(t.string), + default_reasons: tNullable( + t.type({ + mute: t.string, + kick: t.string, + ban: t.string, + }), + ), alert_on_rejoin: t.boolean, alert_channel: tNullable(t.string), warn_notify_enabled: t.boolean, @@ -92,36 +98,36 @@ export interface IIgnoredEvent { export type WarnResult = | { - status: "failed"; - error: string; - } + status: "failed"; + error: string; + } | { - status: "success"; - case: Case; - notifyResult: UserNotificationResult; - }; + status: "success"; + case: Case; + notifyResult: UserNotificationResult; + }; export type KickResult = | { - status: "failed"; - error: string; - } + status: "failed"; + error: string; + } | { - status: "success"; - case: Case; - notifyResult: UserNotificationResult; - }; + status: "success"; + case: Case; + notifyResult: UserNotificationResult; + }; export type BanResult = | { - status: "failed"; - error: string; - } + status: "failed"; + error: string; + } | { - status: "success"; - case: Case; - notifyResult: UserNotificationResult; - }; + status: "success"; + case: Case; + notifyResult: UserNotificationResult; + }; export type WarnMemberNotifyRetryCallback = () => boolean | Promise; From 8da0529b60add8eb2416c0aeacf4db5bb8687d59 Mon Sep 17 00:00:00 2001 From: iamshoXy Date: Fri, 19 Apr 2024 18:37:54 +0200 Subject: [PATCH 4/4] Limit reason to 512 characters --- backend/src/plugins/ModActions/types.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/src/plugins/ModActions/types.ts b/backend/src/plugins/ModActions/types.ts index cbadefe9..1f9f0b25 100644 --- a/backend/src/plugins/ModActions/types.ts +++ b/backend/src/plugins/ModActions/types.ts @@ -25,9 +25,9 @@ export const zModActionsConfig = z.strictObject({ tempban_message: z.nullable(z.string()), default_reasons: z.nullable( z.object({ - mute: z.string(), - kick: z.string(), - ban: z.string(), + mute: z.string().max(512).nullable(), + kick: z.string().max(512).nullable(), + ban: z.string().max(512).nullable(), }), ), alert_on_rejoin: z.boolean(),