Skip to content

Commit

Permalink
feat(ClientUser): Add support for setting bot banner (#10176)
Browse files Browse the repository at this point in the history
* feat(discord.js): added support to setting bot banner

added feature to set banner for bot from code level
the function is in the experimental phase of Discord.

* fix: resolve requested changes

* fix: add missing type in ClientUserEditOptions

---------

Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com>
  • Loading branch information
MinerPL and Jiralite committed Apr 9, 2024
1 parent 464d627 commit de14c92
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 2 deletions.
23 changes: 21 additions & 2 deletions packages/discord.js/src/structures/ClientUser.js
Expand Up @@ -47,16 +47,21 @@ class ClientUser extends User {
* @typedef {Object} ClientUserEditOptions
* @property {string} [username] The new username
* @property {?(BufferResolvable|Base64Resolvable)} [avatar] The new avatar
* @property {?(BufferResolvable|Base64Resolvable)} [banner] The new banner
*/

/**
* Edits the logged in client.
* @param {ClientUserEditOptions} options The options to provide
* @returns {Promise<ClientUser>}
*/
async edit({ username, avatar }) {
async edit({ username, avatar, banner }) {
const data = await this.client.rest.patch(Routes.user(), {
body: { username, avatar: avatar && (await resolveImage(avatar)) },
body: {
username,
avatar: avatar && (await resolveImage(avatar)),
banner: banner && (await resolveImage(banner)),
},
});

this.client.token = data.token;
Expand Down Expand Up @@ -95,6 +100,20 @@ class ClientUser extends User {
return this.edit({ avatar });
}

/**
* Sets the banner of the logged in client.
* @param {?(BufferResolvable|Base64Resolvable)} banner The new banner
* @returns {Promise<ClientUser>}
* @example
* // Set banner
* client.user.setBanner('./banner.png')
* .then(user => console.log(`New banner set!`))
* .catch(console.error);
*/
setBanner(banner) {
return this.edit({ banner });
}

/**
* Options for setting activities
* @typedef {Object} ActivitiesOptions
Expand Down
2 changes: 2 additions & 0 deletions packages/discord.js/typings/index.d.ts
Expand Up @@ -1093,6 +1093,7 @@ export class ClientUser extends User {
public setActivity(name: string, options?: Omit<ActivityOptions, 'name'>): ClientPresence;
public setAFK(afk?: boolean, shardId?: number | readonly number[]): ClientPresence;
public setAvatar(avatar: BufferResolvable | Base64Resolvable | null): Promise<this>;
public setBanner(banner: BufferResolvable | Base64Resolvable | null): Promise<this>;
public setPresence(data: PresenceData): ClientPresence;
public setStatus(status: PresenceStatusData, shardId?: number | readonly number[]): ClientPresence;
public setUsername(username: string): Promise<this>;
Expand Down Expand Up @@ -5233,6 +5234,7 @@ export interface ClientPresenceStatusData {
export interface ClientUserEditOptions {
username?: string;
avatar?: BufferResolvable | Base64Resolvable | null;
banner?: BufferResolvable | Base64Resolvable | null;
}

export interface CloseEvent {
Expand Down

0 comments on commit de14c92

Please sign in to comment.