chore: deprecate client options presence (#10419)

* chore: deprecate client options presence

* chore: deprecate in typings

* fix: actually use the new prop

* chore: nit

Co-authored-by: Almeida <almeidx@pm.me>

* fix: use correct prop

---------

Co-authored-by: Almeida <almeidx@pm.me>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
This commit is contained in:
DD
2024-07-31 14:20:49 +03:00
committed by GitHub
parent 5eabec14d4
commit 8f97d2bacf
3 changed files with 18 additions and 1 deletions

View File

@@ -32,6 +32,7 @@ const Status = require('../util/Status');
const Sweepers = require('../util/Sweepers');
let deprecationEmittedForPremiumStickerPacks = false;
let deprecationEmittedForClientPresence = false;
/**
* The main hub for interacting with the Discord API, and the starting point for any bot.
@@ -139,7 +140,7 @@ class Client extends BaseClient {
* @private
* @type {ClientPresence}
*/
this.presence = new ClientPresence(this, this.options.presence);
this.presence = new ClientPresence(this, this.options.ws.presence ?? this.options.presence);
Object.defineProperty(this, 'token', { writable: true });
if (!this.token && 'DISCORD_TOKEN' in process.env) {
@@ -219,6 +220,15 @@ class Client extends BaseClient {
this.emit(Events.Debug, `Provided token: ${this._censoredToken}`);
if (this.options.presence) {
if (!deprecationEmittedForClientPresence) {
process.emitWarning(
'ClientOptions#presence is deprecated and will be removed. Use ClientOptions#ws#presence instead.',
'DeprecationWarning',
);
deprecationEmittedForClientPresence = true;
}
this.options.ws.presence = this.presence._parse(this.options.presence);
}
@@ -547,6 +557,9 @@ class Client extends BaseClient {
if (typeof options.ws !== 'object' || options.ws === null) {
throw new DiscordjsTypeError(ErrorCodes.ClientInvalidOption, 'ws', 'an object');
}
if (typeof options.ws.presence !== 'object' || options.ws.presence === null) {
throw new DiscordjsTypeError(ErrorCodes.ClientInvalidOption, 'ws.presence', 'an object');
}
if (typeof options.rest !== 'object' || options.rest === null) {
throw new DiscordjsTypeError(ErrorCodes.ClientInvalidOption, 'rest', 'an object');
}

View File

@@ -91,6 +91,7 @@ const { version } = require('../../package.json');
* only set this if you know what you are doing</warn>
* @property {BuildStrategyFunction} [buildStrategy] Builds the strategy to use for sharding
* @property {IdentifyThrottlerFunction} [buildIdentifyThrottler] Builds the identify throttler to use for sharding
* @property {PresenceData} [presence={}] Presence data to use upon login
*/
/**

View File

@@ -181,6 +181,7 @@ import {
APISelectMenuDefaultValue,
SelectMenuDefaultValueType,
InviteType,
GatewayPresenceUpdateData,
} from 'discord-api-types/v10';
import { ChildProcess } from 'node:child_process';
import { EventEmitter } from 'node:events';
@@ -5304,6 +5305,7 @@ export interface ClientOptions {
allowedMentions?: MessageMentionOptions;
partials?: readonly Partials[];
failIfNotExists?: boolean;
/** @deprecated Use {@link ClientOptions.ws.presence} instead */
presence?: PresenceData;
intents: BitFieldResolvable<GatewayIntentsString, number>;
waitGuildTimeout?: number;
@@ -6876,6 +6878,7 @@ export interface WebhookMessageCreateOptions extends Omit<MessageCreateOptions,
export interface WebSocketOptions {
large_threshold?: number;
version?: number;
presence?: GatewayPresenceUpdateData;
buildStrategy?(manager: WSWebSocketManager): IShardingStrategy;
buildIdentifyThrottler?(manager: WSWebSocketManager): Awaitable<IIdentifyThrottler>;
}