// Copyright 2019-2020 Campbell Crowley. All rights reserved. // Author: Campbell Crowley (dev@campbellcrowley.com) const MemberAction = require('./MemberAction.js'); /** * @description Take a role from a member. * * @memberof HungryGames~Action * @inner * @augments HungryGames~Action~MemberAction */ class TakeRoleAction extends MemberAction { /** * @description Create an action that will remove a Discord role from a * member. * @param {Discord~Role} role The role to take. */ constructor(role) { super((hg, game, member) => { if (!member.guild.members.me.permissions.has('MANAGE_ROLES')) return; member.roles.remove(this._role, 'HG Automation').catch(console.error); }); this._role = role; this._saveData = {role: role.id}; } /** * @description Get role ID of current configured role. * @public * @returns {string} The current role ID. */ get role() { return this._role.id; } /** * @description Update the role with a new value. * @public * @param {string} rId The ID of the role to set. */ set role(rId) { const newRole = this._role.guild.roles.resolve(rId); if (!newRole) { throw new TypeError('Failed to resolve role from given ID!'); } this._role = newRole; this._saveData.role = newRole.id; } /** * @description Create action from save data. * @public * @static * @override * @param {Discord~Client} client Bot client context to get object * references. * @param {string} id Guild ID this action is for. * @param {object} obj The parsed data from file. * @returns {?HungryGames~TakeRoleAction} The created action, null if unable * to find the given role. */ static create(client, id, obj) { const role = client.guilds.resolve(id).roles.resolve(obj.role); if (!role) return null; return new TakeRoleAction(role); } } module.exports = TakeRoleAction;