UNPKG

dscaffold

Version:

A TypeScript framework for scaffolding modular Discord bot projects with dynamic command and event loading

149 lines 5.69 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createProject = createProject; const inquirer_1 = __importDefault(require("inquirer")); const path_1 = __importDefault(require("path")); const utils_1 = require("../utils"); const ProjectGenerator_1 = require("../generators/ProjectGenerator"); async function createProject(projectName, options) { try { const spinner = utils_1.Logger.spinner('Setting up your Discord bot project...'); // Get project name if not provided if (!projectName) { const nameAnswer = await inquirer_1.default.prompt([ { type: 'input', name: 'name', message: 'What is your project name?', default: 'my-discord-bot', validate: (input) => { if (!(0, utils_1.validateProjectName)(input)) { return 'Please enter a valid project name (alphanumeric, hyphens, and underscores only)'; } return true; }, }, ]); projectName = nameAnswer.name; } if (!projectName || !(0, utils_1.validateProjectName)(projectName)) { utils_1.Logger.error('Invalid project name. Use only alphanumeric characters, hyphens, and underscores.'); return; } // Interactive prompts for project configuration const config = await getProjectConfig(projectName, options); spinner.start(); // Generate the project const generator = new ProjectGenerator_1.ProjectGenerator(config); const projectPath = path_1.default.join((0, utils_1.getCurrentWorkingDir)(), projectName); await generator.generate(projectPath); spinner.stop(); utils_1.Logger.success(`Discord bot project "${projectName}" created successfully!`); utils_1.Logger.info('Next steps:'); console.log(` cd ${projectName}`); console.log(' npm install'); console.log(' npm run dev'); } catch (error) { utils_1.Logger.error(`Failed to create project: ${error instanceof Error ? error.message : 'Unknown error'}`); process.exit(1); } } async function getProjectConfig(projectName, options) { const answers = await inquirer_1.default.prompt([ { type: 'list', name: 'language', message: 'Choose your preferred language:', choices: [ { name: 'TypeScript (Recommended)', value: 'typescript' }, { name: 'JavaScript', value: 'javascript' }, ], default: options?.language || 'typescript', }, { type: 'list', name: 'template', message: 'Choose a template:', choices: [ { name: 'Basic - Essential bot setup', value: 'basic' }, { name: 'Advanced - Full-featured with database and logging', value: 'advanced' }, ], default: options?.template || 'basic', }, { type: 'input', name: 'prefix', message: 'Bot command prefix:', default: '!', validate: (input) => input.length > 0 || 'Prefix cannot be empty', }, { type: 'checkbox', name: 'intents', message: 'Select Discord bot intents:', choices: [ { name: 'Guilds', value: 'Guilds', checked: true }, { name: 'Guild Messages', value: 'GuildMessages', checked: true }, { name: 'Message Content', value: 'MessageContent', checked: true }, { name: 'Guild Members', value: 'GuildMembers' }, { name: 'Guild Voice States', value: 'GuildVoiceStates' }, { name: 'Guild Presences', value: 'GuildPresences' }, ], }, { type: 'confirm', name: 'database', message: 'Include database integration?', default: false, when: (answers) => answers.template === 'advanced', }, { type: 'confirm', name: 'logging', message: 'Include advanced logging?', default: true, when: (answers) => answers.template === 'advanced', }, { type: 'confirm', name: 'eslint', message: 'Include ESLint for code linting?', default: true, }, { type: 'confirm', name: 'prettier', message: 'Include Prettier for code formatting?', default: true, }, { type: 'confirm', name: 'docker', message: 'Include Docker configuration?', default: false, when: (answers) => answers.template === 'advanced', }, ]); return { name: projectName, language: answers.language, template: answers.template, features: { database: answers.database || false, logging: answers.logging || false, eslint: answers.eslint, prettier: answers.prettier, docker: answers.docker || false, }, botSettings: { token: '', prefix: answers.prefix, intents: answers.intents, }, }; } //# sourceMappingURL=create.js.map