/* * Vencord, a Discord client mod * Copyright (c) 2024 Vendicated and contributors * SPDX-License-Identifier: GPL-3.0-or-later */ import { definePluginSettings } from "@api/Settings"; import { Link } from "@components/Link"; import { Devs, EquicordDevs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; import { Forms, moment } from "@webpack/common"; const settings = definePluginSettings({ cozyFormat: { type: OptionType.STRING, default: "[calendar]", description: "time format to use in messages on cozy mode", }, compactFormat: { type: OptionType.STRING, default: "LT", description: "time format on compact mode and hovering messages", }, tooltipFormat: { type: OptionType.STRING, default: "LLLL • [relative]", description: "time format to use on tooltips", }, sameDayFormat: { type: OptionType.STRING, default: "HH:mm:ss", description: "[calendar] format for today" }, lastDayFormat: { type: OptionType.STRING, default: "[yesterday] HH:mm:ss", description: "[calendar] format for yesterday" }, lastWeekFormat: { type: OptionType.STRING, default: "ddd DD.MM.YYYY HH:mm:ss", description: "[calendar] format for last week" }, sameElseFormat: { type: OptionType.STRING, default: "ddd DD.MM.YYYY HH:mm:ss", description: "[calendar] format for older dates" }, }); export default definePlugin({ name: "CustomTimestamps", description: "Custom timestamps on messages and tooltips", authors: [Devs.Rini, EquicordDevs.nvhhr], settings, settingsAboutComponent: () => ( <> How to use: Moment.js formatting documentation

Additionally you can use these in your inputs:
[calendar] enables dynamic date formatting (see options below),
[relative] gives you times such as "4 hours ago".

), patches: [{ find: "timestampTooltip,delay", replacement: [ { match: /(?<=\i=\i\?)\(0,\i\.\i\)\((\i),"LT"\):\(0,\i\.\i\)\(\i\)/, replace: '$self.format($1,"compactFormat","[calendar]"):$self.format($1,"cozyFormat","LT")', }, { match: /(?<=text:)\(0,\i.\i\)\((\i),"LLLL"\)(?=,)/, replace: '$self.format($1,"tooltipFormat","LLLL")', }, ] }], format(date: Date, key: string, fallback: string) { const t = moment(date); const sameDayFormat = settings.store.sameDayFormat || "HH:mm:ss"; const lastDayFormat = settings.store.lastDayFormat || "[yesterday] HH:mm:ss"; const lastWeekFormat = settings.store.lastWeekFormat || "ddd DD.MM.YYYY HH:mm:ss"; const sameElseFormat = settings.store.sameElseFormat || "ddd DD.MM.YYYY HH:mm:ss"; return t.format(settings.store[key] || fallback) .replace("relative", () => t.fromNow()) .replace("calendar", () => t.calendar(null, { sameDay: sameDayFormat, lastDay: lastDayFormat, lastWeek: lastWeekFormat, sameElse: sameElseFormat })); }, });