From 6cac03a39408ef14316a898eb81cc998921a8f0f Mon Sep 17 00:00:00 2001 From: Rodry <38259440+ImRodry@users.noreply.github.com> Date: Tue, 17 Aug 2021 21:49:36 +0100 Subject: [PATCH] types(ClientPresence): add type declarations and docs (#6450) --- src/structures/ClientPresence.js | 15 +++++++++++++++ src/structures/ClientUser.js | 12 ++++++------ typings/index.d.ts | 19 ++++++++++++++----- 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/structures/ClientPresence.js b/src/structures/ClientPresence.js index f276c019f..9621312dd 100644 --- a/src/structures/ClientPresence.js +++ b/src/structures/ClientPresence.js @@ -4,6 +4,10 @@ const { Presence } = require('./Presence'); const { TypeError } = require('../errors'); const { ActivityTypes, Opcodes } = require('../util/Constants'); +/** + * Represents the client's presence. + * @extends {Presence} + */ class ClientPresence extends Presence { /** * @param {Client} client The instantiating client @@ -13,6 +17,11 @@ class ClientPresence extends Presence { super(client, Object.assign(data, { status: data.status ?? 'online', user: { id: null } })); } + /** + * Sets the client's presence + * @param {PresenceData} presence The data to set the presence to + * @returns {ClientPresence} + */ set(presence) { const packet = this._parse(presence); this._patch(packet); @@ -28,6 +37,12 @@ class ClientPresence extends Presence { return this; } + /** + * Parses presence data into a packet ready to be sent to Discord + * @param {PresenceData} presence The data to parse + * @returns {APIPresence} + * @private + */ _parse({ status, since, afk, activities }) { const data = { activities: [], diff --git a/src/structures/ClientUser.js b/src/structures/ClientUser.js index fba1494df..7a2b25489 100644 --- a/src/structures/ClientUser.js +++ b/src/structures/ClientUser.js @@ -33,8 +33,8 @@ class ClientUser extends User { } /** - * ClientUser's presence - * @type {Presence} + * Represents the client user's presence + * @type {ClientPresence} * @readonly */ get presence() { @@ -109,7 +109,7 @@ class ClientUser extends User { /** * Sets the full presence of the client user. * @param {PresenceData} data Data for the presence - * @returns {Presence} + * @returns {ClientPresence} * @example * // Set the client user's presence * client.user.setPresence({ activities: [{ name: 'with discord.js' }], status: 'idle' }); @@ -131,7 +131,7 @@ class ClientUser extends User { * Sets the status of the client user. * @param {PresenceStatusData} status Status to change to * @param {number|number[]} [shardId] Shard id(s) to have the activity set on - * @returns {Presence} + * @returns {ClientPresence} * @example * // Set the client user's status * client.user.setStatus('idle'); @@ -153,7 +153,7 @@ class ClientUser extends User { * Sets the activity the client user is playing. * @param {string|ActivityOptions} [name] Activity being played, or options for setting the activity * @param {ActivityOptions} [options] Options for setting the activity - * @returns {Presence} + * @returns {ClientPresence} * @example * // Set the client user's activity * client.user.setActivity('discord.js', { type: 'WATCHING' }); @@ -169,7 +169,7 @@ class ClientUser extends User { * Sets/removes the AFK flag for the client user. * @param {boolean} afk Whether or not the user is AFK * @param {number|number[]} [shardId] Shard Id(s) to have the AFK flag set on - * @returns {Presence} + * @returns {ClientPresence} */ setAFK(afk, shardId) { return this.setPresence({ afk, shardId }); diff --git a/typings/index.d.ts b/typings/index.d.ts index c808c2cd2..063f229bf 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -398,6 +398,7 @@ type If = T extends true ? A : T extends false ? export class Client extends BaseClient { public constructor(options: ClientOptions); private actions: unknown; + private presence: ClientPresence; private _eval(script: string): unknown; private _validateOptions(options: ClientOptions): void; @@ -468,16 +469,24 @@ export class ClientApplication extends Application { public fetch(): Promise; } +export class ClientPresence extends Presence { + public constructor(client: Client, data: RawPresenceData); + private _parse(data: PresenceData): RawPresenceData; + + public set(presence: PresenceData): ClientPresence; +} + export class ClientUser extends User { public mfaEnabled: boolean; + public readonly presence: ClientPresence; public verified: boolean; public edit(data: ClientUserEditData): Promise; - public setActivity(options?: ActivityOptions): Presence; - public setActivity(name: string, options?: ActivityOptions): Presence; - public setAFK(afk: boolean, shardId?: number | number[]): Presence; + public setActivity(options?: ActivityOptions): ClientPresence; + public setActivity(name: string, options?: ActivityOptions): ClientPresence; + public setAFK(afk: boolean, shardId?: number | number[]): ClientPresence; public setAvatar(avatar: BufferResolvable | Base64Resolvable): Promise; - public setPresence(data: PresenceData): Presence; - public setStatus(status: PresenceStatusData, shardId?: number | number[]): Presence; + public setPresence(data: PresenceData): ClientPresence; + public setStatus(status: PresenceStatusData, shardId?: number | number[]): ClientPresence; public setUsername(username: string): Promise; }