UNPKG

dscaffold

Version:

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

88 lines (85 loc) 3.12 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventGenerator = void 0; const path_1 = __importDefault(require("path")); const utils_1 = require("../utils"); const TemplateRenderer_1 = require("./TemplateRenderer"); class EventGenerator { constructor(config) { this.config = config; this.templateRenderer = new TemplateRenderer_1.TemplateRenderer(); } async generate(targetPath) { // Determine if project uses TypeScript const tsConfigExists = await (0, utils_1.pathExists)(path_1.default.join(targetPath, 'tsconfig.json')); const extension = tsConfigExists ? 'ts' : 'js'; const eventsDir = path_1.default.join(targetPath, 'src', 'events'); const filePath = path_1.default.join(eventsDir, `${this.config.name}.${extension}`); const template = tsConfigExists ? this.getTypeScriptTemplate() : this.getJavaScriptTemplate(); const content = this.templateRenderer.render(template, { name: this.config.name, once: this.config.once, className: (0, utils_1.toPascalCase)(this.config.name), }); await (0, utils_1.writeFile)(filePath, content); } getTypeScriptTemplate() { const eventTypes = this.getEventTypeImports(this.config.name); return `import { ${eventTypes.join(', ')} } from 'discord.js'; module.exports = { name: '{{name}}', once: {{once}}, execute(${this.getEventParameters()}) { console.log('{{name}} event triggered'); // Add your event logic here }, };`; } getJavaScriptTemplate() { return `module.exports = { name: '{{name}}', once: {{once}}, execute(${this.getEventParameters()}) { console.log('{{name}} event triggered'); // Add your event logic here }, };`; } getEventTypeImports(eventName) { const eventTypeMap = { ready: ['Client'], messageCreate: ['Message'], interactionCreate: ['Interaction'], guildMemberAdd: ['GuildMember'], guildMemberRemove: ['GuildMember', 'User'], guildCreate: ['Guild'], guildDelete: ['Guild'], voiceStateUpdate: ['VoiceState'], error: [], warn: [], debug: [], }; return eventTypeMap[eventName] || ['Client']; } getEventParameters() { const parameterMap = { ready: 'client', messageCreate: 'message', interactionCreate: 'interaction', guildMemberAdd: 'member', guildMemberRemove: 'member', guildCreate: 'guild', guildDelete: 'guild', voiceStateUpdate: 'oldState, newState', error: 'error', warn: 'info', debug: 'info', }; return parameterMap[this.config.name] || '...args'; } } exports.EventGenerator = EventGenerator; //# sourceMappingURL=EventGenerator.js.map