discord_bot/commands/misc/netload.js

78 lines
2.4 KiB
JavaScript

const https = require('https');
const fs = require('fs')
const netloadDir = "../../netload"
const validUrl = require('valid-url');
module.exports = {
name: 'netload',
description: 'Load a module from the internet',
moreHelp: ["Examples:",
"Either provide a link to the module, or upload it",
"To get an example of how your module should look like, do:",
"<prefix>netload example",
"You have to be whitelisted to use this command.",
"The bot operator also has to have this enabled in the config."
],
execute({ message, args, prefix, client, owners }) {
//check if netload whitelist file exists
if (!fs.existsSync('./data/netmoduleWhitelist.json')) {
fs.writeFileSync('./data/netmoduleWhitelist.json', "[]")
}
let json = fs.readFileSync('./data/netmoduleWhitelist.json', 'utf8');
let whitelist = JSON.parse(json)
if (json.indexOf(message.author.id.toString()) == -1) {
message.channel.send("You do not have permissions to use this command.");
return;
}
if (args[0] == "whitelist" && owners.indexOf(message.author.id.toString()) >= 0) {
whitelist.push(args[1])
fs.writeFileSync("./data/netmoduleWhitelist.json", JSON.stringify(whitelist, null, 4))
return;
}
if (!args[0] && message.attachments.size == 0) {
message.channel.send(`You have to either specify a url or upload a file via the command.\nTo get an example file, execute \`${prefix}netload example\``)
return;
} if (args[0] == "example") {
let example = fs.readFileSync('commands/.example')
message.channel.send(`\`\`\`js\n${example}\n\`\`\``)
return;
}
let url, fileName;
if (message.attachments.size > 0) {
url = message.attachments.first().url
fileName = message.attachments.first().name
} else {
url = args[0]
if (!validUrl.isUri(url)) {
message.channel.send("This does not look like a valid url")
return;
}
fileName = args[0].split("/")[args[0].split("/").length - 1]
}
if (fs.existsSync(`${netloadDir}/${fileName}`)) {
message.channel.send(`A module with this filename(${fileName}) already exists.`)
return;
}
https.get(url, (res) => {
res.on('data', (d) => {
fs.writeFileSync(`${netloadDir}/${fileName}`, d);
reloadNetModules(client);
});
}).on('error', (e) => {
message.channel.send("Error download file.");
console.log(e)
});
let reloadNetModules = require('../util/reloadNetModules');
reloadNetModules(client)
}
};