diff --git a/src/util/entities/Message.ts b/src/util/entities/Message.ts
index fc8c011c..998513f8 100644
--- a/src/util/entities/Message.ts
+++ b/src/util/entities/Message.ts
@@ -217,6 +217,8 @@ export class Message extends BaseClass {
@Column({ type: "simple-json", nullable: true })
components?: MessageComponent[];
+
+ ephemeral?: boolean;
}
export interface MessageComponent {
diff --git a/src/util/index.ts b/src/util/index.ts
index a3495a0c..08abacaa 100644
--- a/src/util/index.ts
+++ b/src/util/index.ts
@@ -25,3 +25,4 @@ export * from "./dtos/index";
export * from "./schemas";
export * from "./imports";
export * from "./config";
+export * from "./message_interceptors";
diff --git a/src/util/interfaces/MessageOptions.ts b/src/util/interfaces/MessageOptions.ts
new file mode 100644
index 00000000..3705e668
--- /dev/null
+++ b/src/util/interfaces/MessageOptions.ts
@@ -0,0 +1,15 @@
+import { Attachment, Embed, MessageCreateSchema, MessageType } from "@fosscord/util*";
+
+export interface MessageOptions extends MessageCreateSchema {
+ id?: string;
+ type?: MessageType;
+ pinned?: boolean;
+ author_id?: string;
+ webhook_id?: string;
+ application_id?: string;
+ embeds?: Embed[];
+ channel_id?: string;
+ attachments?: Attachment[];
+ edited_timestamp?: Date;
+ timestamp?: Date;
+}
\ No newline at end of file
diff --git a/src/util/interfaces/index.ts b/src/util/interfaces/index.ts
index fa259ce1..96a0e9c2 100644
--- a/src/util/interfaces/index.ts
+++ b/src/util/interfaces/index.ts
@@ -21,3 +21,4 @@ export * from "./Presence";
export * from "./Interaction";
export * from "./Event";
export * from "./Status";
+export * from "./MessageOptions";
\ No newline at end of file
diff --git a/src/util/message_interceptors/IMessageInterceptor.ts b/src/util/message_interceptors/IMessageInterceptor.ts
new file mode 100644
index 00000000..35b9dd12
--- /dev/null
+++ b/src/util/message_interceptors/IMessageInterceptor.ts
@@ -0,0 +1,15 @@
+import { Message, MessageOptions } from "@fosscord/util";
+
+export interface IMessageInterceptor {
+ execute(ctx: MessageInterceptorContext): Promise<MessageInterceptResult>;
+}
+
+export class MessageInterceptResult {
+ cancel: boolean;
+ message: Message;
+}
+
+export class MessageInterceptorContext {
+ message: Message;
+ opts: MessageOptions;
+}
\ No newline at end of file
diff --git a/src/util/message_interceptors/index.ts b/src/util/message_interceptors/index.ts
new file mode 100644
index 00000000..db64e5b3
--- /dev/null
+++ b/src/util/message_interceptors/index.ts
@@ -0,0 +1 @@
+export * from "./IMessageInterceptor";
\ No newline at end of file
diff --git a/src/util/message_interceptors/plural_tooling/PluralCommandInterceptor.ts b/src/util/message_interceptors/plural_tooling/PluralCommandInterceptor.ts
new file mode 100644
index 00000000..ac6bb153
--- /dev/null
+++ b/src/util/message_interceptors/plural_tooling/PluralCommandInterceptor.ts
@@ -0,0 +1,46 @@
+import {
+ emitEvent,
+ IMessageInterceptor, Message,
+ MessageCreateEvent, MessageDeleteEvent, MessageFlags,
+ MessageInterceptorContext,
+ MessageInterceptResult, MessageTypes
+} from "@fosscord/util";
+
+export class PluralCommandInterceptor implements IMessageInterceptor {
+ async execute(ctx: MessageInterceptorContext): Promise<MessageInterceptResult> {
+ let result = new MessageInterceptResult();
+ result.cancel = false;
+ result.message = ctx.message;
+
+ if(ctx.message.content?.toLowerCase().startsWith("p;")) {
+ console.log("[PluralCommandInterceptor] Plural command prefix detected, cancelling message send. Content: ", ctx.message.content)
+ result.cancel = true;
+ }
+
+
+ if(result.cancel) {
+ /*await emitEvent({
+ event: "MESSAGE_DELETE",
+ channel_id: ctx.message.channel_id,
+ data: {
+ id: ctx.message.id,
+ channel_id: ctx.message.channel_id,
+ guild_id: ctx.message.guild_id
+ },
+ } as MessageDeleteEvent);*/
+ //result.message.flags = String((BigInt(ctx.message.flags ?? "0")) | MessageTypes.);
+ // @ts-ignore
+ result.message.ephemeral = true;
+ result.message.content += ' (ephemeral?)';
+ /*await emitEvent({
+ event: "MESSAGE_CREATE",
+ //channel_id: ctx.opts.channel_id,
+ user_id: ctx.opts.author_id,
+ data: ctx.message.toJSON(),
+ } as MessageCreateEvent);*/
+ }
+
+ return result;
+ }
+
+}
\ No newline at end of file
|