From 68031210f52f25dff80558e0a12d1eceb785b47b Mon Sep 17 00:00:00 2001 From: Danial Raza Date: Sat, 8 Jun 2024 22:30:21 +0200 Subject: [PATCH] feat(Message): add `call` (#10283) * feat(Message): add `call` * refactor: make `endedAt` a getter * types: fix `endedAt` return type * types(Message): add `call` property * docs: requested changes --------- Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com> --- packages/discord.js/src/structures/Message.js | 24 +++++++++++++++++++ packages/discord.js/typings/index.d.ts | 7 ++++++ 2 files changed, 31 insertions(+) diff --git a/packages/discord.js/src/structures/Message.js b/packages/discord.js/src/structures/Message.js index bbd550cc21f7..54c279591716 100644 --- a/packages/discord.js/src/structures/Message.js +++ b/packages/discord.js/src/structures/Message.js @@ -417,6 +417,30 @@ class Message extends Base { } else { this.poll ??= null; } + + /** + * A call associated with a message + * @typedef {Object} MessageCall + * @property {Readonly} endedAt The time the call ended + * @property {?number} endedTimestamp The timestamp the call ended + * @property {Snowflake[]} participants The ids of the users that participated in the call + */ + + if (data.call) { + /** + * The call associated with the message + * @type {?MessageCall} + */ + this.call = { + endedTimestamp: data.call.ended_timestamp ? Date.parse(data.call.ended_timestamp) : null, + participants: data.call.participants, + get endedAt() { + return this.endedTimestamp && new Date(this.endedTimestamp); + }, + }; + } else { + this.call ??= null; + } } /** diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 8dd053843780..ad28287fc1d1 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -2027,6 +2027,12 @@ export class LimitedCollection extends Collection { public keepOverLimit: ((value: Value, key: Key, collection: this) => boolean) | null; } +export interface MessageCall { + get endedAt(): Date | null; + endedTimestamp: number | null; + participants: readonly Snowflake[]; +} + export type MessageComponentType = Exclude; export interface MessageCollectorOptionsParams< @@ -2118,6 +2124,7 @@ export class Message extends Base { public get thread(): AnyThreadChannel | null; public tts: boolean; public poll: Poll | null; + public call: MessageCall | null; public type: MessageType; public get url(): string; public webhookId: Snowflake | null;