mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-09 16:13:31 +01:00
feat(GuildMemberManager)!: Add new modify self fields (#11089)
BREAKING CHANGE: `GuildMemberManager#edit()` no longer handles the /@me route for editing the current application's guild member. This has split out into `GuildMemberManager#editMe()`
This commit is contained in:
@@ -9,6 +9,7 @@ const { DiscordjsError, DiscordjsTypeError, DiscordjsRangeError, ErrorCodes } =
|
|||||||
const { BaseGuildVoiceChannel } = require('../structures/BaseGuildVoiceChannel.js');
|
const { BaseGuildVoiceChannel } = require('../structures/BaseGuildVoiceChannel.js');
|
||||||
const { GuildMember } = require('../structures/GuildMember.js');
|
const { GuildMember } = require('../structures/GuildMember.js');
|
||||||
const { Role } = require('../structures/Role.js');
|
const { Role } = require('../structures/Role.js');
|
||||||
|
const { resolveImage } = require('../util/DataResolver.js');
|
||||||
const { Events } = require('../util/Events.js');
|
const { Events } = require('../util/Events.js');
|
||||||
const { GuildMemberFlagsBitField } = require('../util/GuildMemberFlagsBitField.js');
|
const { GuildMemberFlagsBitField } = require('../util/GuildMemberFlagsBitField.js');
|
||||||
const { Partials } = require('../util/Partials.js');
|
const { Partials } = require('../util/Partials.js');
|
||||||
@@ -358,8 +359,7 @@ class GuildMemberManager extends CachedManager {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Edits a member of the guild.
|
* Edits a member of a guild.
|
||||||
* <info>The user must be a member of the guild</info>
|
|
||||||
*
|
*
|
||||||
* @param {UserResolvable} user The member to edit
|
* @param {UserResolvable} user The member to edit
|
||||||
* @param {GuildMemberEditOptions} options The options to provide
|
* @param {GuildMemberEditOptions} options The options to provide
|
||||||
@@ -396,18 +396,40 @@ class GuildMemberManager extends CachedManager {
|
|||||||
options.flags = GuildMemberFlagsBitField.resolve(options.flags);
|
options.flags = GuildMemberFlagsBitField.resolve(options.flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
let endpoint;
|
const data = await this.client.rest.patch(Routes.guildMember(this.guild.id, id), { body: options, reason });
|
||||||
if (id === this.client.user.id) {
|
const clone = this.cache.get(id)?._clone();
|
||||||
const keys = Object.keys(options);
|
clone?._patch(data);
|
||||||
if (keys.length === 1 && keys[0] === 'nick') endpoint = Routes.guildMember(this.guild.id);
|
return clone ?? this._add(data, false);
|
||||||
else endpoint = Routes.guildMember(this.guild.id, id);
|
|
||||||
} else {
|
|
||||||
endpoint = Routes.guildMember(this.guild.id, id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const data = await this.client.rest.patch(endpoint, { body: options, reason });
|
/**
|
||||||
|
* The data for editing the current application's guild member.
|
||||||
|
*
|
||||||
|
* @typedef {Object} GuildMemberEditMeOptions
|
||||||
|
* @property {?string} [nick] The nickname to set
|
||||||
|
* @property {?(BufferResolvable|Base64Resolvable)} [banner] The banner to set
|
||||||
|
* @property {?(BufferResolvable|Base64Resolvable)} [avatar] The avatar to set
|
||||||
|
* @property {?string} [bio] The bio to set
|
||||||
|
* @property {string} [reason] The reason to use
|
||||||
|
*/
|
||||||
|
|
||||||
const clone = this.cache.get(id)?._clone();
|
/**
|
||||||
|
* Edits the current application's guild member in a guild.
|
||||||
|
*
|
||||||
|
* @param {GuildMemberEditMeOptions} options The options to provide
|
||||||
|
* @returns {Promise<GuildMember>}
|
||||||
|
*/
|
||||||
|
async editMe({ reason, ...options }) {
|
||||||
|
const data = await this.client.rest.patch(Routes.guildMember(this.guild.id, '@me'), {
|
||||||
|
body: {
|
||||||
|
...options,
|
||||||
|
banner: options.banner && (await resolveImage(options.banner)),
|
||||||
|
avatar: options.avatar && (await resolveImage(options.avatar)),
|
||||||
|
},
|
||||||
|
reason,
|
||||||
|
});
|
||||||
|
|
||||||
|
const clone = this.me?._clone();
|
||||||
clone?._patch(data);
|
clone?._patch(data);
|
||||||
return clone ?? this._add(data, false);
|
return clone ?? this._add(data, false);
|
||||||
}
|
}
|
||||||
|
|||||||
9
packages/discord.js/typings/index.d.ts
vendored
9
packages/discord.js/typings/index.d.ts
vendored
@@ -4486,6 +4486,7 @@ export class GuildMemberManager extends CachedManager<Snowflake, GuildMember, Us
|
|||||||
options?: BanOptions,
|
options?: BanOptions,
|
||||||
): Promise<BulkBanResult>;
|
): Promise<BulkBanResult>;
|
||||||
public edit(user: UserResolvable, options: GuildMemberEditOptions): Promise<GuildMember>;
|
public edit(user: UserResolvable, options: GuildMemberEditOptions): Promise<GuildMember>;
|
||||||
|
public editMe(options: GuildMemberEditMeOptions): Promise<GuildMember>;
|
||||||
public fetch(
|
public fetch(
|
||||||
options: FetchMemberOptions | UserResolvable | (FetchMembersOptions & { user: UserResolvable }),
|
options: FetchMemberOptions | UserResolvable | (FetchMembersOptions & { user: UserResolvable }),
|
||||||
): Promise<GuildMember>;
|
): Promise<GuildMember>;
|
||||||
@@ -6293,6 +6294,14 @@ export interface GuildMemberEditOptions {
|
|||||||
roles?: ReadonlyCollection<Snowflake, Role> | readonly RoleResolvable[];
|
roles?: ReadonlyCollection<Snowflake, Role> | readonly RoleResolvable[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface GuildMemberEditMeOptions {
|
||||||
|
avatar?: Base64Resolvable | BufferResolvable | null;
|
||||||
|
banner?: Base64Resolvable | BufferResolvable | null;
|
||||||
|
bio?: string | null;
|
||||||
|
nick?: string | null;
|
||||||
|
reason?: string;
|
||||||
|
}
|
||||||
|
|
||||||
export type GuildResolvable =
|
export type GuildResolvable =
|
||||||
| Guild
|
| Guild
|
||||||
| GuildEmoji
|
| GuildEmoji
|
||||||
|
|||||||
Reference in New Issue
Block a user