Haha-Yes/commands/utility/screenshot.js

70 lines
No EOL
2.1 KiB
JavaScript

const { Command } = require('discord-akairo');
const captureWebsite = require('capture-website');
const os = require('os');
const fs = require('fs');
class screenshotCommand extends Command {
constructor() {
super('screenshot', {
aliases: ['screenshot', 'webshot', 'ss'],
category: 'utility',
clientPermissions: ['SEND_MESSAGES', 'ATTACH_FILES'],
args: [
{
id: 'url',
type: 'string'
},
{
id: 'fullpage',
type: 'flag',
flag: '--full'
}
],
channel: 'guild',
description: {
content: 'Take a screenshot of a website. Need to start with http(s)://. Use --full to take a full page capture',
usage: '[link to a website] [optional: --full]',
examples: ['https://google.com', 'https://namejeff.xyz --full']
}
});
}
async exec(message, args) {
if (args.url.includes('config.json')) return message.channel.send('I don\'t think so');
let Embed = this.client.util.embed()
.setColor(message.member.displayHexColor)
.setTitle(args.url);
let loadingmsg = await message.channel.send('Taking a screenshot <a:loadingmin:527579785212329984>');
// eslint-disable-next-line no-useless-escape
let urlregex = new RegExp(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/);
if (args.url.match(urlregex)) { // Only allow link with http/https
await captureWebsite.file(args.url, `${os.tmpdir()}/${message.id}.jpg`, {
type: 'jpeg',
headers: {
'Accept-Language': 'en-GB'
},
fullPage: args.fullpage
})
.catch((err) => {
console.error(err);
Embed.setDescription(err.toString());
loadingmsg.delete();
return message.channel.send(Embed);
})
.then(() => {
if (fs.existsSync(`${os.tmpdir()}/${message.id}.jpg`)) {
Embed.attachFiles([`${os.tmpdir()}/${message.id}.jpg`]);
Embed.setImage(`attachment://${message.id}.jpg`);
loadingmsg.delete();
return message.channel.send(Embed);
}
});
} else {
loadingmsg.delete();
return message.channel.send('The URL you used doesn\'t correspond to a website!');
}
}
}
module.exports = screenshotCommand;