Equicord/src/equicordplugins/deadMembers/index.tsx
2024-07-13 01:30:19 -04:00

62 lines
1.9 KiB
TypeScript

/*
* 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: "$&__dummyvar=($1.children=$self.wrapMessageAuthor(arguments[0],$1.children)),"
}
},
{
find: "Messages.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
: <DeadIndicator
channel={channel}
userId={message.author.id}
text={text}
/>;
},
wrapForumAuthor({ channel, user }, text) {
return !user
? text
: <DeadIndicator
channel={channel}
userId={user.id}
text={text}
/>;
},
});
function DeadIndicator({ channel, userId, text }) {
const isMember = useStateFromStores(
[GuildMemberStore],
() => GuildMemberStore.isMember(channel?.guild_id, userId),
);
return channel?.guild_id && !isMember ? <s className="c98-author-dead">{text}</s> : text;
}