Repository navigation
Contributing
Contributions are welcome: code, translations, help articles, bug reports and ideas. Start with
docs/contributing.md, then
AGENTS.md, which records how the code is built, the
conventions, and the decisions already made. Both apply to people and coding agents alike.
git clone https://github.com/Kkkermit/Testify.git
cd Testify
nvm use # Node 24.11 or newer
npm ci
npm run setup -- --dev # writes .env.development for a separate test bot
npm run dev # the bot, restarting on every save
npm run dev:all # the bot and the dashboard togetherUse a separate test bot and a test server while you work, and set DISCORD_DEV_GUILD_ID so commands register in
that server only.
-
Cut a branch from the latest
develop, namedtestify/<type>-<nn>, where the type isfeature,bugfix,choreordocs. -
Run
npm run checkbefore you commit. It runs the type check, the linter, the format check and the tests. -
Commit as
type: Capitalized subject, such asfix: Stop the casino paying twice. A hook checks it, andnpm run commitwrites one for you. -
Open the pull request against
develop, nevermain. CI runs on every push, with the tests on Windows.
main only takes the release pull request from develop, and each merge into main is a release: see
Releases and updates.
| To change… | Look in |
|---|---|
| A command |
src/commands/<category>/*.command.ts: one file serves both slash and prefix |
| A button, menu or form |
src/buttons/, with its message drawn in src/lib/<domain>/
|
| What the bot says |
src/config/strings.ts, and src/config/replies.ts for the shared replies |
| A database query |
src/database/repositories/: commands never use a model directly |
| A dashboard screen |
dashboard/src/features/<name>/, with its API route in src/api/routes/
|
| A help article | assets/support/*.md |
| Configuration |
src/config/env.ts, both .env*.example files and scripts/setupEnv.ts
|
The codebase walks through the layout, and Adding a command shows a whole command.
-
The dashboard reads
dashboard/src/i18n/locales/<language>.json. English is the source, and a test names any key a language is missing. -
Discord's command menus read
assets/locales/commands/<language>.json. Runnpm run i18n:commandsafter changing a command, and the suite names every string still to translate. -
A new language is listed in
docs/contributing.md.
-
Some files are generated. Never edit
docs/commands.mdby hand: runnpm run docs:commands. -
This wiki is generated too. It's published from
docs/wiki/, so change it there with a pull request. Edits made on GitHub's wiki pages are overwritten. - Everybody is held to the code of conduct.
This wiki is published from docs/wiki/ in the
repository. To change a page, edit it there with a pull request: edits made here are overwritten.
Using it
Running your own
Changing it
Links