
* update pkgs Signed-off-by: GitHub <noreply@github.com> * new knub typings Signed-off-by: GitHub <noreply@github.com> * more pkg updates Signed-off-by: GitHub <noreply@github.com> * more fixes Signed-off-by: GitHub <noreply@github.com> * channel typings Signed-off-by: GitHub <noreply@github.com> * more message utils typings fixes Signed-off-by: GitHub <noreply@github.com> * migrate permissions Signed-off-by: GitHub <noreply@github.com> * fix: InternalPoster webhookables Signed-off-by: GitHub <noreply@github.com> * djs typings: Attachment & Util Signed-off-by: GitHub <noreply@github.com> * more typings Signed-off-by: GitHub <noreply@github.com> * fix: rename permissionNames Signed-off-by: GitHub <noreply@github.com> * more fixes Signed-off-by: GitHub <noreply@github.com> * half the number of errors * knub commands => messageCommands Signed-off-by: GitHub <noreply@github.com> * configPreprocessor => configParser Signed-off-by: GitHub <noreply@github.com> * fix channel.messages Signed-off-by: GitHub <noreply@github.com> * revert automod any typing Signed-off-by: GitHub <noreply@github.com> * more configParser typings Signed-off-by: GitHub <noreply@github.com> * revert Signed-off-by: GitHub <noreply@github.com> * remove knub type params Signed-off-by: GitHub <noreply@github.com> * fix more MessageEmbed / MessageOptions Signed-off-by: GitHub <noreply@github.com> * dumb commit for @almeidx to see why this is stupid Signed-off-by: GitHub <noreply@github.com> * temp disable custom_events Signed-off-by: GitHub <noreply@github.com> * more minor typings fixes - 23 err left Signed-off-by: GitHub <noreply@github.com> * update djs dep * +debug build method (revert this) Signed-off-by: GitHub <noreply@github.com> * Revert "+debug build method (revert this)" This reverts commit a80af1e729b742d1aad1097df538d224fbd32ce7. * Redo +debug build (Revert this) Signed-off-by: GitHub <noreply@github.com> * uniform before/after Load shorthands Signed-off-by: GitHub <noreply@github.com> * remove unused imports & add prettier plugin Signed-off-by: GitHub <noreply@github.com> * env fixes for web platform hosting Signed-off-by: GitHub <noreply@github.com> * feat: knub v32-next; related fixes * fix: allow legacy keys in change_perms action * fix: request Message Content intent * fix: use Knub's config validation logic in API * fix(dashboard): fix error when there are no message and/or slash commands in a plugin * fix(automod): start_thread action thread options * fix(CustomEvents): message command types * chore: remove unneeded type annotation * feat: add forum channel icon; use thread icon for news threads * chore: make tslint happy * chore: fix formatting --------- Signed-off-by: GitHub <noreply@github.com> Co-authored-by: almeidx <almeidx@pm.me> Co-authored-by: Dragory <2606411+Dragory@users.noreply.github.com>
98 lines
3.2 KiB
TypeScript
98 lines
3.2 KiB
TypeScript
import { helpers } from "knub";
|
|
import { commandTypeHelpers as ct } from "../../../commandTypes";
|
|
import { Case } from "../../../data/entities/Case";
|
|
import { sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils";
|
|
import { SECONDS, trimLines } from "../../../utils";
|
|
import { CasesPlugin } from "../../Cases/CasesPlugin";
|
|
import { LogsPlugin } from "../../Logs/LogsPlugin";
|
|
import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin";
|
|
import { modActionsCmd } from "../types";
|
|
|
|
export const DeleteCaseCmd = modActionsCmd({
|
|
trigger: ["delete_case", "deletecase"],
|
|
permission: "can_deletecase",
|
|
description: trimLines(`
|
|
Delete the specified case. This operation can *not* be reversed.
|
|
It is generally recommended to use \`!hidecase\` instead when possible.
|
|
`),
|
|
|
|
signature: {
|
|
caseNumber: ct.number({ rest: true }),
|
|
|
|
force: ct.switchOption({ def: false, shortcut: "f" }),
|
|
},
|
|
|
|
async run({ pluginData, message, args }) {
|
|
const failed: number[] = [];
|
|
const validCases: Case[] = [];
|
|
let cancelled = 0;
|
|
|
|
for (const num of args.caseNumber) {
|
|
const theCase = await pluginData.state.cases.findByCaseNumber(num);
|
|
if (!theCase) {
|
|
failed.push(num);
|
|
continue;
|
|
}
|
|
|
|
validCases.push(theCase);
|
|
}
|
|
|
|
if (failed.length === args.caseNumber.length) {
|
|
sendErrorMessage(pluginData, message.channel, "None of the cases were found!");
|
|
return;
|
|
}
|
|
|
|
for (const theCase of validCases) {
|
|
if (!args.force) {
|
|
const cases = pluginData.getPlugin(CasesPlugin);
|
|
const embedContent = await cases.getCaseEmbed(theCase);
|
|
message.channel.send({
|
|
...embedContent,
|
|
content: "Delete the following case? Answer 'Yes' to continue, 'No' to cancel.",
|
|
});
|
|
|
|
const reply = await helpers.waitForReply(pluginData.client, message.channel, message.author.id, 15 * SECONDS);
|
|
const normalizedReply = (reply?.content || "").toLowerCase().trim();
|
|
if (normalizedReply !== "yes" && normalizedReply !== "y") {
|
|
message.channel.send("Cancelled. Case was not deleted.");
|
|
cancelled++;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
const deletedByName = message.author.tag;
|
|
|
|
const timeAndDate = pluginData.getPlugin(TimeAndDatePlugin);
|
|
const deletedAt = timeAndDate.inGuildTz().format(timeAndDate.getDateFormat("pretty_datetime"));
|
|
|
|
await pluginData.state.cases.softDelete(
|
|
theCase.id,
|
|
message.author.id,
|
|
deletedByName,
|
|
`Case deleted by **${deletedByName}** (\`${message.author.id}\`) on ${deletedAt}`,
|
|
);
|
|
|
|
const logs = pluginData.getPlugin(LogsPlugin);
|
|
logs.logCaseDelete({
|
|
mod: message.member,
|
|
case: theCase,
|
|
});
|
|
}
|
|
|
|
const failedAddendum =
|
|
failed.length > 0
|
|
? `\nThe following cases were not found: ${failed.toString().replace(new RegExp(",", "g"), ", ")}`
|
|
: "";
|
|
const amt = validCases.length - cancelled;
|
|
if (amt === 0) {
|
|
sendErrorMessage(pluginData, message.channel, "All deletions were cancelled, no cases were deleted.");
|
|
return;
|
|
}
|
|
|
|
sendSuccessMessage(
|
|
pluginData,
|
|
message.channel,
|
|
`${amt} case${amt === 1 ? " was" : "s were"} deleted!${failedAddendum}`,
|
|
);
|
|
},
|
|
});
|