dscaffold
Version:
A TypeScript framework for scaffolding modular Discord bot projects with dynamic command and event loading
88 lines (85 loc) • 3.12 kB
JavaScript
"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