Plugin
NoBlockedMessages
Hides all blocked/ignored messages from chat completely
1
import { definePluginSettings, migratePluginSetting } from "@api/Settings";2
import { Devs } from "@utils/constants";3
import { runtimeHashMessageKey } from "@utils/intlHash";4
import { Logger } from "@utils/Logger";5
import definePlugin, { OptionType } from "@utils/types";6
import { Message } from "@vencord/discord-types";7
import { i18n, RelationshipStore } from "@webpack/common";8
9
interface MessageDeleteProps {10
// Internal intl message for BLOCKED_MESSAGE_COUNT11
collapsedReason: () => any;12
}13
14
// Remove this migration once enough time has passed15
migratePluginSetting("NoBlockedMessages", "ignoreBlockedMessages", "ignoreMessages");16
const settings = definePluginSettings({17
ignoreMessages: {18
description: "Completely ignores incoming messages from blocked and ignored (if enabled) users",19
type: OptionType.BOOLEAN,20
default: false,21
restartNeeded: true22
},23
applyToIgnoredUsers: {24
description: "Additionally apply to 039;ignored039; users",25
type: OptionType.BOOLEAN,26
default: true,27
restartNeeded: false28
}29
});30
31
export default definePlugin({32
name: "NoBlockedMessages",33
description: "Hides all blocked/ignored messages from chat completely",34
authors: [Devs.rushii, Devs.Samu, Devs.jamesbt365],35
tags: ["Accessibility", "Chat"],36
settings,37
38
patches: [39
{40
find: ".__invalid_blocked,",41
replacement: [42
{43
match: /let{messages:\i,[^}]*?collapsedReason[^}]*}/,44
replace: "if($self.shouldHide(arguments[0]))return null;$&"45
}46
]47
},48
{49
find: 039;"MessageStore"039;,50
predicate: () => settings.store.ignoreMessages,51
replacement: [52
{53
match: /(?<=MESSAGE_CREATE:function\((\i)\){)/,54
replace: (_, props) => `if($self.shouldIgnoreMessage(${props}.message))return;`55
}56
]57
},58
{59
find: 039;"ReadStateStore"039;,60
predicate: () => settings.store.ignoreMessages,61
replacement: [62
{63
match: /(?<=MESSAGE_CREATE:function\((\i)\){)/,64
replace: (_, props) => `if($self.shouldIgnoreMessage(${props}.message))return;`65
}66
]67
}68
],69
70
shouldIgnoreMessage(message: Message) {71
try {72
if (RelationshipStore.isBlocked(message.author.id)) {73
return true;74
}75
return settings.store.applyToIgnoredUsers && RelationshipStore.isIgnored(message.author.id);76
} catch (e) {77
new Logger("NoBlockedMessages").error("Failed to check if user is blocked or ignored:", e);78
return false;79
}80
},81
82
shouldHide(props: MessageDeleteProps): boolean {83
try {84
const collapsedReason = props.collapsedReason();85
const is = (key: string) => collapsedReason === i18n.t[runtimeHashMessageKey(key)]();86
87
return is("BLOCKED_MESSAGE_COUNT") || (settings.store.applyToIgnoredUsers && is("IGNORED_MESSAGE_COUNT"));88
} catch (e) {89
new Logger("NoBlockedMessages").error("Failed to check if message should be hidden:", e);90
return false;91
}92
}93
});94