import moment, { unitOfTime } from 'moment'; import { nanoid } from 'nanoid'; import { TextChannel } from 'eris'; import { Client, CmdContext, Command, RichEmbed } from '../class'; export default class Judgement_Add extends Command { constructor(client: Client) { super(client); this.name = 'add'; this.description = 'Creates a judgement.'; this.usage = `${this.client.config.prefix}judgement add `; this.permissions = 5; this.guildOnly = true; this.enabled = true; } public async run(ctx: CmdContext) { if (!ctx.args[0]) return this.client.commands.get('help').run(new CmdContext(ctx.message, [this.name])); if (ctx.args.length < 4) return this.client.commands.get('help').run(new CmdContext(ctx.message, [this.name])); const member = this.client.util.resolveMember(ctx.args[0], this.mainGuild); if (!member) return this.error(ctx.message.channel, 'Unable to locate member.'); const staff = await this.client.db.mongo.Staff.findOne({ userID: ctx.message.author.id }).lean().exec(); if (!staff) return this.error(ctx.message.channel, 'Unable to locate Staff information.'); if (Number.isNaN(Number(ctx.args[1]))) return this.error(ctx.message.channel, 'Severity must be a number.'); if (Number(ctx.args[1]) < 0 || Number(ctx.args[1]) > 2) return this.error(ctx.message.channel, 'Severity must be greater than -1 and less than 3.'); let momentMilliseconds: number; const now: number = Date.now(); let date: Date; if (ctx.args[2] !== '0') { const lockLength = ctx.args[2].match(/[a-z]+|[^a-z]+/gi); const length = Number(lockLength[0]); const unit = lockLength[1] as unitOfTime.Base; momentMilliseconds = moment.duration(length, unit).asMilliseconds(); date = new Date(momentMilliseconds + now); } const jid = nanoid(11); const entry = new this.client.db.mongo.Judgement({ jid, userID: member.user.id, enteredBy: ctx.message.author.id, severity: Number(ctx.args[1]), date: new Date(), expires: date ?? undefined, description: ctx.args.slice(3).join(' '), }); await entry.save(); let severity: string; switch (Number(ctx.args[1])) { case 0: severity = 'LOW'; break; case 1: severity = 'MEDIUM'; break; case 2: severity = 'HIGH'; break; default: break; } const log = this.client.guilds.get(this.client.config.guildID).channels.get('611584771356622849'); const embed = new RichEmbed(); embed.setTitle('Judgement - Creation'); embed.setDescription(entry.description); embed.addField('Member', `${member.username}#${member.discriminator} (<@${member.id}>)`, true); embed.addField('Entered by', `${ctx.message.author.username}${staff?.isManager ? ' [k]' : ''}`, true); embed.addField('Severity', severity, true); embed.setFooter(this.client.user.username, this.client.user.avatarURL); embed.setTimestamp(); if (date) { embed.addField('Expires on', date.toLocaleString('en-us'), true); } else { embed.addField('Expires on', 'INDEFINITE', true); } log.createMessage({ embed }); return this.success(ctx.message.channel, `Judgement \`${jid}\` successfully recorded.`); } }