mirror of
https://github.com/arthur-pbty/flint.git
synced 2026-08-01 20:29:03 +02:00
f807d523d047623f27bf76e8a7ea8d3df942cfbf
Discord.js v14 Framework Template
Professional command framework template for Discord.js 14.26.2 with:
- Single command object schema
- Minimal command authoring (
name,category,execute) - Shared execution logic for prefix and slash
- External JSON i18n
- Automatic prefix and slash localizations from locale files
- One localized
nameper language drives both prefix and slash triggers - Typed argument schema
- User permission checks
- Auto-generated help from command metadata
Presence Storage
- The
presencecommand is persisted in PostgreSQL. - Storage is keyed by
bot_id(Discord user id), so one PostgreSQL instance can serve multiple bots. - Presence survives bot restarts and container restarts.
Setup
- Install dependencies: npm install
- Create environment file: cp .env.example .env
- Fill required values in
.env:DISCORD_TOKENDISCORD_CLIENT_IDDATABASE_URL
- Optional values:
DATABASE_SSL(truefor managed cloud DB,falsefor local Docker)PRESENCE_STREAM_URL(used when activity type isSTREAMING)
- Deploy slash commands: npm run deploy:commands
- Start in development: npm run dev
Docker Deployment (Bot + PostgreSQL)
- Configure
.env(at minimumDISCORD_TOKEN,DISCORD_CLIENT_ID). - Start stack: docker compose up -d --build
- Stop stack: docker compose down
By default, docker-compose.yml provisions:
bot: the Discord bot containerpostgres: PostgreSQL 16 with persistent volumepostgres_data
The bot container uses:
DATABASE_URL=postgresql://<POSTGRES_USER>:<POSTGRES_PASSWORD>@postgres:5432/<POSTGRES_DB>
Multi-Bot With One DB
You can run several bot services against the same PostgreSQL instance.
- Keep one shared
postgresservice. - Add additional bot services with different
DISCORD_TOKEN/DISCORD_CLIENT_ID. - Keep
DATABASE_URLpointing to the same PostgreSQL service.
Because rows are keyed by bot_id, each bot keeps its own independent presence configuration.
An example with two bot services is available in docker-compose.multi-bot.example.yml.
Architecture
src/framework/types/command.ts: strict command schemasrc/framework/commands/defineCommand.ts: default command completionsrc/framework/commands/registry.ts: trigger/name mapping generated from localessrc/framework/commands/argParser.ts: prefix/slash args parsing from schemasrc/framework/execution/CommandExecutor.ts: unified pipeline (permissions/execute)src/framework/handlers/prefixHandler.ts: prefix entrypointsrc/framework/handlers/slashHandler.ts: slash entrypointsrc/framework/presence/presenceStore.ts: PostgreSQL presence storagesrc/framework/presence/presenceTypes.ts: shared presence types/validationlocales/*.json: external i18n dictionariessrc/commands/*: business commands only (execute)
Included Commands
kiss(fun) with requireduserargping(utility)advanced(utility) with full argument/permission examplehelp(core) with auto category and usage generation
Adding A Command
- Create a command object in
src/commands/... - Follow the schema in
src/framework/types/command.ts - Add command to
src/commands/index.ts - Deploy slash commands again (
npm run deploy:commands)
Description
Template Discord.js avec commandes prefix & slash auto, components v2, help auto, multi-langue et variables dynamiques (ex: {{bot_latency}}).
Readme
3.6 MiB
Languages
TypeScript
93.3%
JavaScript
3.2%
PLpgSQL
1.7%
CSS
0.9%
Dockerfile
0.9%