diff --git a/.eslintrc.json b/.eslintrc.json index a259692..b70dfd8 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -186,7 +186,7 @@ "newline-per-chained-call": [ "error", { - "ignoreChainWithDepth": 3 + "ignoreChainWithDepth": 4 } ], "no-array-constructor": "error", diff --git a/src/managers/GuildMemberManager.js b/src/managers/GuildMemberManager.js index c061b08..366fcac 100644 --- a/src/managers/GuildMemberManager.js +++ b/src/managers/GuildMemberManager.js @@ -614,6 +614,38 @@ class GuildMemberManager extends CachedManager { }); } + /** + * Adds a role to a member. + * @param {GuildMemberResolvable} user The user to add the role from + * @param {RoleResolvable} role The role to add + * @param {string} [reason] Reason for adding the role + * @returns {Promise} + */ + async addRole(user, role, reason) { + const userId = this.guild.members.resolveId(user); + const roleId = this.guild.roles.resolveId(role); + + await this.client.api.guilds(this.guild.id).members(userId).roles(roleId).put({ reason }); + + return this.resolve(user) ?? this.client.users.resolve(user) ?? userId; + } + + /** + * Removes a role from a member. + * @param {UserResolvable} user The user to remove the role from + * @param {RoleResolvable} role The role to remove + * @param {string} [reason] Reason for removing the role + * @returns {Promise} + */ + async removeRole(user, role, reason) { + const userId = this.guild.members.resolveId(user); + const roleId = this.guild.roles.resolveId(role); + + await this.client.api.guilds(this.guild.id).members(userId).roles(roleId).delete({ reason }); + + return this.resolve(user) ?? this.client.users.resolve(user) ?? userId; + } + _fetchMany({ limit = 0, withPresences: presences = true, diff --git a/typings/index.d.ts b/typings/index.d.ts index 332697e..e4e7436 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -4022,6 +4022,12 @@ export class GuildMemberManager extends CachedManager; public search(options: GuildSearchMembersOptions): Promise>; public unban(user: UserResolvable, reason?: string): Promise; + public addRole(user: UserResolvable, role: RoleResolvable, reason?: string): Promise; + public removeRole( + user: UserResolvable, + role: RoleResolvable, + reason?: string, + ): Promise; } export class GuildBanManager extends CachedManager {