feat(plugins): ConsoleJanitor (#2659)
This commit is contained in:
parent
99b41dba19
commit
256a85c95c
4 changed files with 161 additions and 3 deletions
5
src/plugins/consoleJanitor/README.md
Normal file
5
src/plugins/consoleJanitor/README.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# ConsoleJanitor
|
||||||
|
|
||||||
|
Disables annoying console messages/errors. This plugin mainly removes errors/warnings that happen all the time and noisy/spammy logging messages.
|
||||||
|
|
||||||
|
Some of the disabled messages include the "notosans-400-normalitalic" error and MessageActionCreators, Routing/Utils loggers.
|
152
src/plugins/consoleJanitor/index.ts
Normal file
152
src/plugins/consoleJanitor/index.ts
Normal file
|
@ -0,0 +1,152 @@
|
||||||
|
/*
|
||||||
|
* Vencord, a Discord client mod
|
||||||
|
* Copyright (c) 2024 Vendicated and contributors
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { definePluginSettings } from "@api/Settings";
|
||||||
|
import { Devs } from "@utils/constants";
|
||||||
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
|
|
||||||
|
const Noop = () => { };
|
||||||
|
const NoopLogger = {
|
||||||
|
logDangerously: Noop,
|
||||||
|
log: Noop,
|
||||||
|
verboseDangerously: Noop,
|
||||||
|
verbose: Noop,
|
||||||
|
info: Noop,
|
||||||
|
warn: Noop,
|
||||||
|
error: Noop,
|
||||||
|
trace: Noop,
|
||||||
|
time: Noop,
|
||||||
|
fileOnly: Noop
|
||||||
|
};
|
||||||
|
|
||||||
|
const settings = definePluginSettings({
|
||||||
|
disableNoisyLoggers: {
|
||||||
|
type: OptionType.BOOLEAN,
|
||||||
|
description: "Disable noisy loggers like the MessageActionCreators",
|
||||||
|
default: false,
|
||||||
|
restartNeeded: true
|
||||||
|
},
|
||||||
|
disableSpotifyLogger: {
|
||||||
|
type: OptionType.BOOLEAN,
|
||||||
|
description: "Disable the Spotify logger, which leaks account information and access token",
|
||||||
|
default: true,
|
||||||
|
restartNeeded: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
export default definePlugin({
|
||||||
|
name: "ConsoleJanitor",
|
||||||
|
description: "Disables annoying console messages/errors",
|
||||||
|
authors: [Devs.Nuckyz],
|
||||||
|
settings,
|
||||||
|
|
||||||
|
NoopLogger: () => NoopLogger,
|
||||||
|
|
||||||
|
patches: [
|
||||||
|
{
|
||||||
|
find: 'console.warn("Window state not initialized"',
|
||||||
|
replacement: {
|
||||||
|
match: /console\.warn\("Window state not initialized",\i\),/,
|
||||||
|
replace: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
find: "is not a valid locale.",
|
||||||
|
replacement: {
|
||||||
|
match: /\i\.error\(""\.concat\(\i," is not a valid locale."\)\);/,
|
||||||
|
replace: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
find: "notosans-400-normalitalic",
|
||||||
|
replacement: {
|
||||||
|
match: /,"notosans-.+?"/g,
|
||||||
|
replace: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
find: 'console.warn("[DEPRECATED] Please use `subscribeWithSelector` middleware");',
|
||||||
|
all: true,
|
||||||
|
replacement: {
|
||||||
|
match: /console\.warn\("\[DEPRECATED\] Please use `subscribeWithSelector` middleware"\);/,
|
||||||
|
replace: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
find: "RPCServer:WSS",
|
||||||
|
replacement: {
|
||||||
|
match: /\i\.error\("Error: "\.concat\((\i)\.message/,
|
||||||
|
replace: '!$1.message.includes("EADDRINUSE")&&$&'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
find: "Tried getting Dispatch instance before instantiated",
|
||||||
|
replacement: {
|
||||||
|
match: /null==\i&&\i\.warn\("Tried getting Dispatch instance before instantiated"\),/,
|
||||||
|
replace: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
find: "Unable to determine render window for element",
|
||||||
|
replacement: {
|
||||||
|
match: /console\.warn\("Unable to determine render window for element",\i\),/,
|
||||||
|
replace: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
find: "failed to send analytics events",
|
||||||
|
replacement: {
|
||||||
|
match: /console\.error\("\[analytics\] failed to send analytics events query: "\.concat\(\i\)\)/,
|
||||||
|
replace: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
find: "Slow dispatch on",
|
||||||
|
replacement: {
|
||||||
|
match: /\i\.totalTime>100&&\i\.verbose\("Slow dispatch on ".+?\)\);/,
|
||||||
|
replace: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
...[
|
||||||
|
'("MessageActionCreators")', '("ChannelMessages")',
|
||||||
|
'("Routing/Utils")', '("RTCControlSocket")',
|
||||||
|
'("ConnectionEventFramerateReducer")', '("RTCLatencyTestManager")',
|
||||||
|
'("OverlayBridgeStore")', '("RPCServer:WSS")'
|
||||||
|
].map(logger => ({
|
||||||
|
find: logger,
|
||||||
|
predicate: () => settings.store.disableNoisyLoggers,
|
||||||
|
all: true,
|
||||||
|
replacement: {
|
||||||
|
match: new RegExp(String.raw`new \i\.\i${logger.replace(/([()])/g, "\\$1")}`),
|
||||||
|
replace: `$self.NoopLogger${logger}`
|
||||||
|
}
|
||||||
|
})),
|
||||||
|
{
|
||||||
|
find: '"Experimental codecs: "',
|
||||||
|
predicate: () => settings.store.disableNoisyLoggers,
|
||||||
|
replacement: {
|
||||||
|
match: /new \i\.\i\("Connection\("\.concat\(\i,"\)"\)\)/,
|
||||||
|
replace: "$self.NoopLogger()"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
find: '"Handling ping: "',
|
||||||
|
predicate: () => settings.store.disableNoisyLoggers,
|
||||||
|
replacement: {
|
||||||
|
match: /new \i\.\i\("RTCConnection\("\.concat.+?\)\)(?=,)/,
|
||||||
|
replace: "$self.NoopLogger()"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
find: '("Spotify")',
|
||||||
|
predicate: () => settings.store.disableSpotifyLogger,
|
||||||
|
replacement: {
|
||||||
|
match: /new \i\.\i\("Spotify"\)/,
|
||||||
|
replace: "$self.NoopLogger()"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
|
@ -59,11 +59,15 @@ export function addPatch(newPatch: Omit<Patch, "plugin">, pluginName: string) {
|
||||||
delete patch.group;
|
delete patch.group;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (patch.predicate && !patch.predicate()) return;
|
||||||
|
|
||||||
canonicalizeFind(patch);
|
canonicalizeFind(patch);
|
||||||
if (!Array.isArray(patch.replacement)) {
|
if (!Array.isArray(patch.replacement)) {
|
||||||
patch.replacement = [patch.replacement];
|
patch.replacement = [patch.replacement];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
patch.replacement = patch.replacement.filter(({ predicate }) => !predicate || predicate());
|
||||||
|
|
||||||
if (IS_REPORTER) {
|
if (IS_REPORTER) {
|
||||||
patch.replacement.forEach(r => {
|
patch.replacement.forEach(r => {
|
||||||
delete r.predicate;
|
delete r.predicate;
|
||||||
|
|
|
@ -259,7 +259,6 @@ function patchFactories(factories: Record<string, (module: any, exports: any, re
|
||||||
|
|
||||||
for (let i = 0; i < patches.length; i++) {
|
for (let i = 0; i < patches.length; i++) {
|
||||||
const patch = patches[i];
|
const patch = patches[i];
|
||||||
if (patch.predicate && !patch.predicate()) continue;
|
|
||||||
|
|
||||||
const moduleMatches = typeof patch.find === "string"
|
const moduleMatches = typeof patch.find === "string"
|
||||||
? code.includes(patch.find)
|
? code.includes(patch.find)
|
||||||
|
@ -275,8 +274,6 @@ function patchFactories(factories: Record<string, (module: any, exports: any, re
|
||||||
|
|
||||||
// We change all patch.replacement to array in plugins/index
|
// We change all patch.replacement to array in plugins/index
|
||||||
for (const replacement of patch.replacement as PatchReplacement[]) {
|
for (const replacement of patch.replacement as PatchReplacement[]) {
|
||||||
if (replacement.predicate && !replacement.predicate()) continue;
|
|
||||||
|
|
||||||
const lastMod = mod;
|
const lastMod = mod;
|
||||||
const lastCode = code;
|
const lastCode = code;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue