65 lines
No EOL
1.8 KiB
JavaScript
65 lines
No EOL
1.8 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'],
|
|
ownerOnly: 'true', // Owner only until i am sure there is no security issue
|
|
args: [
|
|
{
|
|
id: 'url',
|
|
type: 'string'
|
|
},
|
|
{
|
|
id: 'fullpage',
|
|
type: 'flag',
|
|
flag: '--full'
|
|
}
|
|
],
|
|
channelRestriction: 'guild',
|
|
description: {
|
|
content: 'Take a screenshot of a website',
|
|
usage: '[link to a website]',
|
|
examples: ['www.google.com']
|
|
}
|
|
});
|
|
}
|
|
|
|
async exec(message, args) {
|
|
let Embed = this.client.util.embed()
|
|
.setColor(message.member.displayHexColor)
|
|
.setTitle(args.url);
|
|
|
|
// 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());
|
|
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`);
|
|
return message.channel.send(Embed);
|
|
}
|
|
});
|
|
} else {
|
|
return message.channel.send('The URL you used doesn\'t correspond to a website!');
|
|
}
|
|
}
|
|
}
|
|
module.exports = screenshotCommand; |