From 529a0bfc0ef37edb8728ae634f2b3bdc0ffba174 Mon Sep 17 00:00:00 2001 From: Hiroyuki Date: Sat, 4 Sep 2021 22:14:16 -0400 Subject: [PATCH 1/5] feat(mod-actions): require reason --- backend/src/plugins/ModActions/ModActionsPlugin.ts | 1 + backend/src/plugins/ModActions/commands/BanCmd.ts | 7 +++++++ backend/src/plugins/ModActions/commands/NoteCmd.ts | 7 ++++++- backend/src/plugins/ModActions/commands/UnbanCmd.ts | 5 +++++ backend/src/plugins/ModActions/commands/WarnCmd.ts | 4 ++++ .../plugins/ModActions/functions/actualKickMemberCmd.ts | 5 +++++ .../src/plugins/ModActions/functions/actualMuteUserCmd.ts | 5 +++++ .../plugins/ModActions/functions/actualUnmuteUserCmd.ts | 5 +++++ backend/src/plugins/ModActions/types.ts | 1 + 9 files changed, 39 insertions(+), 1 deletion(-) diff --git a/backend/src/plugins/ModActions/ModActionsPlugin.ts b/backend/src/plugins/ModActions/ModActionsPlugin.ts index 4453efe8..dab915b2 100644 --- a/backend/src/plugins/ModActions/ModActionsPlugin.ts +++ b/backend/src/plugins/ModActions/ModActionsPlugin.ts @@ -84,6 +84,7 @@ const defaultOptions = { can_deletecase: false, can_act_as_other: false, create_cases_for_manual_actions: true, + require_reason: ["warn"], }, overrides: [ { diff --git a/backend/src/plugins/ModActions/commands/BanCmd.ts b/backend/src/plugins/ModActions/commands/BanCmd.ts index 40a352c7..4ff77218 100644 --- a/backend/src/plugins/ModActions/commands/BanCmd.ts +++ b/backend/src/plugins/ModActions/commands/BanCmd.ts @@ -15,6 +15,7 @@ import { isBanned } from "../functions/isBanned"; import { readContactMethodsFromArgs } from "../functions/readContactMethodsFromArgs"; import { modActionsCmd } from "../types"; import { LogsPlugin } from "../../Logs/LogsPlugin"; +import { TextChannel } from "discord.js"; const opts = { mod: ct.member({ option: true }), @@ -52,7 +53,13 @@ export const BanCmd = modActionsCmd({ } const time = args["time"] ? args["time"] : null; + const config = pluginData.config.get(); const reason = formatReasonWithAttachments(args.reason, [...msg.attachments.values()]); + if (!reason && config.require_reason.includes("ban")) { + sendErrorMessage(pluginData, msg.channel, "You must include a reason in your ban"); + return; + } + const memberToBan = await resolveMember(pluginData.client, pluginData.guild, user.id); // The moderator who did the action is the message author or, if used, the specified -mod let mod = msg.member; diff --git a/backend/src/plugins/ModActions/commands/NoteCmd.ts b/backend/src/plugins/ModActions/commands/NoteCmd.ts index 569831a8..fbb74261 100644 --- a/backend/src/plugins/ModActions/commands/NoteCmd.ts +++ b/backend/src/plugins/ModActions/commands/NoteCmd.ts @@ -32,7 +32,12 @@ export const NoteCmd = modActionsCmd({ } const userName = user.tag; - const reason = formatReasonWithAttachments(args.note, [...msg.attachments.values()]); + const config = pluginData.config.get(); + const reason = formatReasonWithAttachments(args.reason, [...msg.attachments.values()]); + if (!reason && config.require_reason.includes("note")) { + sendErrorMessage(pluginData, msg.channel, "You must include a reason in your note"); + return; + } const casesPlugin = pluginData.getPlugin(CasesPlugin); const createdCase = await casesPlugin.createCase({ diff --git a/backend/src/plugins/ModActions/commands/UnbanCmd.ts b/backend/src/plugins/ModActions/commands/UnbanCmd.ts index eb235917..53b3b3ec 100644 --- a/backend/src/plugins/ModActions/commands/UnbanCmd.ts +++ b/backend/src/plugins/ModActions/commands/UnbanCmd.ts @@ -48,7 +48,12 @@ export const UnbanCmd = modActionsCmd({ } pluginData.state.serverLogs.ignoreLog(LogType.MEMBER_UNBAN, user.id); + const config = pluginData.config.get(); const reason = formatReasonWithAttachments(args.reason, [...msg.attachments.values()]); + if (!reason && config.require_reason.includes("unban")) { + sendErrorMessage(pluginData, msg.channel, "You must include a reason in your unban"); + return; + } try { ignoreEvent(pluginData, IgnoredEventType.Unban, user.id); diff --git a/backend/src/plugins/ModActions/commands/WarnCmd.ts b/backend/src/plugins/ModActions/commands/WarnCmd.ts index 03d79b76..7ce7caeb 100644 --- a/backend/src/plugins/ModActions/commands/WarnCmd.ts +++ b/backend/src/plugins/ModActions/commands/WarnCmd.ts @@ -64,6 +64,10 @@ export const WarnCmd = modActionsCmd({ const config = pluginData.config.get(); const reason = formatReasonWithAttachments(args.reason, [...msg.attachments.values()]); + if (!reason && config.require_reason.includes("warn")) { + sendErrorMessage(pluginData, msg.channel, "You must include a reason in your warning"); + return; + } const casesPlugin = pluginData.getPlugin(CasesPlugin); const priorWarnAmount = await casesPlugin.getCaseTypeAmountForUserId(memberToWarn.id, CaseTypes.Warn); diff --git a/backend/src/plugins/ModActions/functions/actualKickMemberCmd.ts b/backend/src/plugins/ModActions/functions/actualKickMemberCmd.ts index 92178edc..b97a009a 100644 --- a/backend/src/plugins/ModActions/functions/actualKickMemberCmd.ts +++ b/backend/src/plugins/ModActions/functions/actualKickMemberCmd.ts @@ -67,7 +67,12 @@ export async function actualKickMemberCmd( return; } + const config = pluginData.config.get(); const reason = formatReasonWithAttachments(args.reason, msg.attachments); + if (!reason && config.require_reason.includes("kick")) { + sendErrorMessage(pluginData, msg.channel, "You must include a reason in your kick"); + return; + } 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 f790604a..c5395eca 100644 --- a/backend/src/plugins/ModActions/functions/actualMuteUserCmd.ts +++ b/backend/src/plugins/ModActions/functions/actualMuteUserCmd.ts @@ -42,7 +42,12 @@ export async function actualMuteUserCmd( } const timeUntilUnmute = args.time && humanizeDuration(args.time); + const config = pluginData.config.get(); const reason = args.reason ? formatReasonWithAttachments(args.reason, [...msg.attachments.values()]) : undefined; + if (!reason && config.require_reason.includes("mute")) { + sendErrorMessage(pluginData, msg.channel as TextChannel, "You must include a reason in your mute"); + return; + } let muteResult: MuteResult; const mutesPlugin = pluginData.getPlugin(MutesPlugin); diff --git a/backend/src/plugins/ModActions/functions/actualUnmuteUserCmd.ts b/backend/src/plugins/ModActions/functions/actualUnmuteUserCmd.ts index 46ab7be6..3d17f4d4 100644 --- a/backend/src/plugins/ModActions/functions/actualUnmuteUserCmd.ts +++ b/backend/src/plugins/ModActions/functions/actualUnmuteUserCmd.ts @@ -27,7 +27,12 @@ export async function actualUnmuteCmd( pp = msg.author; } + const config = pluginData.config.get(); const reason = args.reason ? formatReasonWithAttachments(args.reason, [...msg.attachments.values()]) : undefined; + if (!reason && config.require_reason.includes("unmute")) { + sendErrorMessage(pluginData, msg.channel as TextChannel, "You must include a reason in your unmute"); + return; + } const mutesPlugin = pluginData.getPlugin(MutesPlugin); const result = await mutesPlugin.unmuteUser(user.id, args.time, { diff --git a/backend/src/plugins/ModActions/types.ts b/backend/src/plugins/ModActions/types.ts index b8c07270..3beef228 100644 --- a/backend/src/plugins/ModActions/types.ts +++ b/backend/src/plugins/ModActions/types.ts @@ -46,6 +46,7 @@ export const ConfigSchema = t.type({ can_deletecase: t.boolean, can_act_as_other: t.boolean, create_cases_for_manual_actions: t.boolean, + require_reason: t.array(t.string), }); export type TConfigSchema = t.TypeOf; From e59c874705b68d5c332c6aadee385b0e24b01f75 Mon Sep 17 00:00:00 2001 From: Hiroyuki Date: Mon, 6 Sep 2021 18:59:21 -0400 Subject: [PATCH 2/5] refactor: remove unused import --- backend/src/plugins/ModActions/commands/BanCmd.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/src/plugins/ModActions/commands/BanCmd.ts b/backend/src/plugins/ModActions/commands/BanCmd.ts index 4ff77218..b75ac50f 100644 --- a/backend/src/plugins/ModActions/commands/BanCmd.ts +++ b/backend/src/plugins/ModActions/commands/BanCmd.ts @@ -15,7 +15,6 @@ import { isBanned } from "../functions/isBanned"; import { readContactMethodsFromArgs } from "../functions/readContactMethodsFromArgs"; import { modActionsCmd } from "../types"; import { LogsPlugin } from "../../Logs/LogsPlugin"; -import { TextChannel } from "discord.js"; const opts = { mod: ct.member({ option: true }), From e5493742f5b9d9983ff562df6ac9cfef320b9e22 Mon Sep 17 00:00:00 2001 From: Hiroyuki Date: Mon, 6 Sep 2021 19:00:03 -0400 Subject: [PATCH 3/5] fix(mod-actions): note command reason check --- backend/src/plugins/ModActions/commands/NoteCmd.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/plugins/ModActions/commands/NoteCmd.ts b/backend/src/plugins/ModActions/commands/NoteCmd.ts index fbb74261..7357bf32 100644 --- a/backend/src/plugins/ModActions/commands/NoteCmd.ts +++ b/backend/src/plugins/ModActions/commands/NoteCmd.ts @@ -33,7 +33,7 @@ export const NoteCmd = modActionsCmd({ const userName = user.tag; const config = pluginData.config.get(); - const reason = formatReasonWithAttachments(args.reason, [...msg.attachments.values()]); + const reason = formatReasonWithAttachments(args.note, [...msg.attachments.values()]); if (!reason && config.require_reason.includes("note")) { sendErrorMessage(pluginData, msg.channel, "You must include a reason in your note"); return; From c9a2259668a6c8027ad102474f202ef2f39bac5b Mon Sep 17 00:00:00 2001 From: Hiroyuki Date: Tue, 14 Sep 2021 11:25:45 -0400 Subject: [PATCH 4/5] refactor: require reason on warnings and notes --- backend/src/plugins/ModActions/commands/NoteCmd.ts | 13 ++++++------- backend/src/plugins/ModActions/commands/WarnCmd.ts | 2 +- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/backend/src/plugins/ModActions/commands/NoteCmd.ts b/backend/src/plugins/ModActions/commands/NoteCmd.ts index 7357bf32..d3f34868 100644 --- a/backend/src/plugins/ModActions/commands/NoteCmd.ts +++ b/backend/src/plugins/ModActions/commands/NoteCmd.ts @@ -32,10 +32,9 @@ export const NoteCmd = modActionsCmd({ } const userName = user.tag; - const config = pluginData.config.get(); - const reason = formatReasonWithAttachments(args.note, [...msg.attachments.values()]); - if (!reason && config.require_reason.includes("note")) { - sendErrorMessage(pluginData, msg.channel, "You must include a reason in your note"); + const content = formatReasonWithAttachments(args.note, [...msg.attachments.values()]); + if (!content) { + sendErrorMessage(pluginData, msg.channel, "You must include content for your note"); return; } @@ -44,18 +43,18 @@ export const NoteCmd = modActionsCmd({ userId: user.id, modId: msg.author.id, type: CaseTypes.Note, - reason, + reason: content, }); pluginData.getPlugin(LogsPlugin).logMemberNote({ mod: msg.author, user, caseNumber: createdCase.case_number, - reason, + reason: content, }); sendSuccessMessage(pluginData, msg.channel, `Note added on **${userName}** (Case #${createdCase.case_number})`); - pluginData.state.events.emit("note", user.id, reason); + pluginData.state.events.emit("note", user.id, content); }, }); diff --git a/backend/src/plugins/ModActions/commands/WarnCmd.ts b/backend/src/plugins/ModActions/commands/WarnCmd.ts index 7ce7caeb..49683ba3 100644 --- a/backend/src/plugins/ModActions/commands/WarnCmd.ts +++ b/backend/src/plugins/ModActions/commands/WarnCmd.ts @@ -64,7 +64,7 @@ export const WarnCmd = modActionsCmd({ const config = pluginData.config.get(); const reason = formatReasonWithAttachments(args.reason, [...msg.attachments.values()]); - if (!reason && config.require_reason.includes("warn")) { + if (!reason) { sendErrorMessage(pluginData, msg.channel, "You must include a reason in your warning"); return; } From be8fea1236309859d45816184a60af7e90b1083a Mon Sep 17 00:00:00 2001 From: Hiroyuki Date: Mon, 11 Oct 2021 01:51:00 -0400 Subject: [PATCH 5/5] fix: remove "warn" from require_reason preset --- backend/src/plugins/ModActions/ModActionsPlugin.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/src/plugins/ModActions/ModActionsPlugin.ts b/backend/src/plugins/ModActions/ModActionsPlugin.ts index dab915b2..4453efe8 100644 --- a/backend/src/plugins/ModActions/ModActionsPlugin.ts +++ b/backend/src/plugins/ModActions/ModActionsPlugin.ts @@ -84,7 +84,6 @@ const defaultOptions = { can_deletecase: false, can_act_as_other: false, create_cases_for_manual_actions: true, - require_reason: ["warn"], }, overrides: [ {