init
This commit is contained in:
commit
a933b1a092
2 changed files with 152 additions and 0 deletions
109
index.tsx
Normal file
109
index.tsx
Normal file
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
* Vencord, a Discord client mod
|
||||
* Copyright (c) 2025 Vendicated and contributors
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import "./style.css";
|
||||
|
||||
import { classNameFactory } from "@api/Styles";
|
||||
import { Devs } from "@utils/constants";
|
||||
import definePlugin from "@utils/types";
|
||||
import { findComponentByCodeLazy } from "@webpack";
|
||||
import { ChannelStore, DateUtils, GuildStore, IconUtils, NavigationRouter, Popout, SnowflakeUtils, Text, UserStore, useStateFromStores } from "@webpack/common";
|
||||
import { Channel, Guild } from "discord-types/general";
|
||||
|
||||
const ServerProfileComponent = findComponentByCodeLazy("{guildProfile:v,fetchGuildProfile:O,fetchStatus:I}");
|
||||
const cl = classNameFactory("vc-serverprofileforward-");
|
||||
|
||||
const ArrowSvg = () => <svg aria-hidden="true" role="img" xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 24 24"><path fill="var(--text-low-contrast)" d="M9.3 5.3a1 1 0 0 0 0 1.4l5.29 5.3-5.3 5.3a1 1 0 1 0 1.42 1.4l6-6a1 1 0 0 0 0-1.4l-6-6a1 1 0 0 0-1.42 0Z" className=""></path></svg>;
|
||||
|
||||
const checkForIconExistence = (guild: Guild) => {
|
||||
if (!guild) return false;
|
||||
if (!guild.icon) return false;
|
||||
return true;
|
||||
};
|
||||
const isDM = (channel: Channel) => channel.flags === 1;
|
||||
|
||||
export default definePlugin({
|
||||
name: "MoreForwardMeta",
|
||||
description: "Show server profile under forwarded messages (if available) and always show time",
|
||||
authors: [Devs.nin0dev],
|
||||
ForwardFooter(message: any) {
|
||||
const { guild_id, channel_id, message_id } = message.message.messageReference;
|
||||
const guild = useStateFromStores([GuildStore], () => GuildStore.getGuild(guild_id));
|
||||
const channel = useStateFromStores([ChannelStore], () => ChannelStore.getChannel(channel_id));
|
||||
|
||||
return <div className={cl("footer")} >
|
||||
{
|
||||
guild_id && <Popout
|
||||
position="top"
|
||||
renderPopout={() => <ServerProfileComponent guildId={guild_id} />}
|
||||
>
|
||||
{popoutProps => <div className={cl("footer-element")} {...popoutProps}>
|
||||
{
|
||||
checkForIconExistence(guild) && <img src={guild.icon && IconUtils.getGuildIconURL({
|
||||
id: guild.id,
|
||||
icon: guild.icon,
|
||||
canAnimate: true,
|
||||
size: 32
|
||||
})} alt={`Server icon for ${guild.name}`} className={cl("guild-icon")} />
|
||||
}
|
||||
<Text variant="text-sm/medium" className={cl("footer-text")} style={{
|
||||
marginLeft: checkForIconExistence(guild) ? "20px" : "0"
|
||||
}}>{guild ? guild.name : "View server"} </Text>
|
||||
<ArrowSvg />
|
||||
</div>
|
||||
}
|
||||
</Popout>
|
||||
}
|
||||
{
|
||||
channel && <div className={cl("footer-element")} onClick={() => NavigationRouter.transitionTo(`/channels/${guild_id ?? "@me"}/${channel_id}/${message_id}`)} >
|
||||
<Text variant="text-sm/medium" className={cl("footer-text")}>{(() => {
|
||||
/*
|
||||
- Text channel
|
||||
- Voice channel
|
||||
- Announcement channel
|
||||
- Stage channel
|
||||
- Directory channel
|
||||
- Forum channel
|
||||
- Media channel
|
||||
*/
|
||||
if ([0, 2, 5, 13, 14, 15, 16].includes(channel.type)) return `#${channel.name}`;
|
||||
// DMs
|
||||
if (channel.type === 1) return `@${(() => {
|
||||
const user = UserStore.getUser(channel.recipients[0]);
|
||||
// @ts-expect-error
|
||||
return user.globalName || user.username;
|
||||
})()}`;
|
||||
// GDMs
|
||||
if (channel.type === 3) return channel.name || (() => {
|
||||
const users = channel.recipients.map(r => UserStore.getUser(r));
|
||||
// @ts-expect-error
|
||||
return users.map(u => u.globalName || u.username).join(", ");
|
||||
})();
|
||||
// Threads
|
||||
if ([10, 11, 12].includes(channel.type)) return channel.name;
|
||||
})()}</Text>
|
||||
<ArrowSvg />
|
||||
</div>
|
||||
}
|
||||
<div className={cl("footer-element")} style={{
|
||||
pointerEvents: "none"
|
||||
}}>
|
||||
<Text variant="text-sm/medium" className={cl("footer-text")}>
|
||||
{DateUtils.calendarFormat(new Date(SnowflakeUtils.extractTimestamp(message_id)))}
|
||||
</Text>
|
||||
</div>
|
||||
</div>;
|
||||
},
|
||||
patches: [
|
||||
{
|
||||
find: "originLabel,\" • \"",
|
||||
replacement: {
|
||||
match: /(let{message:\i,snapshot:\i,index:\i}=(\i))(.{0,400})return .+TEXT_LOW_CONTRAST}\)]}\)/,
|
||||
replace: "$1$3return $self.ForwardFooter($2)"
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue