/* eslint-disable indent */ const { Infraction } = require('../interfaces/'); class UnbanInfraction extends Infraction { constructor(client, opts = {}) { super(client, { type: 'UNBAN', targetType: 'USER', message: opts.message, executor: opts.executor.user, target: opts.target, reason: opts.reason, guild: opts.guild, channel: opts.channel, arguments: opts.arguments, silent: opts.silent, duration: opts.duration, hyperlink: opts.hyperlink, points: opts.points, expiration: opts.expiration, data: opts.data }); this.client = client; } async execute() { try { await this.guild.members.unban(this.target.id, this._reason); } catch(error) { return this._fail('INFRACTION_ERROR'); } const callbacks = this.client.moderationManager.callbacks.filter((c) => c.infraction.type === 'BAN' && c.infraction.target === this.target.id); if(callbacks.size > 0) callbacks.map((c) => this.client.moderationManager._removeExpiration(c)); await this.handle(); return this._succeed(); } async verify() { let ban = null; try { ban = await this.guild.fetchBan(this.target.id); } catch (e) { if (e.code !== 10026) this.client.logger.error(e); } if(!ban) return this._fail('C_UNBAN_NOTBANNED'); return super._verify(); } } module.exports = UnbanInfraction;