feat: add support for Message flags

This commit is contained in:
Paul Makles
2024-06-29 18:46:19 +01:00
parent 661eb79279
commit 0c0707ce35
5 changed files with 1785 additions and 1550 deletions
+1755 -1550
View File
File diff suppressed because it is too large Load Diff
+7
View File
@@ -132,6 +132,12 @@ export type ClientOptions = Partial<EventClientOptions> & {
*/
autoReconnect: boolean;
/**
* Whether to rewrite sent messages that include identifiers such as @silent
* @default true
*/
messageRewrites: boolean;
/**
* Retry delay function
* @param retryCount Count
@@ -192,6 +198,7 @@ export class Client extends EventEmitter<Events> {
eagerFetching: true,
syncUnreads: false,
autoReconnect: true,
messageRewrites: true,
/**
* Retry delay function
* @param retryCount Count
+7
View File
@@ -478,6 +478,13 @@ export class Channel {
const msg: DataMessageSend =
typeof data === "string" ? { content: data } : data;
// Mark as silent message
if (msg.content?.startsWith("@silent ")) {
msg.content = msg.content.substring(8);
msg.flags ||= 1;
msg.flags |= 1;
}
const message = await this.#collection.client.api.post(
`/channels/${this.id as ""}/messages`,
msg,
+14
View File
@@ -193,6 +193,13 @@ export class Message {
return this.#collection.getUnderlyingObject(this.id).masquerade;
}
/**
* Flags
*/
get flags() {
return this.#collection.getUnderlyingObject(this.id).flags || 0;
}
/**
* Get the username for this message
*/
@@ -250,6 +257,13 @@ export class Message {
return avatar ? this.#collection.client.proxyFile(avatar) : undefined;
}
/**
* Whether this message has suppressed desktop/push notifications
*/
get isSuppressed() {
return (this.flags & 1) === 1;
}
/**
* Edit a message
* @param data Message edit route data
+2
View File
@@ -29,6 +29,7 @@ export type HydratedMessage = {
reactions: ReactiveMap<string, ReactiveSet<string>>;
interactions?: API.Interactions;
masquerade?: API.Masquerade;
flags?: number;
};
export const messageHydration: Hydrate<Merge<API.Message>, HydratedMessage> = {
@@ -71,6 +72,7 @@ export const messageHydration: Hydrate<Merge<API.Message>, HydratedMessage> = {
},
interactions: (message) => message.interactions,
masquerade: (message) => message.masquerade!,
flags: (message) => message.flags!,
},
initialHydration: () => ({
reactions: new ReactiveMap(),