From e272a50e3b6bda3f8fddcd7347fda4d75df3fad7 Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Thu, 2 Jul 2026 13:47:30 -0400 Subject: [PATCH] Fix MessageEvents Presend --- src/api/MessageEvents.ts | 27 +++++++++++++------ .../scheduledMessages/index.tsx | 4 +-- src/plugins/_api/messageEvents.ts | 6 ++--- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/api/MessageEvents.ts b/src/api/MessageEvents.ts index 63b77a993..19de18dfd 100644 --- a/src/api/MessageEvents.ts +++ b/src/api/MessageEvents.ts @@ -17,7 +17,7 @@ */ import { Logger } from "@utils/Logger"; -import type { Channel, CustomEmoji, Message } from "@vencord/discord-types"; +import type { Channel, CloudUpload, CustomEmoji, Message } from "@vencord/discord-types"; import { MessageStore } from "@webpack/common"; import type { Promisable } from "type-fest"; @@ -30,7 +30,21 @@ export interface MessageObject { tts: boolean; } -export interface SendMessageOptions { +export interface MessageContentOptions { + content: string; + channelId: string; + command: unknown | null; + isGif?: boolean; + stickers?: string[]; + uploads?: CloudUpload[]; + alsoForwardToChannelId?: string; + + // If you end up using these, update their type + scheduledTimestamp?: unknown; + mediaMention?: unknown; +} + +export interface SendMessageOptions extends MessageContentOptions { messageReference?: Message["messageReference"]; allowedMentions?: { parse: string[]; @@ -38,11 +52,6 @@ export interface SendMessageOptions { }; location: string; stickerIds?: string[]; - alsoForwardToChannelId?: string; - - // If you end up using these, update their type - scheduledTimestamp?: unknown; - mediaMention?: unknown; } export interface SendMessageProps { @@ -60,7 +69,9 @@ export type MessageEditListener = (channelId: string, messageId: string, message const sendListeners = new Set(); const editListeners = new Set(); -export async function _handlePreSend(channelId: string, messageObj: MessageObject, options: SendMessageOptions, props: SendMessageProps) { +export async function _handlePreSend(channelId: string, messageObj: MessageObject, options: SendMessageOptions, props: SendMessageProps, contentOptions: MessageContentOptions) { + options = { ...contentOptions, ...options }; + for (const listener of sendListeners) { try { const result = await listener(channelId, messageObj, options, props); diff --git a/src/equicordplugins/scheduledMessages/index.tsx b/src/equicordplugins/scheduledMessages/index.tsx index d79402226..b1183d921 100644 --- a/src/equicordplugins/scheduledMessages/index.tsx +++ b/src/equicordplugins/scheduledMessages/index.tsx @@ -6,7 +6,7 @@ import "./styles.css"; -import { MessageOptions } from "@api/MessageEvents"; +import { MessageObject, SendMessageOptions } from "@api/MessageEvents"; import { definePluginSettings } from "@api/Settings"; import { Devs, EquicordDevs } from "@utils/constants"; import definePlugin, { OptionType } from "@utils/types"; @@ -119,7 +119,7 @@ export default definePlugin({ return ; }, - async onBeforeMessageSend(channelId: string, messageObj: { content: string; }, options: MessageOptions) { + async onBeforeMessageSend(channelId: string, messageObj: MessageObject, options: SendMessageOptions) { if (!isScheduleModeEnabled) return; if (!messageObj.content.trim() && !options.uploads?.length) return; diff --git a/src/plugins/_api/messageEvents.ts b/src/plugins/_api/messageEvents.ts index 739c7b8ec..c7774200e 100644 --- a/src/plugins/_api/messageEvents.ts +++ b/src/plugins/_api/messageEvents.ts @@ -38,9 +38,9 @@ export default definePlugin({ find: ".handleSendMessage,onResize:", replacement: { // https://regex101.com/r/7iswuk/1 - match: /let (\i)=\i\.\i\.parse\((\i),.+?\.getSendMessageOptions\(\{.+?\}\)?;(?=.+?(\i)\.flags=)(?<=\)\(({.+?})\)\.then.+?)/, - replace: (m, parsedMessage, channel, options, props) => m + - `if(await Vencord.Api.MessageEvents._handlePreSend(${channel}.id,${parsedMessage},${options},${props}))` + + match: /let (\i)=\i\.\i\.parse\((\i),.+?\.getSendMessageOptions\((\{.+?\})\),.{0,100}?\};(?=.+?(\i)\.flags=)(?<=\)\(({.+?})\)\.then.+?)/, + replace: (m, parsedMessage, channel, contentOptions, options, props) => m + + `if(await Vencord.Api.MessageEvents._handlePreSend(${channel}.id,${parsedMessage},${options},${props},${contentOptions}))` + "return{shouldClear:false,shouldRefocus:true};" } },