diff --git a/src/api/MessageEvents.ts b/src/api/MessageEvents.ts index aaf8d40b..4bd3bc01 100644 --- a/src/api/MessageEvents.ts +++ b/src/api/MessageEvents.ts @@ -36,10 +36,36 @@ export interface Emoji { export interface MessageObject { content: string, validNonShortcutEmojis: Emoji[]; + invalidEmojis: any[]; + tts: boolean; } +export interface Upload { + classification: string; + currentSize: number; + description: string | null; + filename: string; + id: string; + isImage: boolean; + isVideo: boolean; + item: { + file: File; + platform: number; + }; + loaded: number; + mimeType: string; + preCompressionSize: number; + responseUrl: string; + sensitive: boolean; + showLargeMessageDialog: boolean; + spoiler: boolean; + status: "NOT_STARTED" | "STARTED" | "UPLOADING" | "ERROR" | "COMPLETED" | "CANCELLED"; + uniqueId: string; + uploadedFilename: string; +} export interface MessageExtra { stickerIds?: string[]; + uploads?: Upload[]; } export type SendListener = (channelId: string, messageObj: MessageObject, extra: MessageExtra) => Promisable; @@ -48,7 +74,8 @@ export type EditListener = (channelId: string, messageId: string, messageObj: Me const sendListeners = new Set(); const editListeners = new Set(); -export async function _handlePreSend(channelId: string, messageObj: MessageObject, extra: MessageExtra) { +export async function _handlePreSend(channelId: string, messageObj: MessageObject, extra: MessageExtra, uploads: Upload[]) { + extra.uploads = uploads; for (const listener of sendListeners) { try { const result = await listener(channelId, messageObj, extra); diff --git a/src/plugins/apiMessageEvents.ts b/src/plugins/apiMessageEvents.ts index 6843200d..1fe3623d 100644 --- a/src/plugins/apiMessageEvents.ts +++ b/src/plugins/apiMessageEvents.ts @@ -22,17 +22,25 @@ import definePlugin from "@utils/types"; export default definePlugin({ name: "MessageEventsAPI", description: "Api required by anything using message events.", - authors: [Devs.Arjix, Devs.hunt], + authors: [Devs.Arjix, Devs.hunt, Devs.Ven], patches: [ { find: '"MessageActionCreators"', - replacement: [{ - match: /_sendMessage:(function\([^)]+\)){/, - replace: "_sendMessage:async $1{if(await Vencord.Api.MessageEvents._handlePreSend(...arguments))return;" - }, { - match: /\beditMessage:(function\([^)]+\)){/, + replacement: { + // editMessage: function (...) { + match: /\beditMessage:(function\(.+?\))\{/, + // editMessage: async function (...) { await handlePreEdit(...); ... replace: "editMessage:async $1{await Vencord.Api.MessageEvents._handlePreEdit(...arguments);" - }] + } + }, + { + find: ".handleSendMessage=", + replacement: { + // checkIsMessageValid().then((function (isValidData) { ... getSendMessageOptionsForReply(data); ... sendMessage(channel.id, msg, void 0, mergeMessageSendOptions(...)) + match: /(?<=uploads:(\i),channel:\i\}\)\.then\(\()function\((\i)\)\{(var \i=\i\.valid.+?\.getSendMessageOptionsForReply\(\i\);)(?=.+?\.sendMessage\((\i)\.id,(\i),void 0,(\i\(.+?)\):)/, + // checkIsMessageValid().then((async function (isValidData) { ...; if (await handlePresend(channel.id, msg, extra)) return; ... + replace: "async function($2){$3 if (await Vencord.Api.MessageEvents._handlePreSend($4.id,$5,$6,$1)) return {shouldClear:true,shouldRefocus:true};" + } }, { find: '("interactionUsernameProfile',