From 603350645d0fe9d96b763d169215d15b3f4f71b1 Mon Sep 17 00:00:00 2001 From: Shubham Parihar Date: Thu, 23 Sep 2021 17:10:51 +0530 Subject: [PATCH] fix: allow null to be passed in order to reset icon/avatar (#6646) --- src/managers/GuildManager.js | 2 +- src/structures/BaseGuildTextChannel.js | 2 +- src/structures/ClientUser.js | 9 +++--- src/structures/Guild.js | 42 ++++++++++++++------------ src/structures/Webhook.js | 2 +- typings/index.d.ts | 27 +++++++++-------- 6 files changed, 45 insertions(+), 39 deletions(-) diff --git a/src/managers/GuildManager.js b/src/managers/GuildManager.js index b52c15c80a81..895eb536835a 100644 --- a/src/managers/GuildManager.js +++ b/src/managers/GuildManager.js @@ -146,7 +146,7 @@ class GuildManager extends CachedManager { * @property {DefaultMessageNotificationLevel|number} [defaultMessageNotifications] The default message notifications * for the guild * @property {ExplicitContentFilterLevel} [explicitContentFilter] The explicit content filter level for the guild - * @property {BufferResolvable|Base64Resolvable} [icon=null] The icon for the guild + * @property {?(BufferResolvable|Base64Resolvable)} [icon=null] The icon for the guild * @property {PartialRoleData[]} [roles=[]] The roles for this guild, * the first element of this array is used to change properties of the guild's everyone role. * @property {Snowflake|number} [systemChannelId] The system channel's id diff --git a/src/structures/BaseGuildTextChannel.js b/src/structures/BaseGuildTextChannel.js index ae10680ca23a..f92213ca2e92 100644 --- a/src/structures/BaseGuildTextChannel.js +++ b/src/structures/BaseGuildTextChannel.js @@ -136,7 +136,7 @@ class BaseGuildTextChannel extends GuildChannel { /** * Options used to create a {@link Webhook} for {@link TextChannel} and {@link NewsChannel}. * @typedef {Object} ChannelWebhookCreateOptions - * @property {BufferResolvable|Base64Resolvable} [avatar] Avatar for the webhook + * @property {?(BufferResolvable|Base64Resolvable)} [avatar] Avatar for the webhook * @property {string} [reason] Reason for creating the webhook */ diff --git a/src/structures/ClientUser.js b/src/structures/ClientUser.js index 0611c81481f1..6b3c80c7b0b7 100644 --- a/src/structures/ClientUser.js +++ b/src/structures/ClientUser.js @@ -45,7 +45,7 @@ class ClientUser extends User { * Data used to edit the logged in client * @typedef {Object} ClientUserEditData * @property {string} [username] The new username - * @property {BufferResolvable|Base64Resolvable} [avatar] The new avatar + * @property {?(BufferResolvable|Base64Resolvable)} [avatar] The new avatar */ /** @@ -54,6 +54,7 @@ class ClientUser extends User { * @returns {Promise} */ async edit(data) { + if (typeof data.avatar !== 'undefined') data.avatar = await DataResolver.resolveImage(data.avatar); const newData = await this.client.api.users('@me').patch({ data }); this.client.token = newData.token; const { updated } = this.client.actions.UserUpdate.handle(newData); @@ -78,7 +79,7 @@ class ClientUser extends User { /** * Sets the avatar of the logged in client. - * @param {BufferResolvable|Base64Resolvable} avatar The new avatar + * @param {?(BufferResolvable|Base64Resolvable)} avatar The new avatar * @returns {Promise} * @example * // Set avatar @@ -86,8 +87,8 @@ class ClientUser extends User { * .then(user => console.log(`New avatar set!`)) * .catch(console.error); */ - async setAvatar(avatar) { - return this.edit({ avatar: await DataResolver.resolveImage(avatar) }); + setAvatar(avatar) { + return this.edit({ avatar }); } /** diff --git a/src/structures/Guild.js b/src/structures/Guild.js index 487478307f90..565d9fd95c06 100644 --- a/src/structures/Guild.js +++ b/src/structures/Guild.js @@ -748,11 +748,11 @@ class Guild extends AnonymousGuild { * @property {VoiceChannelResolvable} [afkChannel] The AFK channel of the guild * @property {TextChannelResolvable} [systemChannel] The system channel of the guild * @property {number} [afkTimeout] The AFK timeout of the guild - * @property {Base64Resolvable} [icon] The icon of the guild + * @property {?(BufferResolvable|Base64Resolvable)} [icon] The icon of the guild * @property {GuildMemberResolvable} [owner] The owner of the guild - * @property {Base64Resolvable} [splash] The invite splash image of the guild - * @property {Base64Resolvable} [discoverySplash] The discovery splash image of the guild - * @property {Base64Resolvable} [banner] The banner of the guild + * @property {?(BufferResolvable|Base64Resolvable)} [splash] The invite splash image of the guild + * @property {?(BufferResolvable|Base64Resolvable)} [discoverySplash] The discovery splash image of the guild + * @property {?(BufferResolvable|Base64Resolvable)} [banner] The banner of the guild * @property {DefaultMessageNotificationLevel|number} [defaultMessageNotifications] The default message notification * level of the guild * @property {SystemChannelFlagsResolvable} [systemChannelFlags] The system channel flags of the guild @@ -806,11 +806,13 @@ class Guild extends AnonymousGuild { _data.system_channel_id = this.client.channels.resolveId(data.systemChannel); } if (data.afkTimeout) _data.afk_timeout = Number(data.afkTimeout); - if (typeof data.icon !== 'undefined') _data.icon = data.icon; + if (typeof data.icon !== 'undefined') _data.icon = await DataResolver.resolveImage(data.icon); if (data.owner) _data.owner_id = this.client.users.resolveId(data.owner); - if (data.splash) _data.splash = data.splash; - if (data.discoverySplash) _data.discovery_splash = data.discoverySplash; - if (data.banner) _data.banner = data.banner; + if (typeof data.splash !== 'undefined') _data.splash = await DataResolver.resolveImage(data.splash); + if (typeof data.discoverySplash !== 'undefined') { + _data.discovery_splash = await DataResolver.resolveImage(data.discoverySplash); + } + if (typeof data.banner !== 'undefined') _data.banner = await DataResolver.resolveImage(data.banner); if (typeof data.explicitContentFilter !== 'undefined') { _data.explicit_content_filter = typeof data.explicitContentFilter === 'number' @@ -1022,7 +1024,7 @@ class Guild extends AnonymousGuild { /** * Sets a new guild icon. - * @param {Base64Resolvable|BufferResolvable} icon The new icon of the guild + * @param {?(Base64Resolvable|BufferResolvable)} icon The new icon of the guild * @param {string} [reason] Reason for changing the guild's icon * @returns {Promise} * @example @@ -1031,8 +1033,8 @@ class Guild extends AnonymousGuild { * .then(updated => console.log('Updated the guild icon')) * .catch(console.error); */ - async setIcon(icon, reason) { - return this.edit({ icon: await DataResolver.resolveImage(icon) }, reason); + setIcon(icon, reason) { + return this.edit({ icon }, reason); } /** @@ -1052,7 +1054,7 @@ class Guild extends AnonymousGuild { /** * Sets a new guild invite splash image. - * @param {Base64Resolvable|BufferResolvable} splash The new invite splash image of the guild + * @param {?(Base64Resolvable|BufferResolvable)} splash The new invite splash image of the guild * @param {string} [reason] Reason for changing the guild's invite splash image * @returns {Promise} * @example @@ -1061,13 +1063,13 @@ class Guild extends AnonymousGuild { * .then(updated => console.log('Updated the guild splash')) * .catch(console.error); */ - async setSplash(splash, reason) { - return this.edit({ splash: await DataResolver.resolveImage(splash) }, reason); + setSplash(splash, reason) { + return this.edit({ splash }, reason); } /** * Sets a new guild discovery splash image. - * @param {Base64Resolvable|BufferResolvable} discoverySplash The new discovery splash image of the guild + * @param {?(Base64Resolvable|BufferResolvable)} discoverySplash The new discovery splash image of the guild * @param {string} [reason] Reason for changing the guild's discovery splash image * @returns {Promise} * @example @@ -1076,13 +1078,13 @@ class Guild extends AnonymousGuild { * .then(updated => console.log('Updated the guild discovery splash')) * .catch(console.error); */ - async setDiscoverySplash(discoverySplash, reason) { - return this.edit({ discoverySplash: await DataResolver.resolveImage(discoverySplash) }, reason); + setDiscoverySplash(discoverySplash, reason) { + return this.edit({ discoverySplash }, reason); } /** * Sets a new guild banner. - * @param {Base64Resolvable|BufferResolvable} banner The new banner of the guild + * @param {?(Base64Resolvable|BufferResolvable)} banner The new banner of the guild * @param {string} [reason] Reason for changing the guild's banner * @returns {Promise} * @example @@ -1090,8 +1092,8 @@ class Guild extends AnonymousGuild { * .then(updated => console.log('Updated the guild banner')) * .catch(console.error); */ - async setBanner(banner, reason) { - return this.edit({ banner: await DataResolver.resolveImage(banner) }, reason); + setBanner(banner, reason) { + return this.edit({ banner }, reason); } /** diff --git a/src/structures/Webhook.js b/src/structures/Webhook.js index 244c7fad94c5..fb7991f16226 100644 --- a/src/structures/Webhook.js +++ b/src/structures/Webhook.js @@ -209,7 +209,7 @@ class Webhook { * Options used to edit a {@link Webhook}. * @typedef {Object} WebhookEditData * @property {string} [name=this.name] The new name for the webhook - * @property {BufferResolvable} [avatar] The new avatar for the webhook + * @property {?(BufferResolvable)} [avatar] The new avatar for the webhook * @property {GuildTextChannelResolvable} [channel] The new channel for the webhook */ diff --git a/typings/index.d.ts b/typings/index.d.ts index e54cb3bc89ca..332f33d6f225 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -500,7 +500,7 @@ export class ClientUser extends User { 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 setAvatar(avatar: BufferResolvable | Base64Resolvable | null): Promise; public setPresence(data: PresenceData): ClientPresence; public setStatus(status: PresenceStatusData, shardId?: number | number[]): ClientPresence; public setUsername(username: string): Promise; @@ -737,25 +737,28 @@ export class Guild extends AnonymousGuild { public leave(): Promise; public setAFKChannel(afkChannel: VoiceChannelResolvable | null, reason?: string): Promise; public setAFKTimeout(afkTimeout: number, reason?: string): Promise; - public setBanner(banner: Base64Resolvable | null, reason?: string): Promise; + public setBanner(banner: BufferResolvable | Base64Resolvable | null, reason?: string): Promise; public setChannelPositions(channelPositions: readonly ChannelPosition[]): Promise; public setDefaultMessageNotifications( defaultMessageNotifications: DefaultMessageNotificationLevel | number, reason?: string, ): Promise; - public setDiscoverySplash(discoverySplash: Base64Resolvable | null, reason?: string): Promise; + public setDiscoverySplash( + discoverySplash: BufferResolvable | Base64Resolvable | null, + reason?: string, + ): Promise; public setExplicitContentFilter( explicitContentFilter: ExplicitContentFilterLevel | number, reason?: string, ): Promise; - public setIcon(icon: Base64Resolvable | null, reason?: string): Promise; + public setIcon(icon: BufferResolvable | Base64Resolvable | null, reason?: string): Promise; public setName(name: string, reason?: string): Promise; public setOwner(owner: GuildMemberResolvable, reason?: string): Promise; public setPreferredLocale(preferredLocale: string, reason?: string): Promise; public setPublicUpdatesChannel(publicUpdatesChannel: TextChannelResolvable | null, reason?: string): Promise; public setRolePositions(rolePositions: readonly RolePosition[]): Promise; public setRulesChannel(rulesChannel: TextChannelResolvable | null, reason?: string): Promise; - public setSplash(splash: Base64Resolvable | null, reason?: string): Promise; + public setSplash(splash: BufferResolvable | Base64Resolvable | null, reason?: string): Promise; public setSystemChannel(systemChannel: TextChannelResolvable | null, reason?: string): Promise; public setSystemChannelFlags(systemChannelFlags: SystemChannelFlagsResolvable, reason?: string): Promise; public setVerificationLevel(verificationLevel: VerificationLevel | number, reason?: string): Promise; @@ -3246,7 +3249,7 @@ export type GuildTextChannelResolvable = TextChannel | NewsChannel | Snowflake; export type ChannelResolvable = Channel | Snowflake; export interface ChannelWebhookCreateOptions { - avatar?: BufferResolvable | Base64Resolvable; + avatar?: BufferResolvable | Base64Resolvable | null; reason?: string; } @@ -3368,7 +3371,7 @@ export interface ClientPresenceStatusData { export interface ClientUserEditData { username?: string; - avatar?: BufferResolvable | Base64Resolvable; + avatar?: BufferResolvable | Base64Resolvable | null; } export interface CloseEvent { @@ -3893,11 +3896,11 @@ export interface GuildEditData { systemChannel?: TextChannelResolvable; systemChannelFlags?: SystemChannelFlagsResolvable; afkTimeout?: number; - icon?: Base64Resolvable; + icon?: BufferResolvable | Base64Resolvable | null; owner?: GuildMemberResolvable; - splash?: Base64Resolvable; - discoverySplash?: Base64Resolvable; - banner?: Base64Resolvable; + splash?: BufferResolvable | Base64Resolvable | null; + discoverySplash?: BufferResolvable | Base64Resolvable | null; + banner?: BufferResolvable | Base64Resolvable | null; rulesChannel?: TextChannelResolvable; publicUpdatesChannel?: TextChannelResolvable; preferredLocale?: string; @@ -4759,7 +4762,7 @@ export type WebhookClientOptions = Pick< export interface WebhookEditData { name?: string; - avatar?: BufferResolvable; + avatar?: BufferResolvable | null; channel?: GuildTextChannelResolvable; }