import moment, { unitOfTime } from 'moment'; import { Message, User } from 'eris'; import { Client, Command } from '../class'; export default class Ban extends Command { constructor(client: Client) { super(client); this.name = 'ban'; this.description = 'Bans a member from the guild.'; this.usage = 'ban [time] [reason]'; this.permissions = 3; this.guildOnly = true; this.enabled = true; } public async run(message: Message, args: string[]) { try { if (!args[0]) return this.client.commands.get('help').run(message, [this.name]); const member = this.client.util.resolveMember(args[0], this.client.guilds.get(this.client.config.guildID)); let user: User; if (!member) { try { user = await this.client.getRESTUser(args[0]); } catch { return this.error(message.channel, 'Cannot find user.'); } } else { user = member.user; } try { await this.client.guilds.get(this.client.config.guildID).getBan(args[0]); return this.error(message.channel, 'This user is already banned.'); } catch {} // eslint-disable-line no-empty if (member && !this.client.util.moderation.checkPermissions(member, message.member)) return this.error(message.channel, 'Permission Denied.'); message.delete(); let momentMilliseconds: number; let reason: string; if (args.length > 1) { const lockLength = args[1].match(/[a-z]+|[^a-z]+/gi); const length = Number(lockLength[0]); const unit = lockLength[1] as unitOfTime.Base; momentMilliseconds = moment.duration(length, unit).asMilliseconds(); reason = momentMilliseconds ? args.slice(2).join(' ') : args.slice(1).join(' '); if (reason.length > 512) return this.error(message.channel, 'Ban reasons cannot be longer than 512 characters.'); } await this.client.util.moderation.ban(user, message.member, momentMilliseconds, reason); return this.success(message.channel, `${user.username}#${user.id} has been banned.`); } catch (err) { return this.client.util.handleError(err, message, this, false); } } }