mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-10 00:23:30 +01:00
feat(GuildMemberManager): addRole and removeRole (#8510)
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
This commit is contained in:
@@ -441,6 +441,42 @@ class GuildMemberManager extends CachedManager {
|
||||
return this.guild.bans.remove(user, reason);
|
||||
}
|
||||
|
||||
/**
|
||||
* Options used for adding or removing a role from a member.
|
||||
* @typedef {Object} AddOrRemoveGuildMemberRoleOptions
|
||||
* @property {GuildMemberResolvable} user The user to add/remove the role from
|
||||
* @property {RoleResolvable} role The role to add/remove
|
||||
* @property {string} [reason] Reason for adding/removing the role
|
||||
*/
|
||||
|
||||
/**
|
||||
* Adds a role to a member.
|
||||
* @param {AddOrRemoveGuildMemberRoleOptions} options Options for adding the role
|
||||
* @returns {Promise<GuildMember|User|Snowflake>}
|
||||
*/
|
||||
async addRole(options) {
|
||||
const { user, role, reason } = options;
|
||||
const userId = this.guild.members.resolveId(user);
|
||||
const roleId = this.guild.roles.resolveId(role);
|
||||
await this.client.rest.put(Routes.guildMemberRole(this.guild.id, userId, roleId), { reason });
|
||||
|
||||
return this.resolve(user) ?? this.client.users.resolve(user) ?? userId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a role from a member.
|
||||
* @param {AddOrRemoveGuildMemberRoleOptions} options Options for removing the role
|
||||
* @returns {Promise<GuildMember|User|Snowflake>}
|
||||
*/
|
||||
async removeRole(options) {
|
||||
const { user, role, reason } = options;
|
||||
const userId = this.guild.members.resolveId(user);
|
||||
const roleId = this.guild.roles.resolveId(role);
|
||||
await this.client.rest.delete(Routes.guildMemberRole(this.guild.id, userId, roleId), { reason });
|
||||
|
||||
return this.resolve(user) ?? this.client.users.resolve(user) ?? userId;
|
||||
}
|
||||
|
||||
async _fetchSingle({ user, cache, force = false }) {
|
||||
if (!force) {
|
||||
const existing = this.cache.get(user);
|
||||
|
||||
8
packages/discord.js/typings/index.d.ts
vendored
8
packages/discord.js/typings/index.d.ts
vendored
@@ -3407,6 +3407,12 @@ export class GuildManager extends CachedManager<Snowflake, Guild, GuildResolvabl
|
||||
public fetch(options?: FetchGuildsOptions): Promise<Collection<Snowflake, OAuth2Guild>>;
|
||||
}
|
||||
|
||||
export interface AddOrRemoveGuildMemberRoleOptions {
|
||||
user: GuildMemberResolvable;
|
||||
role: RoleResolvable;
|
||||
reason?: string;
|
||||
}
|
||||
|
||||
export class GuildMemberManager extends CachedManager<Snowflake, GuildMember, GuildMemberResolvable> {
|
||||
private constructor(guild: Guild, iterable?: Iterable<RawGuildMemberData>);
|
||||
public guild: Guild;
|
||||
@@ -3429,6 +3435,8 @@ export class GuildMemberManager extends CachedManager<Snowflake, GuildMember, Gu
|
||||
public prune(options?: GuildPruneMembersOptions): Promise<number>;
|
||||
public search(options: GuildSearchMembersOptions): Promise<Collection<Snowflake, GuildMember>>;
|
||||
public unban(user: UserResolvable, reason?: string): Promise<User | null>;
|
||||
public addRole(options: AddOrRemoveGuildMemberRoleOptions): Promise<GuildMember | User | Snowflake>;
|
||||
public removeRole(options: AddOrRemoveGuildMemberRoleOptions): Promise<GuildMember | User | Snowflake>;
|
||||
}
|
||||
|
||||
export class GuildBanManager extends CachedManager<Snowflake, GuildBan, GuildBanResolvable> {
|
||||
|
||||
Reference in New Issue
Block a user