From e131c77e2044c4446f070a47b2e5d24f74063af1 Mon Sep 17 00:00:00 2001
From: Dark <7890309+DarkView@users.noreply.github.com>
Date: Sun, 2 Aug 2020 02:30:01 +0200
Subject: [PATCH] Allow for caseNumber in Logs, showing the case number -
 repalce log evts

---
 backend/src/plugins/Logs/LogsPlugin.ts        |  3 --
 .../plugins/Logs/events/LogsGuildBanEvts.ts   | 54 -------------------
 .../ModActions/commands/ForcebanCmd.ts        |  1 +
 .../plugins/ModActions/commands/NoteCmd.ts    |  1 +
 .../plugins/ModActions/commands/UnbanCmd.ts   |  1 +
 .../events/CreateBanCaseOnManualBanEvt.ts     | 23 ++++++--
 .../events/CreateKickCaseOnManualKickEvt.ts   |  4 +-
 .../events/CreateUnbanCaseOnManualUnbanEvt.ts | 18 ++++++-
 .../plugins/ModActions/functions/banUserId.ts |  1 +
 .../ModActions/functions/kickMember.ts        |  1 +
 .../ModActions/functions/warnMember.ts        |  1 +
 .../src/plugins/Mutes/functions/muteUser.ts   |  5 +-
 .../src/plugins/Mutes/functions/unmuteUser.ts |  2 +
 13 files changed, 51 insertions(+), 64 deletions(-)
 delete mode 100644 backend/src/plugins/Logs/events/LogsGuildBanEvts.ts

diff --git a/backend/src/plugins/Logs/LogsPlugin.ts b/backend/src/plugins/Logs/LogsPlugin.ts
index 7a143a0f..243c83e5 100644
--- a/backend/src/plugins/Logs/LogsPlugin.ts
+++ b/backend/src/plugins/Logs/LogsPlugin.ts
@@ -11,7 +11,6 @@ import { onMessageDeleteBulk } from "./util/onMessageDeleteBulk";
 import { onMessageUpdate } from "./util/onMessageUpdate";
 import { LogsGuildMemberAddEvt } from "./events/LogsGuildMemberAddEvt";
 import { LogsGuildMemberRemoveEvt } from "./events/LogsGuildMemberRemoveEvt";
-import { LogsGuildBanAddEvt, LogsGuildBanRemoveEvt } from "./events/LogsGuildBanEvts";
 import { LogsGuildMemberUpdateEvt, LogsUserUpdateEvt } from "./events/LogsUserUpdateEvts";
 import { LogsChannelCreateEvt, LogsChannelDeleteEvt } from "./events/LogsChannelModifyEvts";
 import { LogsRoleCreateEvt, LogsRoleDeleteEvt } from "./events/LogsRoleModifyEvts";
@@ -52,8 +51,6 @@ export const LogsPlugin = zeppelinPlugin<LogsPluginType>()("logs", {
   events: [
     LogsGuildMemberAddEvt,
     LogsGuildMemberRemoveEvt,
-    LogsGuildBanAddEvt,
-    LogsGuildBanRemoveEvt,
     LogsGuildMemberUpdateEvt,
     LogsUserUpdateEvt,
     LogsChannelCreateEvt,
diff --git a/backend/src/plugins/Logs/events/LogsGuildBanEvts.ts b/backend/src/plugins/Logs/events/LogsGuildBanEvts.ts
deleted file mode 100644
index 25c4c808..00000000
--- a/backend/src/plugins/Logs/events/LogsGuildBanEvts.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import { logsEvent } from "../types";
-import { stripObjectToScalars, findRelevantAuditLogEntry, UnknownUser } from "src/utils";
-import { LogType } from "src/data/LogType";
-import { Constants as ErisConstants } from "eris";
-
-export const LogsGuildBanAddEvt = logsEvent({
-  event: "guildBanAdd",
-
-  async listener(meta) {
-    const pluginData = meta.pluginData;
-    const user = meta.args.user;
-
-    const relevantAuditLogEntry = await findRelevantAuditLogEntry(
-      pluginData.guild,
-      ErisConstants.AuditLogActions.MEMBER_BAN_ADD,
-      user.id,
-    );
-    const mod = relevantAuditLogEntry ? relevantAuditLogEntry.user : new UnknownUser();
-
-    pluginData.state.guildLogs.log(
-      LogType.MEMBER_BAN,
-      {
-        mod: stripObjectToScalars(mod),
-        user: stripObjectToScalars(user),
-      },
-      user.id,
-    );
-  },
-});
-
-export const LogsGuildBanRemoveEvt = logsEvent({
-  event: "guildBanRemove",
-
-  async listener(meta) {
-    const pluginData = meta.pluginData;
-    const user = meta.args.user;
-
-    const relevantAuditLogEntry = await findRelevantAuditLogEntry(
-      pluginData.guild,
-      ErisConstants.AuditLogActions.MEMBER_BAN_REMOVE,
-      user.id,
-    );
-    const mod = relevantAuditLogEntry ? relevantAuditLogEntry.user : new UnknownUser();
-
-    pluginData.state.guildLogs.log(
-      LogType.MEMBER_UNBAN,
-      {
-        mod: stripObjectToScalars(mod),
-        userId: user.id,
-      },
-      user.id,
-    );
-  },
-});
diff --git a/backend/src/plugins/ModActions/commands/ForcebanCmd.ts b/backend/src/plugins/ModActions/commands/ForcebanCmd.ts
index d75d158c..0fc1ddbe 100644
--- a/backend/src/plugins/ModActions/commands/ForcebanCmd.ts
+++ b/backend/src/plugins/ModActions/commands/ForcebanCmd.ts
@@ -87,6 +87,7 @@ export const ForcebanCmd = modActionsCommand({
     pluginData.state.serverLogs.log(LogType.MEMBER_FORCEBAN, {
       mod: stripObjectToScalars(mod.user),
       userId: user.id,
+      caseNumber: createdCase.case_number,
       reason,
     });
   },
diff --git a/backend/src/plugins/ModActions/commands/NoteCmd.ts b/backend/src/plugins/ModActions/commands/NoteCmd.ts
index c07eab6f..e7ad485d 100644
--- a/backend/src/plugins/ModActions/commands/NoteCmd.ts
+++ b/backend/src/plugins/ModActions/commands/NoteCmd.ts
@@ -36,6 +36,7 @@ export const NoteCmd = modActionsCommand({
     pluginData.state.serverLogs.log(LogType.MEMBER_NOTE, {
       mod: stripObjectToScalars(msg.author),
       user: stripObjectToScalars(user, ["user", "roles"]),
+      caseNumber: createdCase.case_number,
       reason,
     });
 
diff --git a/backend/src/plugins/ModActions/commands/UnbanCmd.ts b/backend/src/plugins/ModActions/commands/UnbanCmd.ts
index 32754c9c..7ad47848 100644
--- a/backend/src/plugins/ModActions/commands/UnbanCmd.ts
+++ b/backend/src/plugins/ModActions/commands/UnbanCmd.ts
@@ -70,6 +70,7 @@ export const UnbanCmd = modActionsCommand({
     pluginData.state.serverLogs.log(LogType.MEMBER_UNBAN, {
       mod: stripObjectToScalars(mod.user),
       userId: user.id,
+      caseNumber: createdCase.case_number,
       reason,
     });
   },
diff --git a/backend/src/plugins/ModActions/events/CreateBanCaseOnManualBanEvt.ts b/backend/src/plugins/ModActions/events/CreateBanCaseOnManualBanEvt.ts
index 764055f3..eeace843 100644
--- a/backend/src/plugins/ModActions/events/CreateBanCaseOnManualBanEvt.ts
+++ b/backend/src/plugins/ModActions/events/CreateBanCaseOnManualBanEvt.ts
@@ -6,6 +6,8 @@ import { Constants as ErisConstants } from "eris";
 import { safeFindRelevantAuditLogEntry } from "../functions/safeFindRelevantAuditLogEntry";
 import { CasesPlugin } from "../../Cases/CasesPlugin";
 import { CaseTypes } from "../../../data/CaseTypes";
+import { LogType } from "src/data/LogType";
+import { stripObjectToScalars, resolveUser } from "src/utils";
 
 /**
  * Create a BAN case automatically when a user is banned manually.
@@ -26,24 +28,39 @@ export const CreateBanCaseOnManualBanEvt = eventListener<ModActionsPluginType>()
     );
 
     const casesPlugin = pluginData.getPlugin(CasesPlugin);
+
+    let createdCase;
+    let mod = null;
+    let reason = "";
+
     if (relevantAuditLogEntry) {
       const modId = relevantAuditLogEntry.user.id;
       const auditLogId = relevantAuditLogEntry.id;
 
-      casesPlugin.createCase({
+      mod = resolveUser(pluginData.client, modId);
+      reason = relevantAuditLogEntry.reason;
+      createdCase = await casesPlugin.createCase({
         userId: user.id,
         modId,
         type: CaseTypes.Ban,
         auditLogId,
-        reason: relevantAuditLogEntry.reason,
+        reason,
         automatic: true,
       });
     } else {
-      casesPlugin.createCase({
+      createdCase = await casesPlugin.createCase({
         userId: user.id,
         modId: null,
         type: CaseTypes.Ban,
       });
     }
+
+    mod = await mod;
+    pluginData.state.serverLogs.log(LogType.MEMBER_BAN, {
+      mod: mod ? stripObjectToScalars(mod, ["user"]) : null,
+      user: stripObjectToScalars(user, ["user"]),
+      caseNumber: createdCase.case_number,
+      reason,
+    });
   },
 );
diff --git a/backend/src/plugins/ModActions/events/CreateKickCaseOnManualKickEvt.ts b/backend/src/plugins/ModActions/events/CreateKickCaseOnManualKickEvt.ts
index 6606b708..e10e6836 100644
--- a/backend/src/plugins/ModActions/events/CreateKickCaseOnManualKickEvt.ts
+++ b/backend/src/plugins/ModActions/events/CreateKickCaseOnManualKickEvt.ts
@@ -30,13 +30,14 @@ export const CreateKickCaseOnManualKickEvt = eventListener<ModActionsPluginType>
 
     if (kickAuditLogEntry) {
       const existingCaseForThisEntry = await pluginData.state.cases.findByAuditLogId(kickAuditLogEntry.id);
+      let createdCase;
       if (existingCaseForThisEntry) {
         logger.warn(
           `Tried to create duplicate case for audit log entry ${kickAuditLogEntry.id}, existing case id ${existingCaseForThisEntry.id}`,
         );
       } else {
         const casesPlugin = pluginData.getPlugin(CasesPlugin);
-        casesPlugin.createCase({
+        createdCase = await casesPlugin.createCase({
           userId: member.id,
           modId: kickAuditLogEntry.user.id,
           type: CaseTypes.Kick,
@@ -49,6 +50,7 @@ export const CreateKickCaseOnManualKickEvt = eventListener<ModActionsPluginType>
       pluginData.state.serverLogs.log(LogType.MEMBER_KICK, {
         user: stripObjectToScalars(member.user),
         mod: stripObjectToScalars(kickAuditLogEntry.user),
+        caseNumber: createdCase.case_number,
       });
     }
   },
diff --git a/backend/src/plugins/ModActions/events/CreateUnbanCaseOnManualUnbanEvt.ts b/backend/src/plugins/ModActions/events/CreateUnbanCaseOnManualUnbanEvt.ts
index 9e9fd7a5..4dfde252 100644
--- a/backend/src/plugins/ModActions/events/CreateUnbanCaseOnManualUnbanEvt.ts
+++ b/backend/src/plugins/ModActions/events/CreateUnbanCaseOnManualUnbanEvt.ts
@@ -6,6 +6,8 @@ import { Constants as ErisConstants } from "eris";
 import { safeFindRelevantAuditLogEntry } from "../functions/safeFindRelevantAuditLogEntry";
 import { CasesPlugin } from "../../Cases/CasesPlugin";
 import { CaseTypes } from "../../../data/CaseTypes";
+import { stripObjectToScalars, resolveUser } from "src/utils";
+import { LogType } from "src/data/LogType";
 
 /**
  * Create an UNBAN case automatically when a user is unbanned manually.
@@ -26,11 +28,16 @@ export const CreateUnbanCaseOnManualUnbanEvt = eventListener<ModActionsPluginTyp
     );
 
     const casesPlugin = pluginData.getPlugin(CasesPlugin);
+
+    let createdCase;
+    let mod = null;
+
     if (relevantAuditLogEntry) {
       const modId = relevantAuditLogEntry.user.id;
       const auditLogId = relevantAuditLogEntry.id;
 
-      casesPlugin.createCase({
+      mod = resolveUser(pluginData.client, modId);
+      createdCase = await casesPlugin.createCase({
         userId: user.id,
         modId,
         type: CaseTypes.Unban,
@@ -38,12 +45,19 @@ export const CreateUnbanCaseOnManualUnbanEvt = eventListener<ModActionsPluginTyp
         automatic: true,
       });
     } else {
-      casesPlugin.createCase({
+      createdCase = await casesPlugin.createCase({
         userId: user.id,
         modId: null,
         type: CaseTypes.Unban,
         automatic: true,
       });
     }
+
+    mod = await mod;
+    pluginData.state.serverLogs.log(LogType.MEMBER_UNBAN, {
+      mod: mod ? stripObjectToScalars(mod, ["user"]) : null,
+      userId: user.id,
+      caseNumber: createdCase.case_number,
+    });
   },
 );
diff --git a/backend/src/plugins/ModActions/functions/banUserId.ts b/backend/src/plugins/ModActions/functions/banUserId.ts
index 7c8a4f94..50112d79 100644
--- a/backend/src/plugins/ModActions/functions/banUserId.ts
+++ b/backend/src/plugins/ModActions/functions/banUserId.ts
@@ -64,6 +64,7 @@ export async function banUserId(
   pluginData.state.serverLogs.log(LogType.MEMBER_BAN, {
     mod: stripObjectToScalars(mod),
     user: stripObjectToScalars(user),
+    caseNumber: createdCase.case_number,
     reason,
   });
 
diff --git a/backend/src/plugins/ModActions/functions/kickMember.ts b/backend/src/plugins/ModActions/functions/kickMember.ts
index f11145c7..f40ed76b 100644
--- a/backend/src/plugins/ModActions/functions/kickMember.ts
+++ b/backend/src/plugins/ModActions/functions/kickMember.ts
@@ -62,6 +62,7 @@ export async function kickMember(
   pluginData.state.serverLogs.log(LogType.MEMBER_KICK, {
     mod: stripObjectToScalars(mod),
     user: stripObjectToScalars(member.user),
+    caseNumber: createdCase.case_number,
     reason,
   });
 
diff --git a/backend/src/plugins/ModActions/functions/warnMember.ts b/backend/src/plugins/ModActions/functions/warnMember.ts
index f958bd44..323f05f1 100644
--- a/backend/src/plugins/ModActions/functions/warnMember.ts
+++ b/backend/src/plugins/ModActions/functions/warnMember.ts
@@ -57,6 +57,7 @@ export async function warnMember(
   pluginData.state.serverLogs.log(LogType.MEMBER_WARN, {
     mod: stripObjectToScalars(mod),
     member: stripObjectToScalars(member, ["user", "roles"]),
+    caseNumber: createdCase.case_number,
     reason,
   });
 
diff --git a/backend/src/plugins/Mutes/functions/muteUser.ts b/backend/src/plugins/Mutes/functions/muteUser.ts
index 104fa703..4989b7ac 100644
--- a/backend/src/plugins/Mutes/functions/muteUser.ts
+++ b/backend/src/plugins/Mutes/functions/muteUser.ts
@@ -15,6 +15,7 @@ import { TextChannel, User } from "eris";
 import { CasesPlugin } from "../../Cases/CasesPlugin";
 import { CaseTypes } from "../../../data/CaseTypes";
 import { LogType } from "../../../data/LogType";
+import { Case } from "src/data/entities/Case";
 
 export async function muteUser(
   pluginData: PluginData<MutesPluginType>,
@@ -106,7 +107,7 @@ export async function muteUser(
 
   // Create/update a case
   const casesPlugin = pluginData.getPlugin(CasesPlugin);
-  let theCase;
+  let theCase: Case;
 
   if (existingMute && existingMute.case_id) {
     // Update old case
@@ -153,12 +154,14 @@ export async function muteUser(
       mod: stripObjectToScalars(mod),
       user: stripObjectToScalars(user),
       time: timeUntilUnmute,
+      caseNumber: theCase.case_number,
       reason,
     });
   } else {
     pluginData.state.serverLogs.log(LogType.MEMBER_MUTE, {
       mod: stripObjectToScalars(mod),
       user: stripObjectToScalars(user),
+      caseNumber: theCase.case_number,
       reason,
     });
   }
diff --git a/backend/src/plugins/Mutes/functions/unmuteUser.ts b/backend/src/plugins/Mutes/functions/unmuteUser.ts
index 6e8af597..cebbdf9b 100644
--- a/backend/src/plugins/Mutes/functions/unmuteUser.ts
+++ b/backend/src/plugins/Mutes/functions/unmuteUser.ts
@@ -72,6 +72,7 @@ export async function unmuteUser(
     pluginData.state.serverLogs.log(LogType.MEMBER_TIMED_UNMUTE, {
       mod: stripObjectToScalars(mod),
       user: stripObjectToScalars(user),
+      caseNumber: createdCase.case_number,
       time: timeUntilUnmute,
       reason: caseArgs.reason,
     });
@@ -79,6 +80,7 @@ export async function unmuteUser(
     pluginData.state.serverLogs.log(LogType.MEMBER_UNMUTE, {
       mod: stripObjectToScalars(mod),
       user: stripObjectToScalars(user),
+      caseNumber: createdCase.case_number,
       reason: caseArgs.reason,
     });
   }