diff --git a/src/plugins/filterBotMentions/index.tsx b/src/plugins/filterBotMentions/index.tsx index aee8fc104..ae1d97286 100644 --- a/src/plugins/filterBotMentions/index.tsx +++ b/src/plugins/filterBotMentions/index.tsx @@ -8,27 +8,25 @@ import { definePluginSettings } from "@api/Settings"; import { Devs } from "@utils/constants"; import { getCurrentGuild } from "@utils/discord"; import definePlugin, { OptionType } from "@utils/types"; -import { findByPropsLazy } from "@webpack"; -import { FluxDispatcher } from "@webpack/common"; +import { findByPropsLazy, findStoreLazy } from "@webpack"; +import { Menu } from "@webpack/common"; import { Message } from "discord-types/general"; const settings = definePluginSettings({ toggle: { type: OptionType.BOOLEAN, - description: "Filter out mentions by bots", - default: false, + description: "Include mentions by bots in inbox", + default: true, }, }); +type RecentMentionsStore = { guildFilter: string, roleFilter: boolean, everyoneFilter: boolean; }; type fetchRecentMentionsType = (before: BigInt | null, limit: Number | null, all_servers: string | null | undefined, role: boolean, everyone: boolean,) => void; -const { fetchRecentMentions } = findByPropsLazy("fetchRecentMentions") as { fetchRecentMentions: fetchRecentMentionsType; }; -interface ReloadMentions { - everyone: boolean; - role: boolean; - all_servers: boolean; -} +const { fetchRecentMentions } = findByPropsLazy("fetchRecentMentions") as { fetchRecentMentions: fetchRecentMentionsType; }; +const recentMentionsStore = findStoreLazy("RecentMentionsStore") as RecentMentionsStore; + export default definePlugin({ name: "FilterBotMentions", @@ -37,41 +35,50 @@ export default definePlugin({ patches: [ { - find: "type:\"LOAD_RECENT_MENTIONS_SUCCESS\"", + find: "get lastLoaded", replacement: { - match: /dispatch\(\{type:"LOAD_RECENT_MENTIONS_SUCCESS",messages:(\i)/, + match: /getMentions.{0,30}\?\i/, replace: "$&.filter($self.filterMessages)" } }, - { - find: "analyticsName:\"Recent Mentions\"", - replacement: { - match: /channel:\i,messages:\i/, - replace: "$&?.filter($self.filterMessages)" - } - }, { find: "mentions-filter", replacement: { - match: /children:\[\(0,(\i)\.jsx\)\((\i).{0,200}(\i)\.(\i)\.setGuildFilter.{0,100}checked:(\i).{0,200}checked:(\i).{0,300}checked:(.{0,30})\}\)\]/, - replace: "$&.concat([(0,$1.jsx)($2.MenuCheckboxItem, {id:\"Bots\", label:\"Include mentions by bots\", action: function() {$self.toggleBotMentions();$self.reloadMentions($5, $6, $7)}, checked: $self.settings.store.toggle})])" + match: /children:\[\(0,\i\.jsx\).{0,600}\}\)\]/, + replace: "$&.concat($self.patchMenu())" } } ], settings, - reloadMentions({ everyone, role, all_servers }: ReloadMentions): void { - FluxDispatcher.dispatch({ type: "CLEAR_MENTIONS" }); + reloadMentions(): void { + const all_servers: boolean = recentMentionsStore.guildFilter === "ALL_SERVERS"; + const { roleFilter: role, everyoneFilter: everyone } = recentMentionsStore; const serverToFilter: string | undefined | null = all_servers ? null : getCurrentGuild()?.id; fetchRecentMentions(null, null, serverToFilter, role, everyone); - }, + toggleBotMentions(): void { settings.store.toggle = !settings.store.toggle; }, + filterMessages(message: Message): boolean { return !message.author.bot || settings.store.toggle; + }, + + patchMenu() { + return ( + { + this.toggleBotMentions(); + this.reloadMentions(); + }} + checked={settings.store.toggle} + /> + ); } });