import { randomBytes } from 'crypto'; import { Message, TextChannel } from 'eris'; import { Client, Command, LocalStorage } from '../class'; export default class StoreMessages extends Command { constructor(client: Client) { super(client); this.name = 'storemessages'; this.description = 'Fetches 1000 messages from the specified channel and stores them in a HTML file.'; this.usage = `${this.client.config.prefix}storemessages [member ID]`; this.aliases = ['sm']; 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 check = this.client.util.resolveGuildChannel(args[0], this.mainGuild, false); if (!check || check.type !== 0) return this.error(message.channel, 'The channel you specified either doesn\'t exist or isn\'t a textable guild channel.'); const chan = this.mainGuild.channels.get(check.id); const loadingMessage = await this.loading(message.channel, 'Fetching messages...'); let messages = await chan.getMessages(10000); if (args[1]) { messages = messages.filter((m) => m.author.id === args[1]); } let html = `

Library of Code sp-us

Channel: ${chan.name} (${chan.id})
Generated by: ${message.author.username}#${message.author.discriminator}
Generated at: ${new Date().toLocaleString('en-us')}

`; for (const msg of messages) { html += `(${new Date(msg.timestamp).toLocaleString('en-us')}) [${msg.author.username}#${msg.author.discriminator} - ${msg.author.id}]: ${msg.cleanContent}
`; } message.delete(); const identifier = randomBytes(10).toString('hex'); const comp = await LocalStorage.compress(html); const file = new this.client.db.File({ name: `${chan.name}-${new Date().toLocaleString('en-us')}.html.gz`, identifier, mimeType: 'application/gzip', data: comp, downloaded: 0, maxDownloads: 1, }); await file.save(); loadingMessage.delete(); this.client.getDMChannel(message.author.id).then((c) => c.createMessage(`https://loc.sh/m/${identifier}.html.gz`)).catch(() => this.error(message.channel, 'Could not send a DM to you.')); return this.success(message.channel, `Fetched messages for <#${chan.id}>. Check your DMs for link to access.`); } catch (err) { return this.client.util.handleError(err, message, this); } } }