diff --git a/src/equicordplugins/deadMembers/index.tsx b/src/equicordplugins/deadMembers/index.tsx new file mode 100644 index 00000000..f25937a3 --- /dev/null +++ b/src/equicordplugins/deadMembers/index.tsx @@ -0,0 +1,62 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2024 Vendicated and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { Devs } from "@utils/constants"; +import definePlugin from "@utils/types"; +import { ChannelStore, GuildMemberStore, useStateFromStores } from "@webpack/common"; + +export default definePlugin({ + name: "DeadMembers", + description: "Shows when the sender of a message has left the guild", + authors: [Devs.Kyuuhachi], + + patches: [ + { + find: '.BADGES=1]="BADGES"', + replacement: { + match: /(\i)=\{className:\i.username,style:.*?onContextMenu:\i,children:.*?\};/, + replace: "$&$1.children=$self.wrapMessageAuthor(arguments[0],$1.children);" + } + }, + { + find: "#{intl::FORUM_POST_AUTHOR_A11Y_LABEL}", + replacement: { + match: /(?<=\}=(\i),\{(user:\i,author:\i)\}=.{0,400}?\(\i\.Fragment,{children:)\i(?=}\),)/, + replace: "$self.wrapForumAuthor({...$1,$2},$&)" + } + }, + ], + + wrapMessageAuthor({ message }, text) { + const channel = ChannelStore.getChannel(message.channel_id); + return message.webhookId + ? text + : ; + }, + + wrapForumAuthor({ channel, user }, text) { + return !user + ? text + : ; + }, +}); + + +function DeadIndicator({ channel, userId, text }) { + const isMember = useStateFromStores( + [GuildMemberStore], + () => GuildMemberStore.isMember(channel?.guild_id, userId), + ); + return channel?.guild_id && !isMember ? {text} : text; +}