/* * Vencord, a Discord client mod * Copyright (c) 2024 Vendicated and contributors * SPDX-License-Identifier: GPL-3.0-or-later */ import "./style.css"; import ErrorBoundary from "@components/ErrorBoundary"; import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; import { findByPropsLazy } from "@webpack"; import { Timestamp } from "@webpack/common"; import type { Message } from "discord-types/general"; import type { HTMLAttributes } from "react"; const { getMessageTimestampId } = findByPropsLazy("getMessageTimestampId"); const { calendarFormat, dateFormat, isSameDay } = findByPropsLazy("calendarFormat", "dateFormat", "isSameDay", "accessibilityLabelCalendarFormat"); const MessageClasses = findByPropsLazy("separator", "latin24CompactTimeStamp"); function Sep(props: HTMLAttributes) { return ; } const enum ReferencedMessageState { LOADED = 0, NOT_LOADED = 1, DELETED = 2, } type ReferencedMessage = { state: ReferencedMessageState.LOADED; message: Message; } | { state: ReferencedMessageState.NOT_LOADED | ReferencedMessageState.DELETED; }; function ReplyTimestamp({ referencedMessage, baseMessage, }: { referencedMessage: ReferencedMessage, baseMessage: Message; }) { if (referencedMessage.state !== ReferencedMessageState.LOADED) return null; const refTimestamp = referencedMessage.message.timestamp as any; const baseTimestamp = baseMessage.timestamp as any; return ( [ {isSameDay(refTimestamp, baseTimestamp) ? dateFormat(refTimestamp, "LT") : calendarFormat(refTimestamp) } ] ); } export default definePlugin({ name: "ReplyTimestamp", description: "Shows a timestamp on replied-message previews", authors: [Devs.Kyuuhachi], patches: [ { find: "renderSingleLineMessage:function()", replacement: { match: /(?<="aria-label":\i,children:\[)(?=\i,\i,\i\])/, replace: "$self.ReplyTimestamp(arguments[0])," } } ], ReplyTimestamp: ErrorBoundary.wrap(ReplyTimestamp, { noop: true }), });