From a96f8a89f36ccb980334da2274385373aa3ffb24 Mon Sep 17 00:00:00 2001 From: Ven Date: Mon, 14 Nov 2022 16:22:50 +0100 Subject: [PATCH] MessageLogger: fixes + ignoreSelf & ignoreBots option (#213) --- src/api/MessageEvents.ts | 2 +- src/components/ErrorBoundary.tsx | 2 +- src/components/PluginSettings/index.tsx | 2 +- src/debug/Tracer.ts | 2 +- src/plugins/index.ts | 2 +- src/plugins/messageLogger/index.tsx | 60 +++++++++++++++++++++++-- src/utils/{logger.ts => Logger.ts} | 0 src/utils/index.ts | 3 +- src/utils/updater.ts | 2 +- src/webpack/patchWebpack.ts | 2 +- src/webpack/webpack.ts | 2 +- 11 files changed, 66 insertions(+), 13 deletions(-) rename src/utils/{logger.ts => Logger.ts} (100%) diff --git a/src/api/MessageEvents.ts b/src/api/MessageEvents.ts index ea2dfd6f9..02638b2bd 100644 --- a/src/api/MessageEvents.ts +++ b/src/api/MessageEvents.ts @@ -18,7 +18,7 @@ import type { Channel, Message } from "discord-types/general"; -import Logger from "../utils/logger"; +import Logger from "../utils/Logger"; import { MessageStore } from "../webpack/common"; const MessageEventsLogger = new Logger("MessageEvents", "#e5c890"); diff --git a/src/components/ErrorBoundary.tsx b/src/components/ErrorBoundary.tsx index 870371ea9..4429f72f8 100644 --- a/src/components/ErrorBoundary.tsx +++ b/src/components/ErrorBoundary.tsx @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -import Logger from "../utils/logger"; +import Logger from "../utils/Logger"; import { LazyComponent } from "../utils/misc"; import { Margins, React } from "../webpack/common"; import { ErrorCard } from "./ErrorCard"; diff --git a/src/components/PluginSettings/index.tsx b/src/components/PluginSettings/index.tsx index fef8c3053..9600ef702 100644 --- a/src/components/PluginSettings/index.tsx +++ b/src/components/PluginSettings/index.tsx @@ -22,7 +22,7 @@ import { showNotice } from "../../api/Notices"; import { Settings, useSettings } from "../../api/settings"; import { startDependenciesRecursive, startPlugin, stopPlugin } from "../../plugins"; import { ChangeList } from "../../utils/ChangeList"; -import Logger from "../../utils/logger"; +import Logger from "../../utils/Logger"; import { classes, LazyComponent, lazyWebpack } from "../../utils/misc"; import { openModalLazy } from "../../utils/modal"; import { Plugin } from "../../utils/types"; diff --git a/src/debug/Tracer.ts b/src/debug/Tracer.ts index 86b5786d5..1e81691a7 100644 --- a/src/debug/Tracer.ts +++ b/src/debug/Tracer.ts @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -import Logger from "../utils/logger"; +import Logger from "../utils/Logger"; if (IS_DEV) { var traces = {} as Record; diff --git a/src/plugins/index.ts b/src/plugins/index.ts index 268e20097..68a76cb25 100644 --- a/src/plugins/index.ts +++ b/src/plugins/index.ts @@ -21,7 +21,7 @@ import Plugins from "~plugins"; import { registerCommand, unregisterCommand } from "../api/Commands"; import { Settings } from "../api/settings"; import { traceFunction } from "../debug/Tracer"; -import Logger from "../utils/logger"; +import Logger from "../utils/Logger"; import { Patch, Plugin } from "../utils/types"; const logger = new Logger("PluginManager", "#a6d189"); diff --git a/src/plugins/messageLogger/index.tsx b/src/plugins/messageLogger/index.tsx index 476d092eb..7b6bf56bb 100644 --- a/src/plugins/messageLogger/index.tsx +++ b/src/plugins/messageLogger/index.tsx @@ -19,9 +19,11 @@ import { Settings } from "../../api/settings"; import ErrorBoundary from "../../components/ErrorBoundary"; import { Devs } from "../../utils/constants"; +import Logger from "../../utils/Logger"; import { lazyWebpack } from "../../utils/misc"; import definePlugin, { OptionType } from "../../utils/types"; import { filters } from "../../webpack"; +import { Parser, UserStore } from "../../webpack/common"; function addDeleteStyleClass() { if (Settings.plugins.MessageLogger.deleteStyle === "text") { @@ -36,7 +38,7 @@ function addDeleteStyleClass() { export default definePlugin({ name: "MessageLogger", description: "Temporarily logs deleted and edited messages.", - authors: [Devs.rushii], + authors: [Devs.rushii, Devs.Ven], timestampModule: null as any, moment: null as Function | null, @@ -49,6 +51,10 @@ export default definePlugin({ color: #f04747; } + .messageLogger-deleted [class^="buttons"] { + display: none; + } + .messageLogger-deleted-attachment { filter: grayscale(1); } @@ -93,7 +99,7 @@ export default definePlugin({ return (
- {edit.content} + {Parser.parse(edit.content)} addDeleteStyleClass() + }, + ignoreBots: { + type: OptionType.BOOLEAN, + description: "Whether to ignore messages by bots", + default: false + }, + ignoreSelf: { + type: OptionType.BOOLEAN, + description: "Whether to ignore messages by yourself", + default: false } }, + handleDelete(cache: any, data: { ids: string[], id: string; }, isBulk: boolean) { + try { + if (cache == null || (!isBulk && !cache.has(data.id))) return cache; + + const { ignoreBots, ignoreSelf } = Settings.plugins.MessageLogger; + const myId = UserStore.getCurrentUser().id; + + function mutate(id: string) { + const msg = cache.get(id); + if (!msg) return; + + const EPHEMERAL = 64; + const shouldIgnore = (msg.flags & EPHEMERAL) === EPHEMERAL || + ignoreBots && msg.author?.bot || + ignoreSelf && msg.author?.id === myId; + + if (shouldIgnore) { + cache = cache.remove(id); + } else { + cache = cache.update(id, m => m + .set("deleted", true) + .set("attachments", m.attachments.map(a => (a.deleted = true, a)))); + } + } + + if (isBulk) { + data.ids.forEach(mutate); + } else { + mutate(data.id); + } + } catch (e) { + new Logger("MessageLogger").error("Error during handleDelete", e); + } + return cache; + }, + // Based on canary 9ab8626bcebceaea6da570b9c586172d02b9c996 patches: [ { @@ -139,7 +191,7 @@ export default definePlugin({ replace: "MESSAGE_DELETE:function($1){" + " var cache = $2getOrCreate($1.channelId);" + - " cache = cache.update($1.id,m=>m.set('deleted', true).set('attachments', m.attachments.map(a => (a.deleted = true, a))));" + + " cache = Vencord.Plugins.plugins.MessageLogger.handleDelete(cache, $1, false);" + " $2commit(cache);" + "}," }, @@ -149,7 +201,7 @@ export default definePlugin({ replace: "MESSAGE_DELETE_BULK:function($1){" + " var cache = $2getOrCreate($1.channelId);" + - " cache = $1.ids.reduce((pv,cv) => pv.update(cv, m => m.set('deleted', true).set('attachments', m.attachments.map(a => (a.deleted = true, a)))), cache);" + + " cache = Vencord.Plugins.plugins.MessageLogger.handleDelete(cache, $1, true);" + " $2commit(cache);" + "}," }, diff --git a/src/utils/logger.ts b/src/utils/Logger.ts similarity index 100% rename from src/utils/logger.ts rename to src/utils/Logger.ts diff --git a/src/utils/index.ts b/src/utils/index.ts index 22504ce2c..41e1597a1 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -21,9 +21,10 @@ export * as Constants from "./constants"; export * from "./debounce"; export * as Discord from "./discord"; export { default as IpcEvents } from "./IpcEvents"; -export { default as Logger } from "./logger"; +export { default as Logger } from "./Logger"; export * from "./misc"; export * as Modals from "./modal"; export * from "./onceDefined"; export * from "./proxyLazy"; export * from "./Queue"; + diff --git a/src/utils/updater.ts b/src/utils/updater.ts index ea2319f9d..2ea4953fc 100644 --- a/src/utils/updater.ts +++ b/src/utils/updater.ts @@ -19,7 +19,7 @@ import gitHash from "~git-hash"; import IpcEvents from "./IpcEvents"; -import Logger from "./logger"; +import Logger from "./Logger"; import { IpcRes } from "./types"; export const UpdateLogger = new Logger("Updater", "white"); diff --git a/src/webpack/patchWebpack.ts b/src/webpack/patchWebpack.ts index 40a16a62b..e17ddfcfc 100644 --- a/src/webpack/patchWebpack.ts +++ b/src/webpack/patchWebpack.ts @@ -17,7 +17,7 @@ */ import { WEBPACK_CHUNK } from "../utils/constants"; -import Logger from "../utils/logger"; +import Logger from "../utils/Logger"; import { _initWebpack } from "."; let webpackChunk: any[]; diff --git a/src/webpack/webpack.ts b/src/webpack/webpack.ts index b78afd084..df3213272 100644 --- a/src/webpack/webpack.ts +++ b/src/webpack/webpack.ts @@ -19,7 +19,7 @@ import type { WebpackInstance } from "discord-types/other"; import { traceFunction } from "../debug/Tracer"; -import Logger from "../utils/logger"; +import Logger from "../utils/Logger"; import { proxyLazy } from "../utils/proxyLazy"; const logger = new Logger("Webpack");