dis-cli
Version:
A package for easily generating discord bot projects
96 lines (75 loc) • 2.82 kB
JavaScript
const path = require('path')
const EventEmitter = require('events');
const { log, clear } = console
const executeCommand = require('../util/executeCommand');
const package_info = require('package-info');
const getVersion = async (name) => (await package_info(name)).version
const fs = require('fs-extra');
const writeFile = require('../util/writeFile');
const chalk = require('chalk');
const inquirer = require('inquirer');
const createDir = (name) => fs.mkdirSync(name);
module.exports = class Creator extends EventEmitter {
constructor(name, context, ops = {}) {
super()
this.name = name;
this.context = context;
this.ops = ops;
}
async create(options = {}) {
const { name, context } = this
const pm = this.ops.pm;
const installSyntax = pm === 'yarn' ? 'install' : 'i';
const packageAdd = pm === 'yarn' ? 'add' : 'i';
const pmx = pm ==='yarn' ? 'yarn' :'npx';
fs.readdir(context, (err, files) => {
if(err) throw err;
if(files.length !== 0) {
console.log(chalk.red('Directory is not empty'));
return process.exit();
}
})
await clear()
log(`✨ Generating files`)
// generate package.json with plugin dependencies
const pkg = {
name,
version: '0.1.0',
private: true,
scripts: {
start: 'node index.js'
},
dependencies: {
'discord.js': await getVersion('discord.js'),
'dotenv': '8.2.0'
}
}
await writeFile(context, {
'package.json': JSON.stringify(pkg, null, 2),
'README.md': `# Discord Bot`,
'index.js': require('../util/generateIndex')(),
'.env': 'TOKEN=YOUR_TOKEN_HER'
})
createDir('commands');
createDir('util');
['General', 'Moderation', 'Owner', 'Config'].forEach(dir => {
createDir(`commands/${dir}`);
})
await writeFile(path.join(context, 'commands', 'General'), {
'ping.js': require('../util/generatePing')()
});
await writeFile(path.join(context, 'util'), {
'Command.js': require('../util/generateCommandFile')()
});
log('✨ Installing Dependencies')
await executeCommand(`${pm} ${installSyntax}`);
// log instructions
log()
log(`🎉 Successfully created project ${chalk.yellow(name)}.`)
log(
`👉 Start your bot up by:\n\n` +
chalk.cyan(` ${chalk.gray('$')} ${pm} start`)
)
log()
}
}