diff --git a/package.json b/package.json index 4aeb511..170b710 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "private": false, "dependencies": { "eris": "^0.10.1", + "eris-pagination": "bsian03/eris-pagination", "fs-extra": "^8.1.0", "mongoose": "^5.7.4", "nodemailer": "^6.3.1" diff --git a/src/commands/modlogs.ts b/src/commands/modlogs.ts new file mode 100644 index 0000000..851dcc7 --- /dev/null +++ b/src/commands/modlogs.ts @@ -0,0 +1,52 @@ +import { Message } from 'eris'; +import { createPaginationEmbed } from 'eris-pagination'; +import Client from '../Client'; +import Command from '../class/Command'; +import RichEmbed from '../class/RichEmbed'; + +export default class Modlogs extends Command { + constructor(client: Client) { + super(client); + this.name = 'modlogs'; + this.description = 'Check a user\'s Cloud Modlogs'; + this.aliases = ['infractions', 'modlog']; + this.enabled = true; + this.permissions = { roles: ['446104438969466890'] }; + } + + public async run(message: Message, args: string[]) { + const msg: Message = await message.channel.createMessage(`***${this.client.stores.emojis.loading} Locating modlogs...***`); + const query = await this.client.db.Moderation.find({ $or: [{ account: args.join(' ') }, { userID: args.filter((a) => a)[0].replace(/[<@!>]/g, '') }] }); + if (!query.length) return msg.edit(`***${this.client.stores.emojis.error} Cannot locate modlogs for ${args.join(' ')}***`); + + let index = 0; const logs: {name: string, value: string, inline: boolean}[][] = [[]]; + const formatted = query.map((log) => { + const { account, moderatorID, reason, type, date } = log; + const name = type; + const value = `**Account name:** ${account}\n**Moderator:** <@${moderatorID}>\n**Reason:** ${reason}\n**Date:** ${date.toLocaleString('en-us')} EST`; + const inline = true; + return { name, value, inline }; + }); + const users = [...new Set(query.map((log) => log.userID))].map((u) => `<@${u}>`); + + while (query.length) { + if (logs[index].length >= 25) { index += 1; logs[index] = []; } + logs[index].push(formatted[0]); formatted.shift(); + } + + const embeds = logs.map((l) => { + const embed = new RichEmbed(); + embed.setDescription(`List of Cloud moderation logs for ${users.join(', ')}`); + embed.setAuthor('Library of Code | Cloud Services', this.client.user.avatarURL, 'https://libraryofcode.us'); + embed.setTitle('Cloud Modlogs/Infractions'); + embed.setFooter(`Requested by ${message.author.username}#${message.author.discriminator}`, message.author.avatarURL); + l.forEach((f) => embed.addField(f.name, f.value, f.inline)); + embed.setTimestamp(); + embed.setColor(3447003); + return embed; + }); + + createPaginationEmbed(message, this.client, embeds, {}, msg); + return msg; + } +} diff --git a/src/models/Moderation.ts b/src/models/Moderation.ts index 2a4b73b..2099c64 100644 --- a/src/models/Moderation.ts +++ b/src/models/Moderation.ts @@ -7,7 +7,7 @@ export interface ModerationInterface extends Document { moderatorID: string, reason: string, type: string, - date: string + date: Date } const Moderation: Schema = new Schema({