aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhunter <61890674+hunt-g@users.noreply.github.com>2023-03-24 20:54:20 -0600
committerGitHub <noreply@github.com>2023-03-25 03:54:20 +0100
commit93cb51a975ce457d6091dc7b0230610f3b958bef (patch)
tree6cc945469e5d0126e8121aadd362dd98d63d27b6
parent0b4ae729a3fecf017583fb968b11ab46e584e0ce (diff)
downloadVencord-93cb51a975ce457d6091dc7b0230610f3b958bef.tar.gz
Vencord-93cb51a975ce457d6091dc7b0230610f3b958bef.tar.bz2
Vencord-93cb51a975ce457d6091dc7b0230610f3b958bef.zip
feat(MessageEvents): Promisable send/edit listeners (#514)
* promisable send/edit listeners * added self * Apply suggestions from code review Co-authored-by: Nuckyz <61953774+Nuckyz@users.noreply.github.com> * fix patches --------- Co-authored-by: Nuckyz <61953774+Nuckyz@users.noreply.github.com> Co-authored-by: Ven <vendicated@riseup.net>
-rw-r--r--src/api/MessageEvents.ts13
-rw-r--r--src/plugins/apiMessageEvents.ts14
-rw-r--r--src/utils/constants.ts4
3 files changed, 18 insertions, 13 deletions
diff --git a/src/api/MessageEvents.ts b/src/api/MessageEvents.ts
index 1bf6b0b..aaf8d40 100644
--- a/src/api/MessageEvents.ts
+++ b/src/api/MessageEvents.ts
@@ -19,6 +19,7 @@
import Logger from "@utils/Logger";
import { MessageStore } from "@webpack/common";
import type { Channel, Message } from "discord-types/general";
+import type { Promisable } from "type-fest";
const MessageEventsLogger = new Logger("MessageEvents", "#e5c890");
@@ -41,16 +42,16 @@ export interface MessageExtra {
stickerIds?: string[];
}
-export type SendListener = (channelId: string, messageObj: MessageObject, extra: MessageExtra) => void | { cancel: boolean; };
-export type EditListener = (channelId: string, messageId: string, messageObj: MessageObject) => void;
+export type SendListener = (channelId: string, messageObj: MessageObject, extra: MessageExtra) => Promisable<void | { cancel: boolean; }>;
+export type EditListener = (channelId: string, messageId: string, messageObj: MessageObject) => Promisable<void>;
const sendListeners = new Set<SendListener>();
const editListeners = new Set<EditListener>();
-export function _handlePreSend(channelId: string, messageObj: MessageObject, extra: MessageExtra) {
+export async function _handlePreSend(channelId: string, messageObj: MessageObject, extra: MessageExtra) {
for (const listener of sendListeners) {
try {
- const result = listener(channelId, messageObj, extra);
+ const result = await listener(channelId, messageObj, extra);
if (result && result.cancel === true) {
return true;
}
@@ -61,10 +62,10 @@ export function _handlePreSend(channelId: string, messageObj: MessageObject, ext
return false;
}
-export function _handlePreEdit(channelId: string, messageId: string, messageObj: MessageObject) {
+export async function _handlePreEdit(channelId: string, messageId: string, messageObj: MessageObject) {
for (const listener of editListeners) {
try {
- listener(channelId, messageId, messageObj);
+ await listener(channelId, messageId, messageObj);
} catch (e) {
MessageEventsLogger.error("MessageEditHandler: Listener encountered an unknown error\n", e);
}
diff --git a/src/plugins/apiMessageEvents.ts b/src/plugins/apiMessageEvents.ts
index 13fbc4c..6843200 100644
--- a/src/plugins/apiMessageEvents.ts
+++ b/src/plugins/apiMessageEvents.ts
@@ -22,22 +22,22 @@ import definePlugin from "@utils/types";
export default definePlugin({
name: "MessageEventsAPI",
description: "Api required by anything using message events.",
- authors: [Devs.Arjix],
+ authors: [Devs.Arjix, Devs.hunt],
patches: [
{
- find: "sendMessage:function",
+ find: '"MessageActionCreators"',
replacement: [{
- match: /(?<=_sendMessage:function\([^)]+\)){/,
- replace: "{if(Vencord.Api.MessageEvents._handlePreSend(...arguments)){return;};"
+ match: /_sendMessage:(function\([^)]+\)){/,
+ replace: "_sendMessage:async $1{if(await Vencord.Api.MessageEvents._handlePreSend(...arguments))return;"
}, {
- match: /(?<=\beditMessage:function\([^)]+\)){/,
- replace: "{Vencord.Api.MessageEvents._handlePreEdit(...arguments);"
+ match: /\beditMessage:(function\([^)]+\)){/,
+ replace: "editMessage:async $1{await Vencord.Api.MessageEvents._handlePreEdit(...arguments);"
}]
},
{
find: '("interactionUsernameProfile',
replacement: {
- match: /var \w=(\w)\.id,\w=(\w)\.id;return .{1,2}\.useCallback\(\(?function\((.{1,2})\){/,
+ match: /var \i=(\i)\.id,\i=(\i)\.id;return \i\.useCallback\(\(?function\((\i)\){/,
replace: (m, message, channel, event) =>
// the message param is shadowed by the event param, so need to alias them
`var _msg=${message},_chan=${channel};${m}Vencord.Api.MessageEvents._handleClick(_msg, _chan, ${event});`
diff --git a/src/utils/constants.ts b/src/utils/constants.ts
index 4021c81..bacf914 100644
--- a/src/utils/constants.ts
+++ b/src/utils/constants.ts
@@ -202,6 +202,10 @@ export const Devs = /* #__PURE__*/ Object.freeze({
name: "lewisakura",
id: 96269247411400704n
},
+ hunt: {
+ name: "hunt-g",
+ id: 222800179697287168n
+ },
cloudburst: {
name: "cloudburst",
id: 892128204150685769n