From 47315b0eba933af9be555ca45e4e68a6ae5b6dd6 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Wed, 22 Jan 2025 18:11:13 +0100 Subject: [PATCH 1/4] fix plugins modifying message content --- src/plugins/_api/messageEvents.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/_api/messageEvents.ts b/src/plugins/_api/messageEvents.ts index 0101b02c..97ed1746 100644 --- a/src/plugins/_api/messageEvents.ts +++ b/src/plugins/_api/messageEvents.ts @@ -31,7 +31,7 @@ export default definePlugin({ replace: (match, args) => "" + `async ${match}` + `if(await Vencord.Api.MessageEvents._handlePreEdit(${args}))` + - "return Promise.resolve({shoudClear:true,shouldRefocus:true});" + "return Promise.resolve({shouldClear:false,shouldRefocus:true});" } }, { @@ -39,12 +39,12 @@ export default definePlugin({ replacement: { // props.chatInputType...then((function(isMessageValid)... var parsedMessage = b.c.parse(channel,... var replyOptions = f.g.getSendMessageOptionsForReply(pendingReply); // Lookbehind: validateMessage)({openWarningPopout:..., type: i.props.chatInputType, content: t, stickers: r, ...}).then((function(isMessageValid) - match: /(type:this\.props\.chatInputType.+?\.then\()(\i=>\{.+?let (\i)=\i\.\i\.parse\((\i),.+?let (\i)=\i\.\i\.getSendMessageOptionsForReply\(\i\);)(?<=\)\(({.+?})\)\.then.+?)/, + match: /(\{openWarningPopout:.{0,100}type:this.props.chatInputType.+?\.then\()(\i=>\{.+?let (\i)=\i\.\i\.parse\((\i),.+?let (\i)=\i\.\i\.getSendMessageOptions\(\{.+?\}\);)(?<=\)\(({.+?})\)\.then.+?)/, // props.chatInputType...then((async function(isMessageValid)... var replyOptions = f.g.getSendMessageOptionsForReply(pendingReply); if(await Vencord.api...) return { shoudClear:true, shouldRefocus:true }; replace: (_, rest1, rest2, parsedMessage, channel, replyOptions, extra) => "" + `${rest1}async ${rest2}` + `if(await Vencord.Api.MessageEvents._handlePreSend(${channel}.id,${parsedMessage},${extra},${replyOptions}))` + - "return{shoudClear:true,shouldRefocus:true};" + "return{shouldClear:false,shouldRefocus:true};" } }, { From 8346dba324b81672b120e1397ce1c70b18127abd Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Wed, 22 Jan 2025 15:07:33 -0300 Subject: [PATCH 2/4] SortFriendRequests: Fix showing dates --- src/plugins/sortFriendRequests/index.tsx | 33 ++++++++++++------------ 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/plugins/sortFriendRequests/index.tsx b/src/plugins/sortFriendRequests/index.tsx index 6ce1af14..1bd382ba 100644 --- a/src/plugins/sortFriendRequests/index.tsx +++ b/src/plugins/sortFriendRequests/index.tsx @@ -17,11 +17,17 @@ */ import { definePluginSettings } from "@api/Settings"; +import ErrorBoundary from "@components/ErrorBoundary"; import { Flex } from "@components/Flex"; import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; -import { RelationshipStore } from "@webpack/common"; +import { RelationshipStore, Text } from "@webpack/common"; import { User } from "discord-types/general"; +import { PropsWithChildren } from "react"; + +function getSince(user: User) { + return new Date(RelationshipStore.getSince(user.id)); +} const settings = definePluginSettings({ showDates: { @@ -48,28 +54,23 @@ export default definePlugin({ find: "#{intl::FRIEND_REQUEST_CANCEL}", replacement: { predicate: () => settings.store.showDates, - match: /subText:(\i)(?<=user:(\i).+?)/, - replace: (_, subtext, user) => `subText:$self.makeSubtext(${subtext},${user})` + match: /(?<=\.listItemContents,children:\[)\(0,.+?(?=,\(0)(?<=user:(\i).+?)/, + replace: (children, user) => `$self.WrapperDateComponent({user:${user},children:${children}})` } }], wrapSort(comparator: Function, row: any) { return row.type === 3 || row.type === 4 - ? -this.getSince(row.user) + ? -getSince(row.user) : comparator(row); }, - getSince(user: User) { - return new Date(RelationshipStore.getSince(user.id)); - }, + WrapperDateComponent: ErrorBoundary.wrap(({ user, children }: PropsWithChildren<{ user: User; }>) => { + const since = getSince(user); - makeSubtext(text: string, user: User) { - const since = this.getSince(user); - return ( - - {text} - {!isNaN(since.getTime()) && Received — {since.toDateString()}} - - ); - } + return + {children} + {!isNaN(since.getTime()) && {since.toDateString()}} + ; + }) }); From 5312514de6078b6d9d2c733177056cc02ce25e66 Mon Sep 17 00:00:00 2001 From: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Date: Wed, 22 Jan 2025 15:09:21 -0300 Subject: [PATCH 3/4] Bump to 1.11.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6113731d..abb11ee5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "vencord", "private": "true", - "version": "1.10.9", + "version": "1.11.0", "description": "The cutest Discord client mod", "homepage": "https://github.com/Vendicated/Vencord#readme", "bugs": { From 9bb983d40ca0bb7b815effa5c763b1e7ad9237bf Mon Sep 17 00:00:00 2001 From: Vendicated Date: Wed, 22 Jan 2025 20:01:33 +0100 Subject: [PATCH 4/4] SortFriendRequests: improve formatting & display --- src/plugins/replyTimestamp/index.tsx | 17 ++++++---------- src/plugins/sortFriendRequests/index.tsx | 24 ++++++++++++++++++----- src/plugins/sortFriendRequests/styles.css | 18 +++++++++++++++++ src/webpack/common/types/utils.d.ts | 7 +++++++ src/webpack/common/utils.ts | 7 +++++++ 5 files changed, 57 insertions(+), 16 deletions(-) create mode 100644 src/plugins/sortFriendRequests/styles.css diff --git a/src/plugins/replyTimestamp/index.tsx b/src/plugins/replyTimestamp/index.tsx index dc31dd88..0be5dfec 100644 --- a/src/plugins/replyTimestamp/index.tsx +++ b/src/plugins/replyTimestamp/index.tsx @@ -9,16 +9,11 @@ import "./style.css"; import ErrorBoundary from "@components/ErrorBoundary"; import { Devs } from "@utils/constants"; import definePlugin from "@utils/types"; -import { filters, findByPropsLazy, mapMangledModuleLazy } from "@webpack"; -import { Timestamp } from "@webpack/common"; +import { findByPropsLazy } from "@webpack"; +import { DateUtils, Timestamp } from "@webpack/common"; import type { Message } from "discord-types/general"; import type { HTMLAttributes } from "react"; -const { calendarFormat, dateFormat, isSameDay } = mapMangledModuleLazy("millisecondsInUnit:", { - calendarFormat: filters.byCode("sameElse"), - dateFormat: filters.byCode('":'), - isSameDay: filters.byCode("Math.abs(+"), -}); const MessageClasses = findByPropsLazy("separator", "latin24CompactTimeStamp"); function Sep(props: HTMLAttributes) { @@ -46,14 +41,14 @@ function ReplyTimestamp({ return ( [ - {isSameDay(refTimestamp, baseTimestamp) - ? dateFormat(refTimestamp, "LT") - : calendarFormat(refTimestamp) + {DateUtils.isSameDay(refTimestamp, baseTimestamp) + ? DateUtils.dateFormat(refTimestamp, "LT") + : DateUtils.calendarFormat(refTimestamp) } ] diff --git a/src/plugins/sortFriendRequests/index.tsx b/src/plugins/sortFriendRequests/index.tsx index 1bd382ba..5f45902e 100644 --- a/src/plugins/sortFriendRequests/index.tsx +++ b/src/plugins/sortFriendRequests/index.tsx @@ -16,15 +16,25 @@ * along with this program. If not, see . */ +import "./styles.css"; + import { definePluginSettings } from "@api/Settings"; +import { classNameFactory } from "@api/Styles"; import ErrorBoundary from "@components/ErrorBoundary"; -import { Flex } from "@components/Flex"; import { Devs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; -import { RelationshipStore, Text } from "@webpack/common"; +import { DateUtils, RelationshipStore, Text, TooltipContainer } from "@webpack/common"; import { User } from "discord-types/general"; import { PropsWithChildren } from "react"; +const formatter = new Intl.DateTimeFormat(undefined, { + month: "numeric", + day: "numeric", + year: "numeric", +}); + +const cl = classNameFactory("vc-sortFriendRequests-"); + function getSince(user: User) { return new Date(RelationshipStore.getSince(user.id)); } @@ -68,9 +78,13 @@ export default definePlugin({ WrapperDateComponent: ErrorBoundary.wrap(({ user, children }: PropsWithChildren<{ user: User; }>) => { const since = getSince(user); - return + return
{children} - {!isNaN(since.getTime()) && {since.toDateString()}} - ; + {!isNaN(since.getTime()) && ( + + {formatter.format(since)} + + )} +
; }) }); diff --git a/src/plugins/sortFriendRequests/styles.css b/src/plugins/sortFriendRequests/styles.css new file mode 100644 index 00000000..98be9da7 --- /dev/null +++ b/src/plugins/sortFriendRequests/styles.css @@ -0,0 +1,18 @@ +.vc-sortFriendRequests-wrapper { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + width: 100%; + margin-right: 0.5em; +} + +.vc-sortFriendRequests-tooltip { + max-width: none; + white-space: nowrap; +} + +.vc-sortFriendRequests-date { + color: var(--text-muted); + font-family: var(--font-code); +} diff --git a/src/webpack/common/types/utils.d.ts b/src/webpack/common/types/utils.d.ts index 00e3f4a0..de1ce182 100644 --- a/src/webpack/common/types/utils.d.ts +++ b/src/webpack/common/types/utils.d.ts @@ -324,3 +324,10 @@ export interface DisplayProfileUtils { getDisplayProfile(userId: string, guildId?: string, customStores?: any): DisplayProfile | null; useDisplayProfile(userId: string, guildId?: string, customStores?: any): DisplayProfile | null; } + +export interface DateUtils { + isSameDay(date1: Date, date2: Date): boolean; + calendarFormat(date: Date): string; + dateFormat(date: Date, format: string): string; + diffAsUnits(start: Date, end: Date, stopAtOneSecond?: boolean): Record<"days" | "hours" | "minutes" | "seconds", number>; +} diff --git a/src/webpack/common/utils.ts b/src/webpack/common/utils.ts index 3699300b..1bdf236a 100644 --- a/src/webpack/common/utils.ts +++ b/src/webpack/common/utils.ts @@ -199,3 +199,10 @@ export const DisplayProfileUtils: t.DisplayProfileUtils = mapMangledModuleLazy(/ getDisplayProfile: filters.byCode(".getGuildMemberProfile("), useDisplayProfile: filters.byCode(/\[\i\.\i,\i\.\i],\(\)=>/) }); + +export const DateUtils: t.DateUtils = mapMangledModuleLazy("millisecondsInUnit:", { + calendarFormat: filters.byCode("sameElse"), + dateFormat: filters.byCode('":'), + isSameDay: filters.byCode("Math.abs(+"), + diffAsUnits: filters.byCode("days:0", "millisecondsInUnit") +});