A modern TypeScript-only Discord.js framework with decorators, database integration, and advanced handlers
npm install @harmonixjs/corebash
npm install @harmonixjs/core tsx discord.js
npm install --save-dev typescript
`
š Quick Start
$3
`bash
npx tsc --init
`
Update tsconfig.json:
`json
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "node",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"outDir": "dist",
"esModuleInterop": true
}
}
`
$3
`typescript
// src/index.ts
import { Harmonix } from "@harmonixjs/core";
const bot = new Harmonix({
bot: {
id: "YOUR_BOT_CLIENT_ID",
token: "YOUR_BOT_TOKEN"
},
publicApp: true,
folders: {
commands: "./src/commands",
events: "./src/events",
components: "./src/components"
},
intents: [3249151] // (All Intents)
});
// Register a plugin
bot.use(...);
// Start listening
bot.login(botConfig.bot.token);
`
$3
`typescript
// src/commands/Ping.ts
@Command({
name: "ping",
description: "Ping command",
})
export default class PingCommand implements CommandExecutor {
execute(bot: Harmonix, ctx: CommandContext) {
ctx.reply("Pong!");
}
}
// src/commands/PingPrefix.ts
@Command({
name: "ping",
description: "Ping command",
type: 'prefix'
})
export default class PingPrefixCommand implements CommandExecutor<"prefix"> {
execute(bot: Harmonix, ctx: CommandContext<"prefix">) {
ctx.reply("Pong!");
}
}
`
`typescript
// src/events/Ready.ts
@Event(Events.ClientReady)
export default class ClientReady implements EventExecutor {
execute(bot: Harmonix, client: Client) {
bot.logger.sendLog("SUCCESS", Bot is ready! Logged in as ${client.user.tag});
}
}
`
`typescript
// src/components/TestButton.ts
@Component({
id: "test_button"
})
export default class TestButton implements ComponentExecutor {
execute(bot: Harmonix, ctx: ComponentContext) {
ctx.reply("Test button clicked!");
}
}
// src/components/TestSelect.ts
@Component({
id: "test_button"
type: "string-select"
})
export default class TestSelect implements ComponentExecutor<"string-select"> {
execute(bot: Harmonix, ctx: ComponentContext<"string-select">) {
//...
}
}
`
$3
`bash
npx tsx src/index.ts
``